3. PLC与NC的接口机制
在 TwinCAT 中,PLC 与 NC 的协同并不是“PLC 直接去驱动电机”,而是 PLC 通过一套标准化的接口,把运动意图交给 NC,由 NC 完成插补、位置闭环和轴状态管理。理解这套接口机制,核心要抓住三个层次:轴接口(Axis Interface)是数据通道,PLCopen MC 功能块是命令语言,NC 轴与 PLC 轴是两种不同的控制对象。三者关系可以用一句话概括:PLC 用 MC 功能块操作轴接口,轴接口背后连接的是 NC 轴或 PLC 轴。
一、轴接口:PLC 与 NC 之间的数据通道
轴接口是 PLC 运行时系统中为每个运动轴建立的一组过程映像数据。它把 NC 轴的关键状态和命令参数映射到 PLC 可访问的变量上,使 PLC 无需了解 NC 内部的位置环、速度环细节,就能完成使能、点动、定位、读状态等操作。
在 TwinCAT 3 中,轴接口通常以 AXIS_REF 类型的结构体出现。每个轴对应一个 AXIS_REF 变量,例如 Axis1 : AXIS_REF;。这个变量内部包含状态字、控制字、设定位置、实际位置、设定速度、实际速度、误差、使能状态、回零状态等字段。PLC 程序通过把 Axis1 传给 MC 功能块的 Axis 输入,就建立了“命令—轴”的绑定关系。
轴接口的数据流是双向的:PLC 写入控制字和设定值,NC 回读状态字和实际值。典型的状态位包括 Ready、Enabled、Homed、InPosition、Error;控制位包括 Enable、Reset、Stop。理解这些位,是判断轴当前处于什么状态、下一步能不能发命令的依据。
二、PLCopen MC 功能块:标准化的运动命令
PLCopen Motion Control 定义了一套与厂商无关的功能块接口。TwinCAT 的 Tc2_MC2 库实现了这些功能块,常用的有:
MC_Power:使能/禁用轴,是所有运动命令的前置条件;MC_Home:回零,建立轴坐标系的参考点;MC_MoveAbsolute:绝对定位,目标位置以轴坐标系为参照;MC_MoveRelative:相对定位,以当前位置为起点移动指定距离;MC_MoveVelocity:速度控制,用于连续运行或点动;MC_Stop:受控停止,带减速度参数;MC_Reset:复位轴错误。
这些功能块采用统一的执行模型:Execute 上升沿触发一次命令,Done 表示命令完成,Busy 表示正在执行,Error 和 ErrorID 给出故障信息。一个轴在同一时刻只能被一个运动命令占用,因此实际编程中常用状态机或命令仲裁逻辑来管理多个功能块的调用顺序。
Execute 是上升沿有效,不是电平有效。如果一直保持为 TRUE,功能块不会重复触发;需要重新触发时必须先复位再置位。三、NC 轴与 PLC 轴的区别
这是本节最容易混淆、也最影响选型的部分。两者都叫“轴”,但控制方式和适用场景完全不同。
NC 轴由 NC 任务负责位置闭环,PLC 只发设定值和命令。它支持插补、电子齿轮、凸轮、多轴同步,位置环周期通常为 1 ms 或更快,适合伺服驱动、需要连续轨迹或高同步精度的场合。NC 轴必须经过配置、使能、回零后才能接受运动命令。
PLC 轴由 PLC 任务自己完成位置计算和输出,通常通过 MC_Power 之外的专用功能块或直接写输出点来控制。它不占用 NC 轴资源,适合简单的步进、变频器、气缸或不需要插补的独立定位。PLC 轴的响应取决于 PLC 任务周期,通常为 1~10 ms,同步性和轨迹精度低于 NC 轴。
| 对比项 | NC 轴 | PLC 轴 |
|---|---|---|
| 位置闭环执行者 | NC 任务 | PLC 任务 |
| 典型周期 | 1 ms 或更快 | 1~10 ms |
| 插补/同步 | 支持 | 不支持或很弱 |
| 适用对象 | 伺服、多轴轨迹 | 步进、变频、简单定位 |
| 配置复杂度 | 较高 | 较低 |
四、选择原则与接口关系图
选择时按以下顺序判断:第一,是否需要多轴插补或电子齿轮/凸轮同步?需要则必须用 NC 轴。第二,是否需要高动态、高精度位置闭环?需要则优先 NC 轴。第三,是否只是单轴点到点定位、对节拍和精度要求不高?可以选 PLC 轴以降低配置复杂度。第四,若轴数量多但彼此独立,可混合使用:关键轴走 NC,辅助轴走 PLC。
下图给出 PLC、轴接口、MC 功能块、NC 轴与 PLC 轴之间的整体关系。PLC 程序通过 MC 功能块访问轴接口,轴接口再分别连接到 NC 轴或 PLC 轴;NC 轴由 NC 任务闭环,PLC 轴由 PLC 任务闭环。
从图中可以看到,轴接口是“分叉点”:同一个 AXIS_REF 变量,背后既可能是 NC 轴,也可能是 PLC 轴。PLC 程序不需要为两者写两套完全不同的逻辑,但必须清楚当前轴的类型,因为 NC 轴需要 NC 配置和回零,PLC 轴则依赖 PLC 任务周期和输出映射。
五、一个可参考的接口使用片段
下面给出一个典型的使能与绝对定位调用片段,用于说明轴接口和 MC 功能块如何配合。参数为示例值,实际应按机械行程和驱动器能力设定。
Axis1 : AXIS_REF;
fbPower : MC_Power;
fbHome : MC_Home;
fbMove : MC_MoveAbsolute;
fbPower(Axis := Axis1, Enable := TRUE, Enable_Positive := TRUE,
Enable_Negative := TRUE, Override := 100, BufferMode := MC_Aborting);
fbHome(Axis := Axis1, Execute := bHomeCmd, Position := 0.0,
BufferMode := MC_Aborting);
fbMove(Axis := Axis1, Execute := bMoveCmd, Position := 250.0,
Velocity := 100.0, Acceleration := 500.0, Deceleration := 500.0,
BufferMode := MC_Aborting);
IF fbMove.Done THEN
bMoveCmd := FALSE; // 复位 Execute,为下一次上升沿准备
END_IF
判断结果时,先看 fbPower.Status 是否为 TRUE,再看 fbHome.Done 是否建立参考点,最后看 fbMove.Done 和 Axis1.InPosition 是否同时为 TRUE。若 fbMove.Error 为 TRUE,则读取 ErrorID,常见原因包括轴未使能、未回零、目标位置超出软限位或 Execute 未正确复位。
AXIS_REF 混用。NC 轴的接口变量由 NC 配置生成,PLC 轴的接口变量由 PLC 库管理;把 NC 轴变量传给 PLC 轴功能块,或反之,通常会在编译或运行时报类型或状态错误。总结来说,轴接口解决“PLC 怎么访问轴”,MC 功能块解决“PLC 怎么发命令”,NC 轴与 PLC 轴解决“命令由谁闭环执行”。三者配合,才构成 TwinCAT 中完整的 PLC-NC 协同接口机制。选型时先问同步与精度,再问配置成本,最后决定用 NC 轴、PLC 轴还是两者混合。