ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

从IO到伺服:Sysmac Studio运动控制核心流程实战

从IO到伺服:Sysmac Studio运动控制核心流程实战

1. 从IO分配到运动控制,接着上一篇往下聊

上一篇把Sysmac Studio的安装、建工程、界面布局和基础设置过了一遍,这篇直接进入实际干活的部分。很多初学者在看完第一篇后,最大的困惑往往不是软件不会点,而是“我建好了工程,接下来该干什么”。这篇就把这条主线的后半段讲清楚——IO配置与分配、轴参数设定、ST程序编写、在线调试与监控,以及离线模拟验证。这些环节是真正用Sysmac Studio做项目的核心流程,也是和传统PLC编程习惯差异最大的地方。

Sysmac Studio的核心设计思路是“一个软件管全套”:从硬件组态、IO映射、运动控制轴配置,到逻辑编程、HMI画面、模拟仿真,甚至现场总线的参数设定,全部集成在同一个工程文件里。这就意味着你不需要像以前那样,PLC用一个软件、触摸屏用另一个软件、伺服调试再开一个工具,来回切换还容易数据不同步。在Sysmac Studio里,所有配置都汇总到一个工程内,数据一致性由IDE统一维护。

这篇内容适合刚接触欧姆龙NJ/NX系列或者正在从传统PLC转向自动化平台的人。如果你已经会用Codesys或者倍福TwinCAT,那上手Sysmac会更顺,因为底层思路都是IEC 61131-3标准那套东西,但具体操作细节差别不小,值得细看。

2. 核心配置操作拆解:从设备树到IO映射

2.1 设备树到底该怎么看

新建工程并选中NJ系列控制器后,左侧会生成一个层次化的设备树。很多习惯了传统PLC软件的人第一次看到这个树状结构容易懵,其实它就是把整个控制系统“实物化”了。从上到下依次是:控制器本体、内置IO、CPU单元内置EtherNet/IP端口、内置EtherCAT端口、以及通过EtherCAT扩展的从站设备。

这里有个关键认知要转变:Sysmac Studio里的设备树不只是配置界面,它直接决定了程序里的变量和物理硬件怎么对应。你在设备树里添加的每一个从站、每一条轴,最终都会映射成程序里可用的系统定义变量。这一步确认到位,后面写程序才顺。

实操顺序很重要。先把设备树搭好,再写逻辑,顺序反了会浪费大量时间。具体步骤:

  1. 确认控制器型号和固件版本,在“系统”里选对硬件型号;
  2. 在EtherCAT配置下添加实际使用的伺服驱动器、远程IO从站;
  3. 为每个从站分配节点地址,注意不能和实际硬件上的拨码设定冲突;
  4. 全部添加完毕后,执行“比较与合并”功能,软件会自动同步实际从站配置。

2.2 IO映射:把物理点位变成程序变量

IO映射这一步是初学者最容易搞混的地方,因为Sysmac Studio不是像传统PLC那样编地址(比如%IX0.0、%QW10这种),而是采用变量名直连的方式。

以NJ501为例,内置IO模块上的输入输出点在添加硬件后,会出现在设备树的“单元”下方。要做映射,右键点击内置IO模块,选择“编辑单元操作数”,弹出的窗口里可以看到每个物理端子的位置。双击“变量”列,输入一个工程内全局变量名,比如Start_Button,这个变量就直接绑定了物理输入点。

这种映射方式的最大优势在于:程序里不再出现一串串物理地址,全部使用有意义的变量名。项目规模大了之后,可读性和可维护性提升非常明显。但要注意,这个映射关系一旦锁定,程序里变量名就不能随意改,否则编译直接报错,而且排查起来需要检查变量映射表。

我在实际项目里总结了几个经验:

  • 变量命名建议带前缀区分类型,比如按钮输入用Btn_开头,传感器用Sen_开头,输出用Out_开头,伺服使能用Sv_Enable这种格式;
  • 映射完成后,导出IO映射表Excel存档,方便电气工程师接线时对照;
  • 内置IO的点位映射在工程里是“可读写”的,运行时最好不要通过程序修改映射关系,容易出意外。

2.3 EtherCAT从站配置的常见坑

EtherCAT是NJ/NX系列和伺服驱动器、远程IO之间的高速总线。在设备树中添加从站后,有两个细节特别容易踩坑:

第一,从站名称必须和实际硬件型号严格一致。Sysmac Studio的从站配置文件库会随着版本更新,如果你用的驱动器型号比较新,而软件版本比较旧,很可能找不到对应的配置文件。这种情况不要硬选其他型号代替,正确做法是升级软件到支持该设备配置文件的版本,或者找设备厂商要ESI文件导入。

