4. 单轴运动控制指令
在多轴同步与电子凸轮系统中,所有复杂的耦合运动最终都建立在单轴运动控制的基础之上。PLCopen 运动控制规范定义了一套与硬件无关的功能块接口,Bosch Rexroth 的 IndraMotion / ctrlX 平台均遵循这一规范。理解每个功能块的输入输出语义、执行时序和状态迁移,是正确编写轴控制程序的前提。本节围绕绝对定位、相对定位、速度运行、扭矩控制、点动与停止六类基本操作,说明其功能块用法与工程要点。
一、PLCopen 单轴功能块的基本约定
PLCopen 将运动控制功能块分为管理类(如 MC_Power)、运动类(MC_MoveAbsolute、MC_MoveRelative、MC_MoveVelocity、MC_MoveJog)、力矩类(MC_TorqueControl)和停止类(MC_Stop、MC_Halt)。所有运动功能块共享一组通用输入:Axis 为轴引用,Execute 为上升沿触发,Position、Velocity、Acceleration、Deceleration、Jerk 为运动参数,BufferMode 决定与前一指令的衔接方式。输出侧统一提供 Done、Busy、Active、CommandAborted、Error 与 ErrorID。
需要特别注意的是:Execute 是上升沿有效,保持为 TRUE 不会重复触发;若要再次执行同一指令,必须先将其复位为 FALSE。此外,Done 仅在定位类指令到达目标位置后置位一个周期,而 Active 在运动过程中持续为 TRUE,二者语义不同,不可混用。
二、绝对定位与相对定位
绝对定位使用 MC_MoveAbsolute,其 Position 参数是相对于轴坐标系原点的绝对坐标值。例如轴已回零,当前位置为 120 mm,执行 Position := 300.0,轴将运动到 300 mm 处。绝对定位要求轴已完成回零(Homing),否则坐标系无意义。
相对定位使用 MC_MoveRelative,其 Distance 参数是相对于指令触发时刻当前位置的增量。正号表示沿正方向运动,负号表示沿负方向运动。例如当前位置 300 mm,Distance := -50.0,轴将运动到 250 mm。相对定位不依赖回零状态,但每次执行的结果取决于触发瞬间的实际位置,因此不适合需要精确重复定位的场合。
两者在 BufferMode 上的选择也影响行为:mcAborting 会立即中止当前运动并接管,mcBuffered 则等待当前运动完成后再执行,mcBlendingLow/High/Previous/Next 用于速度过渡。在多轴同步场景中,通常使用 mcAborting 以保证指令的即时性。
三、速度运行与扭矩控制
速度运行使用 MC_MoveVelocity,轴以指定 Velocity 持续运行,直到被其他指令中止或调用停止功能块。该指令的 InVelocity 输出在轴达到设定速度后置位,可用于判断加速阶段结束。速度运行常用于传送带、卷绕等需要连续运转的轴。
扭矩控制使用 MC_TorqueControl,直接给定 Torque 值(单位通常为额定扭矩的百分比或 N·m,取决于驱动器配置)。该模式常用于张力控制、压装、拧紧等需要限制力矩的工艺。使用扭矩控制前,轴必须处于使能状态,且通常需要先切换到扭矩模式。扭矩控制与位置控制不能同时激活,切换时需通过 BufferMode 或先停止当前运动。
四、点动与停止
点动使用 MC_MoveJog,其 JogForward 与 JogBackward 为电平有效输入。当 JogForward 为 TRUE 时轴以 Velocity 正转,变为 FALSE 时按 Deceleration 减速停止。两个输入同时为 TRUE 时,轴按 JogBackward 方向运行(具体行为依实现而定,建议程序中互锁)。点动是调试和手动对位最常用的功能。
停止分为两类:MC_Halt 为受控停止,轴按 Deceleration 减速到零,停止后轴仍保持使能,可继续接受新指令;MC_Stop 为强制停止,执行后轴进入 Stopping 状态,必须复位 Execute 并重新使能才能恢复运动。急停回路应使用 MC_Stop 或硬件安全转矩关断(STO),而非 MC_Halt。
五、典型调用示例与参数说明
以下示例展示一个轴从使能到绝对定位的完整调用序列,参数为教学示例值,实际工程中需根据机械负载和驱动器能力调整。
// 1. 轴使能
MC_Power(
Axis := Axis1,
Enable := TRUE,
EnablePositive := TRUE,
EnableNegative := TRUE
);
// 2. 绝对定位到 300 mm
MC_MoveAbsolute(
Axis := Axis1,
Execute := bStartMove, // 上升沿触发
Position := 300.0, // 绝对坐标 mm
Velocity := 200.0, // mm/s
Acceleration := 1000.0, // mm/s²
Deceleration := 1000.0, // mm/s²
Jerk := 10000.0, // mm/s³
BufferMode := mcAborting
);
// 3. 点动
MC_MoveJog(
Axis := Axis1,
JogForward := bJogFwd,
JogBackward := bJogBwd,
Velocity := 50.0,
Acceleration := 500.0,
Deceleration := 500.0
);
// 4. 受控停止
MC_Halt(
Axis := Axis1,
Execute := bHalt,
Deceleration := 2000.0,
Jerk := 20000.0
);
调用时需注意:MC_Power 的 Enable 必须保持为 TRUE,轴才处于使能状态;MC_MoveAbsolute 的 Execute 若一直为 TRUE,则只触发一次,需复位后再置位才能再次执行。若在运动过程中触发新的 MC_MoveAbsolute 且 BufferMode 为 mcAborting,原指令的 CommandAborted 会置位,新指令立即接管。
六、常见问题与排查要点
实际调试中,最常见的故障是轴未使能就调用运动指令,此时功能块会返回 Error 且 ErrorID 通常指向 AxisNotEnabled。其次是绝对定位前未回零,导致轴按错误的坐标系运动。第三是 Execute 未复位,导致第二次触发无效。第四是速度或加速度设置超过驱动器限制,触发跟随误差超限。排查时应先确认 MC_Power 的 Status 为 TRUE,再检查回零状态,最后核对运动参数是否在轴配置范围内。