4. PLCopen运动控制规范入门

在TwinCAT中编写多轴运动程序时,真正与伺服驱动器、编码器、限位开关打交道的并不是我们手写的底层代码,而是PLCopen运动控制规范定义的一组标准功能块。TwinCAT 3的Tc2_MC2库完整实现了这套规范,把“使能、回零、定位、相对移动、速度运行”这些常见动作封装成统一接口。理解这五个功能块,就相当于掌握了单轴运动控制的主干。

一、PLCopen功能块的通用调用约定

PLCopen功能块遵循“输入触发、输出反馈”的调用模型。每个功能块都有Execute(或Enable)输入,以及Done、Busy、Active、CommandAborted、Error、ErrorID等输出。关键规则是:上升沿触发型功能块(如MC_Home、MC_MoveAbsolute、MC_MoveRelative)在Execute出现上升沿时启动一次动作,动作完成后Done置位;电平使能型功能块(如MC_Power、MC_MoveVelocity)在Enable为TRUE期间持续生效,为FALSE时停止。

所有功能块都必须绑定一个AXIS_REF类型的轴变量。这个变量在TwinCAT中通过“NC轴”或“PLC轴”映射建立,是功能块与物理轴之间的唯一纽带。调用时还要注意:同一时刻一个轴只能被一个运动功能块“占用”,若前一个动作未完成就触发新动作,通常会返回Error或CommandAborted。

PLCopen单轴运动控制功能块调用关系 AXIS_REF 轴变量(映射NC轴) MC_Power Enable / Status / Error MC_Home Execute / Done / Error MC_MoveAbsolute Position / Velocity / Done MC_MoveRelative Distance / Velocity / Done MC_MoveVelocity Velocity / InVelocity 典型调用顺序 ① MC_Power → 使能轴 ② MC_Home → 建立零点 ③ MC_MoveAbsolute → 绝对定位 ④ MC_MoveRelative → 相对移动 ⑤ MC_MoveVelocity → 连续速度 注:同一轴同一时刻只能执行一个运动功能块

二、MC_Power:一切运动的前提

MC_Power是轴的“总开关”,负责使能伺服、释放抱闸、让轴进入可运动状态。它的输入包括Axis、Enable、Enable_Positive、Enable_Negative,输出为Status、Busy、Error、ErrorID。当Enable为TRUE且驱动器无故障时,Status变为TRUE,此时轴才允许接收后续运动指令。

实际工程中,MC_Power通常放在程序循环的最前面,用Enable常TRUE调用。如果Status长时间为FALSE,应检查驱动器是否报错、DC母线是否正常、抱闸是否释放。注意:Enable_Positive和Enable_Negative用于限制运动方向,默认都设为TRUE即可。

三、MC_Home:建立坐标系的基准

绝对定位的前提是轴知道自己“在哪里”,而MC_Home就是让轴找到机械零点并建立坐标原点。TwinCAT支持多种回零模式,通过HomingMode参数选择:直接设置当前位置、寻找限位开关、寻找编码器零脉冲等。常用输入为Execute、Position(回零后设定的坐标值)、HomingMode,输出为Done、Busy、Error。

以“寻找限位开关+零脉冲”模式为例:轴先以HomingVelocity(如200 mm/s)向负方向运动,碰到负限位后反向,以HomingVelocitySlow(如20 mm/s)寻找编码器零脉冲,找到后把该点设为Position指定的坐标值(通常为0)。回零完成后Done置位,此时轴的位置坐标才具有物理意义。

四、MC_MoveAbsolute与MC_MoveRelative:定位的两把钥匙

MC_MoveAbsolute执行绝对定位,输入Position是目标坐标(相对于已建立的零点),Velocity、Acceleration、Deceleration、Jerk决定运动曲线。例如回零后轴在0 mm处,调用Position:=150.0, Velocity:=300.0,轴会以300 mm/s运动到150 mm处,Done置位表示到位。

MC_MoveRelative执行相对定位,输入Distance是相对于当前位置的增量。例如当前位置150 mm,Distance:=50.0,轴运动到200 mm。相对定位不依赖零点是否建立,但多次相对移动会累积误差,因此高精度场合仍建议先回零再用绝对定位。

两者都支持BufferMode参数,用于处理“上一个动作未完成时新动作如何衔接”。BufferMode:=0(Aborting)会立即中止当前动作并执行新动作;BufferMode:=1(Buffered)则等当前动作完成后再执行。这个参数在多段连续轨迹中非常关键。

五、MC_MoveVelocity:连续速度运行

MC_MoveVelocity让轴以指定速度持续运行,直到收到停止指令或触发限位。输入Velocity为速度值,Direction指定方向,Acceleration、Deceleration控制加减速。输出InVelocity在轴达到设定速度后置位,Busy在运行期间保持TRUE。

该功能块常用于点动(Jog)、传送带连续运行、卷绕等场景。要停止时,可调用MC_Halt或把Execute复位。注意:MC_MoveVelocity是电平使能型,Execute保持TRUE期间轴持续运行;若Execute变为FALSE,轴会按Deceleration减速停止。

六、调用顺序与状态判断

一个完整的单轴运动程序通常按“MC_Power → MC_Home → MC_MoveAbsolute/MC_MoveRelative → MC_MoveVelocity”的顺序组织。每个功能块调用后,必须通过Done、Busy、Error三个信号判断执行结果:Done为TRUE表示动作成功完成;Busy为TRUE表示正在执行;Error为TRUE时需读取ErrorID定位故障,常见错误包括轴未使能、目标超出软限位、速度参数为负等。

实践提示:在TwinCAT中调试时,可先用“NC轴在线”窗口手动使能和回零,确认硬件正常后,再在PLC中调用功能块。功能块的Execute建议用上升沿触发,避免每个扫描周期重复启动。
注意:MC_Home、MC_MoveAbsolute、MC_MoveRelative均为上升沿触发,若Execute一直保持TRUE,功能块只执行一次;要再次执行必须先将Execute复位为FALSE,再重新置TRUE。

掌握这五个功能块后,单轴的点位控制、回零、连续运行都可以用标准接口实现。下一阶段的多轴插补、电子齿轮、凸轮同步,也都是在这些基础功能块之上扩展而来。