第二,EtherCAT的拓扑结构确认。虽然在软件里可以拖拽从站顺序,但实际接线必须和软件里的顺序保持一致。EtherCAT是串联菊花链结构,一个节点断开,它后面的所有节点都会离线。在线连接后,正确做法是在“EtherCAT”页签里执行“与实际从站比较”,让软件自动核对实际连接情况与工程配置是否一致。实测下来,这个功能比人工核对可靠得多。

3. 运动控制轴配置:伺服都在这条线里

3.1 轴类型与基本参数设定

Sysmac Studio里运动控制是基于轴对象(Axis)的,而不是直接操作驱动器寄存器。添加轴的入口在“运动控制设置”下的“轴设置”里。根据使用场景,轴类型分为两大类:伺服轴(Servo Axis)和虚拟伺服轴(Virtual Servo Axis)。伺服轴对应实际的伺服驱动器,虚拟轴常用于仿真、电子凸轮规划、同步运算等场景。

轴的基本参数设定是整个运动控制系统能否跑稳的关键。双击轴图标打开设置窗口后,有几个参数必须认真核对:

位置单位。Sysmac支持脉冲、毫米、微米、度等单位。实际项目中要结合机械结构来定:如果带动滚珠丝杠,用毫米直观;如果是转台,用度方便。这个参数影响后续所有位置指令的数值,一旦定错,程序里所有位置数据都要返工。

电子齿轮比。驱动器侧电子齿轮分子分母设定后,必须和轴配置里的“编码器分辨率”“电机每转移动量”匹配。这里最容易出错的根源是单位混乱。具体分析如下:

  • 编码器分辨率在驱动器铭牌上,通常以“编码器分辨率(pulse/rev)”标注,常见值有2的17次方、2的20次方、2的23次方等;
  • 电机每转移动量由机械结构决定,滚珠丝杠就用导程,皮带轮就用有效周长,转台就用每转度数(通常设为360);
  • 电子齿轮比的计算基准是:发送指令脉冲数 × 编码器分辨率 = 实际位移 ×(电机每转移动量对应的脉冲数)。

举个实际例子。一款20位编码器的伺服电机,驱动器电子齿轮设为分子1、分母10,配导程10mm的丝杠。位置单位选毫米时,Sysmac内部会自动根据编码器分辨率和电子齿轮比换算指令单位。操作中我通常这样确定参数:先把单位栅格设定完成,再在轴参数页“伺服”栏核对“电机每转移动量”是否为10mm,然后试运行“简易定位”里的点动功能,用百分表实测移动量,误差在两个方向都小于一个脉冲当量,说明齿轮比换算正确。

3.2 原点返回参数的选择逻辑

原点返回是运动控制项目里绕不开的环节。Sysmac Studio提供多种原点返回方式,常用的有“按照原点输入”“按照原点输入与Z相信号”和“按照限位输入”。

这里有个选择逻辑值得展开讲:如果机械结构允许,优先选用“原点输入与Z相”方式。只依赖原点传感器的信号回零,精度受传感器安装位置和响应速度影响,接近开关类的传感器尤其明显,每次停止位置都可能差几个脉冲。而加入Z相信号后,因为Z相在电机每转一圈只有一个固定脉冲,传感器信号只是粗定位,最终以Z相为精确零点,重复精度会明显提升。

记得有一次,现场一台设备总是做完原点返回后,定位精度不稳定,偶尔还会跑偏。排查后发现,原点传感器本身没问题,但机械安装位置存在轻微松动,导致触发点每次都有微小差异。后来把原点返回方式改为“原点输入+Z相”后,问题就解决了。

原点返回速度参数也有讲究。接近速度(接近原点传感器时的速度)建议设定在较低值,比如50mm/min,太高容易过冲。返回速度可以快,比如3000mm/min,但接近速度慢,定位重复精度才稳。

3.3 轴强制停止与软限位

这个章节存在的意义是提醒:安全类参数不要省。Sysmac Studio中,每个轴都可以设定正向软限位和负向软限位。软限位的作用范围是整个用户程序运行期间,无论JOG模式还是定位指令,一旦到达限位位置,轴立即停止。

软限位值设定时要注意先确认机械行程,再往回留安全余量。比如丝杠行程是500mm,软限位我会设定为±480mm。如果行程尽头有硬限位(限位开关),那么软限位必须比硬限位更靠近中间区域,绝不能和硬限位一样甚至超出。

强制停止输入的配置也要单独确认。在轴属性中可以指定一个输入点作为强制停止信号源,建议直接绑定到驱动器/控制器的硬件输入点,而不是程序内部的软变量。这样即使程序跑飞,物理急停信号依然能直接切断轴脉冲输出。

