3. Sysmac Studio工程搭建与变量规划

在 Omron Sysmac 平台中,工程搭建并不是“新建一个项目然后开始写程序”这么简单。Sysmac Studio 把控制器配置、EtherCAT 网络、运动控制轴、变量与数据类型都组织在同一个工程文件里,任何一个环节配置不当,都会在后续联锁与顺控逻辑中表现为难以定位的故障。本节围绕一个典型的 NJ/NX 控制器项目,说明从项目创建到变量规划的关键操作与判断依据。

项目创建与控制器配置

启动 Sysmac Studio 后选择“新建项目”,在项目属性中需要明确三项:设备型号(如 NX102-9000)、项目类型(标准项目或带运动控制的项目)、以及是否启用安全控制器。设备型号一旦选定,Sysmac Studio 会自动加载该控制器的内置 I/O 点数、最大 EtherCAT 从站数、支持的运动轴数等资源上限,这些上限直接决定后续变量与轴配置的规模。

控制器配置在“控制器设置”中完成。需要关注的是:操作周期(默认 1 ms,复杂顺控可放宽到 2 ms 或 4 ms)、运动控制周期(通常与操作周期一致或为其整数倍)、以及变量刷新方式。操作周期越短,扫描越频繁,但 CPU 负载越高;在带多轴插补的设备中,若把操作周期设为 0.5 ms 而实际负载超过 70%,会出现周期抖动,表现为轴使能偶发丢失。因此建议在配置完成后通过“任务监视”查看负载率,控制在 50% 以下较为稳妥。

EtherCAT 主站设置

EtherCAT 主站配置的核心是“扫描—分配—映射”三步。先在“EtherCAT”节点下执行从站扫描,Sysmac Studio 会读取各从站的 ESI 信息并生成节点列表;随后为每个从站分配节点地址,建议按物理顺序从 1 开始连续编号,便于排障时快速定位。最后进行 PDO 映射:把从站的输入/输出对象映射到控制器变量。

映射时有一个常见误区:直接把所有 PDO 都映射成全局变量。正确做法是只映射实际使用的对象,例如伺服驱动器的“状态字”“位置实际值”“控制字”“目标位置”,而把诊断类对象留给局部变量或系统变量。这样既减少通信负载,也避免全局变量表被大量无用条目污染。映射完成后,用“比较与合并”功能确认工程中的从站配置与实物一致,再下载到控制器。

Sysmac Studio 工程结构与变量作用域 工程层(Project) 控制器配置 操作周期 / 运动周期 EtherCAT 主站 扫描 / 节点地址 / PDO 运动控制轴 轴参数 / 单位换算 任务与程序 主任务 / 顺控 变量层(Variables) 全局变量(Global) g_ 前缀 · 跨程序共享 gAxis1_Status / gStartCmd 映射 EtherCAT PDO 局部变量(Local) 程序内声明 · 不跨程序 iStep / bEdgeFlag 减少全局污染 结构体(Struct) ST_ 前缀 · 打包相关变量 ST_Axis: Status/Pos/Cmd 便于批量传递与复用 PDO 映射 轴变量 命名与类型选择要点 • 全局变量:g + 设备/功能 + 含义,如 gConv1_Run、gAlarm_EStop • 局部变量:i/b/f 前缀 + 含义,如 iStep、bSensor1、fSpeedSet • 结构体:ST_ 前缀,成员按“状态—命令—参数”分组,避免扁平化堆叠

全局变量与局部变量命名规范

变量规划的目标是让程序在半年后仍能被自己和他人读懂。建议采用“作用域前缀 + 对象 + 含义”的命名方式:全局变量以 g 开头,局部变量以 i(整型)、b(布尔)、f(浮点)等类型前缀开头。例如 gConv1_Run 表示 1 号输送机的运行命令,iStep 表示当前步序号,bSensor1 表示 1 号传感器状态。

命名中应避免使用 Flag1、Temp、Data 这类无信息量的名称。对于联锁信号,建议在名称中体现“来源 + 动作”,如 gSafety_DoorClosed、gAxis1_Ready。这样在交叉引用列表中一眼就能看出信号归属,排障时不必反复跳转定义。

数据类型选择与结构体设计

数据类型选择直接影响内存占用与运算精度。布尔量用 BOOL;步序号、计数器用 INT 或 DINT;位置、速度等模拟量用 REAL 或 LREAL;时间量用 TIME。需要注意的是,REAL 为 32 位浮点,在累计计数场景下会丢失精度,若用于位置累加应改用 LREAL 或 DINT 配合单位换算。

结构体用于把逻辑上属于同一对象的变量打包。以伺服轴为例,可定义 ST_Axis,成员包括 Status(状态字)、PosActual(实际位置)、Cmd(控制字)、PosTarget(目标位置)、Ready(就绪标志)。这样在程序中只需传递一个 ST_Axis 变量,就能同时访问该轴的全部信息,既减少变量表条目,也降低漏映射的风险。

结构体成员建议按“状态—命令—参数”顺序排列,并在注释中标注单位(如 mm、mm/s、ms),避免后续维护时因单位混淆导致定位偏差。

一个可参考的变量规划片段

下面给出一个输送—分拣单元的变量规划示例,仅用于说明命名与结构体组织方式,实际项目应按设备规模调整。

// 全局变量
gConv1_Run        : BOOL;      // 1号输送机运行命令
gConv1_SpeedSet   : REAL;      // 速度设定,单位 mm/s
gSensor1_PartAt   : BOOL;      // 1号工位有料检测
gAxis1            : ST_Axis;   // 1号伺服轴结构体
gAlarm_EStop      : BOOL;      // 急停联锁

// 结构体定义
TYPE ST_Axis :
STRUCT
    Status      : WORD;        // 状态字
    Ready       : BOOL;        // 伺服就绪
    PosActual   : LREAL;       // 实际位置,单位 mm
    Cmd         : WORD;        // 控制字
    PosTarget   : LREAL;       // 目标位置,单位 mm
END_STRUCT
END_TYPE

// 局部变量(某顺控程序内)
iStep             : INT;       // 当前步序号
bStartEdge        : BOOL;      // 启动上升沿
tTimeout          : TIME;      // 步超时监视

完成变量规划后,建议执行一次“编译 + 交叉引用检查”:确认没有未使用变量、没有重复定义、没有类型不匹配。若编译通过且交叉引用列表中每个全局变量都有明确的读写位置,说明变量规划基本到位,可以进入下一阶段的顺控程序编写。