在汇川PLC的运动控制应用中,实时获取轴的状态数据是进行监控、逻辑触发与系统同步的基础。为此,汇川提供了三条核心的伺服数据读取指令:MC_ReadActualPosition(读取当前位置)、MC_ReadActualTorque(读取当前力矩)和 MC_ReadActualVelocity(读取当前速度)。这些指令的核心用途是纯粹的读取操作与数据采集,不会对轴产生任何运动控制动作。
三条指令的共性特性
- 纯读取功能:仅执行数据读取,不发起或改变轴的运动状态。
- 实时反馈:读取的是驱动器实时反馈的实际位置、扭矩或内部计算的速度值。
- 单位转换:返回值已根据轴配置的参数(如电子齿轮比)自动完成单位换算,可直接使用。
- 连续读取:当
Enable 输入信号为 TRUE 时,指令在每个扫描周期持续读取数据。
- 无运动影响:指令的执行完全独立,不影响轴的任何正在执行或待执行的运动。
指令格式说明
指令的梯形图格式如下:

对应的结构化文本(ST)编程格式为:
MC_ReadActualPosition(Axis:= , Enable:= , Position=> , Valid=> );
MC_ReadActualTorque(Axis:= , Enable:= , Torque=> , Valid=> );
MC_ReadActualVelocity(Axis:= , Enable:= , Velocity=> , Valid=> );

各指令详解与应用要点
1. MC_ReadActualPosition:读取实际位置
此指令用于读取EtherCAT总线轴或脉冲轴的实时反馈位置。
- 工作原理:当
Enable 为 TRUE 时,若对应轴的 PDO (过程数据对象) 中已配置 16#6064 (目标位置) 对象,则 Valid 信号有效,Position 输出轴的当前位置。
- 常见报错:
- 轴号不存在、轴未初始化或轴类型错误。
- EtherCAT总线轴的 PDO 映射中未包含
16#6064 对象。

2. MC_ReadActualTorque:读取实际力矩
此指令专用于读取 EtherCAT总线轴 的实时反馈力矩。
- 工作原理:当
Enable 为 TRUE 时,若轴的 PDO 中已配置 16#6077 (实际扭矩) 对象,则 Valid 信号有效,Torque 输出轴的实际力矩值。
- 注意:使用前必须确保 EtherCAT总线 轴的 PDO 配置中包含
16#6077,否则指令将报错。

3. MC_ReadActualVelocity:读取实际速度
此指令用于读取轴的实时速度,其值由内部根据位置反馈计算得出。
- 工作原理:当
Enable 为 TRUE 时,若轴的 PDO 中已配置 16#6064 (目标位置) 对象,则 Valid 信号有效,Velocity 输出当前计算出的反馈速度。
- 注意:对于总线轴,速度的准确读取同样依赖于
16#6064 的 PDO 配置。
典型应用案例与进阶用法
基础应用:HMI人机界面实时显示
最直接的应用是将数据实时显示在触摸屏上,这通常涉及前端框架或组态软件的配合。
VAR
rHMI_Position: REAL; // HMI显示变量
rActualPos: REAL;
bDataValid: BOOL;
END_VAR
// 读取位置并发送到HMI
MC_ReadActualPosition(
Axis:= Axis1,
Enable:= TRUE,
Position=> rActualPos,
Valid=> bDataValid
);
// 仅当数据有效时更新HMI显示
IF bDataValid THEN
rHMI_Position := rActualPos;
// 可选:格式化显示(如保留3位小数)
rHMI_Position := REAL_TRUNC(rActualPos * 1000) / 1000;
ELSE
// 数据无效时显示特殊值
rHMI_Position := -9999.999;
END_IF;
进阶应用一:基于位置的精确触发
虽然读取指令本身不控制运动,但其数据可用于实现高精度的工艺触发。
VAR
rTriggerPosition: REAL := 500.0; // 触发位置
rHysteresis: REAL := 0.5; // 滞环,防止信号抖动
bTriggerActive: BOOL := FALSE; // 触发状态
rPreviousPos: REAL;
END_VAR
// 读取实际位置
MC_ReadActualPosition(Axis:= Axis1, Enable:= TRUE, Position=> rActualPos, Valid=> bDataValid);
// 位置触发逻辑(带滞环,抗干扰)
IF bDataValid THEN
// 正向越过触发位置
IF (rActualPos >= rTriggerPosition) AND
(rPreviousPos < rTriggerPosition) AND
(NOT bTriggerActive) THEN
bTriggerActive := TRUE;
// 执行触发动作(如拍照、检测、输出)
bTakePhoto := TRUE;
END_IF;
// 反向离开触发位置(带滞环)
IF bTriggerActive AND
(rActualPos <= (rTriggerPosition - rHysteresis)) THEN
bTriggerActive := FALSE;
END_IF;
rPreviousPos := rActualPos; // 保存上一周期位置
END_IF;
进阶应用二:多轴位置同步检查
在需要多轴协同的设备中,实时检查轴间同步精度至关重要,这依赖于稳定可靠的网络系统通讯。
VAR
Axis1, Axis2 : AXIS_REF;
rPos1, rPos2 : REAL;
rSyncError : REAL;
rMaxSyncError : REAL := 1.0; // 最大允许同步误差
bSyncOK, bValid1, bValid2 : BOOL;
END_VAR
// 同时读取两个轴的实际位置
MC_ReadActualPosition(Axis := Axis1, Enable := TRUE, Position => rPos1, Valid => bValid1);
MC_ReadActualPosition(Axis := Axis2, Enable := TRUE, Position => rPos2, Valid => bValid2);
// 同步误差检查
IF bValid1 AND bValid2 THEN
rSyncError := ABS(rPos1 - rPos2);
bSyncOK := (rSyncError <= rMaxSyncError);
IF NOT bSyncOK THEN
// 同步超差报警
bSyncAlarm := TRUE;
rActualSyncError := rSyncError;
END_IF;
END_IF;
关键注意事项与优化建议
-
务必检查 Valid 标志:这是数据可靠性的生命线。Valid 为 FALSE 可能源于:
- 编码器故障或断电
- EtherCAT 总线通信中断
- 驱动器未准备就绪 (Not Ready)
- 相应的 PDO 对象未配置
-
理解读取周期与实时性:
- 数据在每个 PLC 扫描周期 更新一次。
- 对于高速运动应用,扫描周期可能引入数据延迟,影响控制实时性。
- 优化建议:在要求严苛的场景下,可尝试缩短 PLC 扫描周期,或利用更高优先级的 EtherCAT 任务周期来调用读取指令,甚至直接访问系统的相关变量以获得更快的响应。
总结
MC_ReadActualPosition、MC_ReadActualTorque 和 MC_ReadActualVelocity 是汇川 PLC 运动控制系统中至关重要的状态监控指令。它们为以下核心场景提供了数据基础:
- 工艺控制:实现基于位置的精确触发、多轴同步。
- 运行监控:在 HMI 上实时显示关键参数。
- 安全联锁:构建与位置相关的安全保护逻辑。
- 诊断分析:辅助进行故障排查与系统性能分析。