4. 从写程序到跑起来:逻辑实现与在线调试

4.1 程序组织方式和任务配置

Sysmac Studio的程序组织与传统PLC有本质不同。传统PLC往往一个主程序写完所有逻辑,而Sysmac基于IEC 61131-3,采用“程序(Program)+任务(Task)”的结构。你必须把一个完整的控制逻辑拆分成多个程序块,然后将每个程序块分配给不同的任务执行。

NJ/NX系列的任务优先级是固定周期执行的。这意味着理论上不同的程序可以在不同的刷新周期里运行:

  • 主周期任务(Primary Periodic Task):运行运动控制相关逻辑,周期最短,默认1ms级别;
  • 周期任务(Periodic Task):运行常规IO逻辑,周期可以设置为1ms、2ms、4ms等;
  • 事件任务(Event Task):只在特定条件触发时执行,比如初始化、报警处理。

这个设计直接影响程序架构。运动控制相关的轴指令(比如定位、点动)必须放在主周期任务里,因为伺服控制指令必须在固定周期内刷新。如果放到周期任务里,周期长了会出现指令响应延迟,设备运动不稳定;如果放到事件任务里,那执行时机完全不可控,运动控制基本没法用。

IO逻辑和普通业务逻辑放在周期任务里,周期可以适当放大,避免CPU占用过高。反正实测下来,程序拆得合理,CPU负荷会明显下降,扫周期也更稳定。

4.2 ST语言写控制逻辑的实用要点

在Sysmac Studio里,程序块内的编程语言可选梯形图(LD)和结构化文本(ST)。实话说,只要涉及复杂算法、数据处理、循环逻辑,ST语言的效率比梯形图高得多。运动控制指令在ST里调用也更简洁。

一个典型的ST程序段例子:

// 主周期任务中的简单点动控制逻辑 if Btn_JogPositive AND NOT Sensor_LimitPositive then MC_Power( Axis := Servo_Axis, Enable := TRUE, EnablePositive := TRUE, EnableNegative := TRUE, Stop := FALSE, ... ); MC_MoveJog( Axis := Servo_Axis, JogPositive := TRUE, JogNegative := FALSE, Velocity := 100.0, ... ); else MC_MoveJog( Axis := Servo_Axis, JogPositive := FALSE, JogNegative := FALSE, ... ); end_if;

注意到上面示例里,MC_Power的供电使能必须在每次程序扫描时持续调用,不能只在条件成立的瞬间调用一次。很多初学者都会写“只在按下按钮的那一个扫描周期调用MC_Power”,结果轴根本没使能,或者使能后马上掉电。这是因为运动控制指令输出的是“持续性指令”,必须在每个周期保持有效输出。

再一个问题是ST语句的赋值时机。Sysmac的任务周期和IO刷新之间有固定的时序关系。程序块里的变量值在任务周期开始时采集输入,执行后输出在周期结束时统一刷新。所以如果你的逻辑依赖某个变量的“上一周期值”,需要显式使用带历史功能的变量或者自己写延迟逻辑,不能默认指令之间有扫描周期的延迟关系。

4.3 在线连接前必须做的三项检查

把工程下载到控制器前,强烈建议先完成这三项检查。每一条都是我实际踩过坑之后总结出来的:

检查1:工程设置里的控制器型号、版本与实际现场硬件一致。型号选错会直接导致通信失败,版本不一致有时能连上但功能受限。

检查2:程序已经全编译通过。不是只编译自己改动的那个程序块,而是完整构建整个工程,确认错误数为0。Sysmac Studio的“构建”按钮在菜单栏和工具栏都有,快捷键是F7,需要养成习惯。

检查3:轴参数配置中,伺服驱动器通信协议版本匹配。NJ/NX和伺服间使用MECHATROLINK-III或者EtherCAT通信,通信机制不同,轴参数里的协议设置也要对应。不匹配的情况通常是能通电但轴不使能,或者使能瞬间报警。

5. 离线模拟与在线调试,两手都要硬

5.1 离线模拟:不用硬件也能把逻辑调通

Sysmac Studio自带模拟器功能,这个功能的价值常被低估。在“模拟”页签下可以启动模拟模式,即使现场还没有接真正的PLC,也能在PC上模拟运行整个工程,包括IO灯状态变化、轴位置变化和指令执行情况。

离线模拟最大的优势在于验证逻辑结构和指令使用是否正确。比如你写了一段定位控制逻辑,放在模拟环境里跑一遍,能充分验证:

  • 轴没有使能时报了什么错;
  • 位置到达后的完成标志是否按预期产生;
  • 变量名和数据类型有没有匹配不上;
  • 程序分支条件是否遗漏。

