找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

478

积分

0

好友

66

主题
发表于 13 小时前 | 查看: 2| 回复: 0

在汇川PLC的运动控制应用中,实时获取轴的状态数据是进行监控、逻辑触发与系统同步的基础。为此,汇川提供了三条核心的伺服数据读取指令:MC_ReadActualPosition(读取当前位置)、MC_ReadActualTorque(读取当前力矩)和 MC_ReadActualVelocity(读取当前速度)。这些指令的核心用途是纯粹的读取操作与数据采集,不会对轴产生任何运动控制动作

三条指令的共性特性

  • 纯读取功能:仅执行数据读取,不发起或改变轴的运动状态。
  • 实时反馈:读取的是驱动器实时反馈的实际位置、扭矩或内部计算的速度值。
  • 单位转换:返回值已根据轴配置的参数(如电子齿轮比)自动完成单位换算,可直接使用。
  • 连续读取:当 Enable 输入信号为 TRUE 时,指令在每个扫描周期持续读取数据。
  • 无运动影响:指令的执行完全独立,不影响轴的任何正在执行或待执行的运动。

指令格式说明

指令的梯形图格式如下:
MC_Read指令梯形图格式

对应的结构化文本(ST)编程格式为:

MC_ReadActualPosition(Axis:= , Enable:= , Position=> , Valid=> );
MC_ReadActualTorque(Axis:= , Enable:= , Torque=> , Valid=> );
MC_ReadActualVelocity(Axis:= , Enable:= , Velocity=> , Valid=> );

MC_Read指令ST格式

各指令详解与应用要点

1. MC_ReadActualPosition:读取实际位置

此指令用于读取EtherCAT总线轴脉冲轴的实时反馈位置。

  • 工作原理:当 EnableTRUE 时,若对应轴的 PDO (过程数据对象) 中已配置 16#6064 (目标位置) 对象,则 Valid 信号有效,Position 输出轴的当前位置。
  • 常见报错
    • 轴号不存在、轴未初始化或轴类型错误。
    • EtherCAT总线轴的 PDO 映射中未包含 16#6064 对象。

MC_ReadActualPosition指令说明

2. MC_ReadActualTorque:读取实际力矩

此指令专用于读取 EtherCAT总线轴 的实时反馈力矩。

  • 工作原理:当 EnableTRUE 时,若轴的 PDO 中已配置 16#6077 (实际扭矩) 对象,则 Valid 信号有效,Torque 输出轴的实际力矩值。
  • 注意:使用前必须确保 EtherCAT总线 轴的 PDO 配置中包含 16#6077,否则指令将报错。

MC_ReadActualTorque指令说明

3. MC_ReadActualVelocity:读取实际速度

此指令用于读取轴的实时速度,其值由内部根据位置反馈计算得出。

  • 工作原理:当 EnableTRUE 时,若轴的 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;

关键注意事项与优化建议

  1. 务必检查 Valid 标志:这是数据可靠性的生命线。ValidFALSE 可能源于:

    • 编码器故障或断电
    • EtherCAT 总线通信中断
    • 驱动器未准备就绪 (Not Ready)
    • 相应的 PDO 对象未配置
  2. 理解读取周期与实时性

    • 数据在每个 PLC 扫描周期 更新一次。
    • 对于高速运动应用,扫描周期可能引入数据延迟,影响控制实时性。
    • 优化建议:在要求严苛的场景下,可尝试缩短 PLC 扫描周期,或利用更高优先级的 EtherCAT 任务周期来调用读取指令,甚至直接访问系统的相关变量以获得更快的响应。

总结

MC_ReadActualPositionMC_ReadActualTorqueMC_ReadActualVelocity 是汇川 PLC 运动控制系统中至关重要的状态监控指令。它们为以下核心场景提供了数据基础:

  • 工艺控制:实现基于位置的精确触发、多轴同步。
  • 运行监控:在 HMI 上实时显示关键参数。
  • 安全联锁:构建与位置相关的安全保护逻辑。
  • 诊断分析:辅助进行故障排查与系统性能分析。



上一篇:34岁汽车研发工程师职业选择:年薪40W与70W+新势力Offer权衡
下一篇:Enfabrica ACF-S架构解析:如何通过物理层协议收敛重构AI集群网络
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-24 17:18 , Processed in 0.164777 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表