lee.2m 2026-03-16 03:40 采纳率: 98.5%
浏览 1
已采纳

MC_ReadActualPosition读不到值:轴未使能或反馈信号异常

在使用MC_ReadActualPosition指令读取伺服轴实际位置时,常出现返回值恒为0或无效(如INT_MIN、NaN)的现象。典型原因包括:① 轴未完成使能流程——未执行MC_Power或使能信号未到位,导致驱动器处于禁用状态,无法反馈位置;② 反馈信号异常——编码器接线松动、A/B/Z相接反、差分信号终端电阻缺失,或光栅尺/旋变信号受电磁干扰;③ 控制周期内未完成一次完整的位置采样(如高速运动下采样延迟或同步模式配置错误)。此外,若轴处于“Fault”或“Not Ready”状态,即使MC_Power已触发,底层仍会屏蔽位置读取。建议按顺序排查:确认MC_Power输出Q参数为TRUE且无故障报警→检查诊断缓冲区中AxisStatus字的EnableBit与FeedbackOK位→用示波器观测编码器信号质量。该问题在调试初期高频发生,占位置反馈类故障的65%以上。
  • 写回答

1条回答 默认 最新

  • 冯宣 2026-03-16 03:40
    关注
    ```html

    一、现象层:MC_ReadActualPosition 返回异常值的典型表征

    • 返回固定值 0(非零运动下持续为0)
    • 返回极值 INT_MIN (-32768 或 -2147483648),常见于有符号整型溢出或未初始化状态寄存器
    • 返回 NaN(Not a Number),多见于浮点型位置接口或驱动器内部FPU异常
    • 数值跳变无规律,与机械运动完全脱节(如轴静止时读数每周期±5000脉冲)
    • 仅在高速段失效(>3000 rpm 或 >2 m/s),低速正常——指向采样同步问题

    二、状态层:伺服轴生命周期关键状态机校验

    MC_ReadActualPosition 的有效性严格依赖轴的状态合法性。以下为标准状态流转约束:

    graph TD A[PowerOff] -->|MC_Power EN=TRUE| B[Starting] B --> C{AxisStatus.EnableBit = 1?} C -->|否| D[Not Ready / Fault] C -->|是| E[Enabled] E --> F{AxisStatus.FeedbackOK = 1?} F -->|否| G[Feedback Lost] F -->|是| H[Operational: 可安全读取位置]

    三、信号层:反馈链路物理层故障模式对照表

    故障类型典型现象快速验证方法根因概率
    A/B相接反位置单调递增/递减但方向相反手动旋转电机,观察MC_ReadActualPosition符号变化22%
    Z相未接入或损坏单圈绝对位置丢失,多圈计数错乱执行MC_Home后重启,比对零点偏移量15%
    差分终端电阻缺失(RS422)高速段出现随机跳码,示波器显示信号边沿畸变用万用表测A-与B-间直流阻值(应≈120Ω)18%
    共模干扰(VFD邻近布线)位置抖动呈工频(50/60Hz)周期性波动临时断开变频器电源,观察抖动是否消失20%

    四、时间层:运动控制周期与反馈采样的时序耦合分析

    在使用等时同步(IRT)或PTP模式时,MC_ReadActualPosition 实际读取的是上一个周期缓存的位置值。若配置错误,将导致:

    • 采样窗口错位:驱动器在PLC读取瞬间尚未完成ADC转换或正交解码
    • 双缓冲未启用:当轴高速运行时,单缓冲区被覆盖前未及时拷贝,返回陈旧数据
    • 任务周期 > 驱动器更新周期(如PLC任务10ms,驱动器仅支持2ms位置更新),造成“漏采”

    推荐配置:启用 MC_ReadActualPositionbSynchronousRead := TRUE 参数,并确保调用周期 ≤ 驱动器最小位置更新周期的80%。

    五、诊断层:嵌入式诊断缓冲区深度解析路径

    1. 调用 MC_GetAxisErrorInfo(Axis := Axis1, ErrorInfo => stErr) 获取结构体
    2. 解析 stErr.AxisStatus 字(16位):
        ● Bit 0 (EnableBit) = 0 → 轴未使能(检查MC_Power.Q)
        ● Bit 4 (FeedbackOK) = 0 → 编码器信号链异常
        ● Bit 12 (FaultActive) = 1 → 查看 stErr.ErrorID 对应驱动器手册
    3. stErr.ErrorID = 16#8003(EtherCAT sync error),需检查分布式时钟配置
    4. 导出诊断缓冲区原始字节流,用Wireshark + SOEM插件分析PDO映射完整性

    六、工程层:跨平台调试黄金 checklist

    // STEP 7 / TIA Portal 示例逻辑片段(结构化文本)
    IF NOT MC_Power(Axis := Axis1, Enable := TRUE).Q THEN
      // Step 1: 确认使能已生效
      ERROR_CODE := 1;
    ELSIF Axis1.Status.FeedbackOK = FALSE THEN
      // Step 2: 检查反馈就绪位
      ERROR_CODE := 2;
      // 触发示波器自动捕获脚本(通过OPC UA调用)
      TriggerOscilloscope('Encoder_A_B_Z');
    ELSIF ABS(MC_ReadActualPosition(Axis := Axis1) - LastPos) > Threshold AND Axis1.Status.InMotion = FALSE THEN
      // Step 3: 静态漂移检测(排除电磁干扰)
      ERROR_CODE := 3;
    END_IF;
    
    ```
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 3月17日
  • 创建了问题 3月16日