模拟模式下IO映射是不存在的,需要用软件提供的“模拟IO”功能手写变量值变化来模拟输入信号。这对控制程序验证其实够了,核心是逻辑对不对,而不是信号真实响应。

5.2 在线调试的操作流程与监控技巧

工程下载后,进入在线模式,Sysmac Studio会显示“在线”状态。此时有几个实用工具值得掌握:

数据监控窗口(Watch Window)。可以添加任意变量并实时查看当前值。我通常会把关键的轴状态变量、完成标志、报警代码一次性拖进去,做成一个固定的监控布局,现场排查问题时效率极高。

时序图监视器(Data Trace)。这个工具能记录变量在一段时间内的变化曲线。调试伺服定位时特别好用,可以精确到几毫秒间隔记录速度指令与实际位置偏差,帮助判断加减速时间常数是否合适。

强制输入输出(Force)。调试IO时可以直接强制某个物理输入点闭合、某个输出点点亮。但要注意:强制状态在程序切换运行/停止时可能自动清除,不要依赖强制信号长时间保持。

5.3 报警代码的快速定位方法

现场调试中不可能不出现报警。Sysmac Studio的报警处理逻辑很清晰,但初学者往往不知道怎么快速定位。

当控制器出现报警时,在线模式左侧的事件日志页签会显示报警内容和代码。双击某条报警,会自动跳转到相关轴或相关指令的位置。这个功能比逐个翻程序效率高得多。例如看到坐标超限报警,双击后就能直接看到是哪个轴、哪个位置触发。再结合轴参数页面里的当前值查看,问题基本能定位。

分享一个排查报警的思路:先看报警代码的大类(运动控制类、IO类、系统类),再双击定位到具体位置,最后对照手册了解详细原因。不要一上来就瞎猜,Sysmac的报警体系非常规范,按代码索引排查最快。

6. 避坑经验汇总:这些坑我替你们踩过了

6.1 轴使能后自动掉电的排查清单

这是现场出现频率最高的怪问题——程序里明明调用了MC_Power,轴使能后稍纵即逝,又回到未使能状态。先不要怀疑硬件,按照以下顺序排查:

  • 确认MC_Power输出被正确引用,并且没有被其他程序块复位;
  • 查轴报警,是否因为正负极信号逻辑不对导致驱动禁止;
  • 查程序周期,确认MC_Power写在主周期任务还是定时任务里,不在主周期会有执行时序问题;
  • 查“原点未返回”相关报警,部分运动模式设定了原点未返回时禁止使能。

6.2 ST编程中“赋值多个轴”的陷阱

Sysmac Studio允许在同一个程序块中处理多个轴,但有一个陷阱:如果在同一个扫描周期内先后对两个MC_MoveAbsolute指令赋值,部分指令的输出会在内部数据交换时互相覆盖。解决方法是把轴指令分散到独立的IF分支中,避免在一个分支中直接连续操作多个轴。

6.3 IO映射后程序不刷新的问题

有时候改完IO映射,保存、编译、下载都做了,但程序里引用的变量值还是旧的。这个大概率是编译没全部完成,或者控制器没有切换到运行模式。Sysmac Studio里,修改映射后经常需要手动“构建”一次完整工程再下载,不能只点“传输到控制器”。

7. 实践总结:从入门到能干活,关键在流程

我带的很多新人从零上手Sysmac Studio,最快的大概一周就能写简单程序,但真正能独立应付现场调试,基本都要一个月以上。差异不在软件操作熟练度,而在于对“配置→编程→调试”完整流程的理解。

Sysmac Studio和传统PLC软件相比,最大不同就是把“配置工程的能力”提到了前面。硬件组态、IO映射、轴参数、任务分配,每一步都会影响后面的程序逻辑。很多人在这一步草草了事,最后总在调试阶段反复返工,说到底就是配置阶段的坑带到了调试阶段。

如果你想认真掌握这个工具,我的建议是把这套流程固定下来:

从设备树开始,一个一个添加实际设备,确认型号、节点、映射;然后配置轴,把每一个伺服轴的参数按机械实际数据填好;接着写程序,按照任务分工拆开逻辑;最后先在模拟模式验证逻辑,再上真实设备调试。

就我个人经验而言,凡是严格执行这条流程的项目,调试阶段都相对顺利;凡是跳过配置直接开写程序的,后期基本都要返工一到两轮。Sysmac Studio本身的稳定性没得说,但我们用工具的习惯,往往比工具本身更能决定项目的结果。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进