返回
求助德国力士乐变频伺服的大坑: 现场一台 IndraDrive C 驱动器带绝对值伺服电机,走 Sercos III 光纤总线。 正常开机调试,定位精度极高,反复跑都没问题。 诡异故障:只要把控制
发布

求助德国力士乐变频伺服的大坑: 现场一台 IndraDrive C 驱动器带绝对值伺服电机,走 Sercos III 光纤总线。 正常开机调试,定位精度极高,反复跑都没问题。 诡异故障:只要把控制

149阅读 1 回复 2026-07-24 20:48发布
关注Ta

15628094444600普通会员楼主

电话/手机:联系客服

求助德国力士乐变频伺服的大坑:
现场一台 IndraDrive C 驱动器带绝对值伺服电机,走 Sercos III 光纤总线。

正常开机调试,定位精度极高,反复跑都没问题。

诡异故障:只要把控制柜主电源切断(掉电),再重新合闸开机,PLC 读出来的伺服当前位置,就会精准地比掉电前的绝对位置‘少(或多)正好 10mm’(机械丝杠的螺距正好是 10mm)!
每次断电重启,它就丢失正好一个 Pitch(螺距)。
伺服使用的是多圈绝对值编码器,电池电压也正常。
为什么带电池的绝对值编码器,断电重启后不仅不记数,还会以‘螺距’为单位产生整倍数的断层漂移?

以下内容回复后可见

优质评论内容

  • 明扬工控技术客服

    明扬工控技术客服2026-07-24 20:50:24

    亲,这个不像电池或多圈编码器真的“丢了一圈”。
    它每次刚好差 10mm = 丝杠一个螺距 = 电机一圈,这个特征太明显了:

    不是编码器随机漂移,而是驱动器/PLC 在断电重启后,把“同一个单圈绝对位置”展开到了相邻的一圈。

    也就是说,系统没有丢“角度”,而是丢了“这是第几圈”的解释,或者 PLC/NC 侧把位置做了错误的 modulo 展开。

    一、绝对值编码器记住的是“电机轴位置”,不是完整机器坐标

    带电池的多圈编码器能保存电机轴的多圈信息,但机器坐标还要经过:

    编码器原始多圈位置
    × 电子齿轮 / 机械传动比
    × 丝杠螺距
    + 绝对零点偏置
    + PLC/NC 坐标系偏置
    + modulo / travel range 展开逻辑

    Rexroth 文档里,编码器 1 的位置编码器类型 S-0-0277 会定义它是旋转/直线编码器、方向是否反转、是否可进行绝对评估等;其中 bit 6 表示绝对评估是否可能,bit 7 还可以把绝对编码器改成相对评估,bit 8 则是“强制绝对评估”。文档还警告,如果主站基于错误的实际位置值控制,可能造成碰撞或废品。

    所以:

    电池正常,只说明编码器原始多圈数据还在;不代表 PLC 看到的“机器坐标”一定还对。

    二、为什么偏偏差一个 10mm?

    因为丝杠螺距正好 10mm。

    对这根轴来说:

    电机 1 圈
    =
    丝杠前进 1 个 Pitch
    =
    10mm

    如果断电重启后,系统把电机多圈数展开错了 1 圈,PLC 看到的就是:

    当前位置 ± 10mm

    这不是玄学,是非常标准的“一圈展开错误”。

    随机干扰通常不会每次精准 10mm;电池异常也不会这么稳定地以螺距为单位错。

    三、第一嫌疑:PLC/NC 把这根轴设成了 modulo 轴

    重点查 PLC 或运动控制器里的轴类型:

    Modulo axis
    Rotary axis
    Modulo value
    Period
    Cycle length
    Travel range

    如果某个地方把该轴的 modulo period 设成了:

    10mm

    那么系统就认为:

    0mm 和 10mm 是同一个相位
    10mm 和 20mm 是同一个相位

    重启时,主站要把编码器读到的“绝对相位”重新展开成“机器坐标”。如果它选择了相邻的 modulo 周期,就会精准差一个 Pitch。

    Rexroth 资料里也明确提到,绝对评估会受到 absolute encoder range、maximum travel range 或 modulo value 的影响;也就是说,绝对编码器是否能被正确绝对评估,不只看编码器本身,还看最大行程/模数范围配置是否合理。

    四、第二嫌疑:PLC 只用了“单圈位置”,没有用完整多圈绝对位置

    很多项目里会犯这个错误:

    PLC 读到单圈位置 0~一圈

    再用自己的 Retain 变量拼多圈

    断电重启时根据上次位置找最近一圈

    刚好选错相邻一圈

    这样正常上电连续运行时完全没问题,因为 PLC 一直在累计。
    但一断电,重新开机时它要“猜”当前属于哪一圈。只要边界、方向、取整或保留变量稍有问题,就会差一圈。

    正确做法应该是:

    优先读驱动器已经处理好的绝对总位置
    不要在 PLC 里自己二次拼单圈 + 多圈

    Rexroth 的位置体系里,实际位置值如 S-0-0051 是编码器 1 的 actual position value;建立位置数据参考时,实际位置偏置会反映到 S-0-0175 等参数中。Rexroth 文档把这些参数列为位置参考建立的关键量。

    五、第三嫌疑:开机程序每次偷偷执行了一次 SetPosition / Set absolute

    这个特别常见。

    断电重启后,PLC 程序可能有一段初始化逻辑:

    Axis enable

    读取当前绝对位置

    MC_SetPosition / SetActualPosition

    恢复断电前保存的位置

    设 Reference OK

    如果这段逻辑里的断电前位置、当前编码器位置、丝杠换算、方向符号有一个地方差了一圈,就会每次开机固定偏移 10mm。

    Rexroth 的绝对位置设定命令是 C0300 Set absolute position procedure command,对应 S-0-0447;相关诊断也说明,该命令用于设置绝对位置。

    所以要重点查:

    PLC 上电初始化
    Sercos phase-up 之后的参数写入
    MC_SetPosition
    SetActualPosition
    C0300 / S-0-0447
    Reference / Homed bit
    断电位置恢复 Retain 变量

    这类程序平时看起来是在“恢复坐标”,实际可能每次给你多补或少补一个 Pitch。

    六、第四嫌疑:绝对位置参考没有真正保存到驱动/编码器

    Rexroth 的位置参考不是简单“我今天对零了就永远好了”。
    绝对位置和机器零点之间有 offset。相关文档里提到,建立位置数据参考会产生实际位置偏置,如 S-0-0175;如果通过 C0300 设置绝对位置,驱动要把绝对编码器 offset 保存下来。相关诊断 C0303 的说明也提到,执行 C0300 时会确定编码器零点到机器零点的 offset,并保存到编码器数据存储中;如果通信受扰或无法写入,就会保存失败。

    所以现场要查:

    S-0-0175:Encoder 1 actual position offset
    S-0-0403:Actual position value status
    S-0-0447:C0300 set absolute position command
    S-0-0277:Encoder 1 type / absolute evaluation
    S-0-0278:Maximum travel range
    S-0-0378:Absolute encoder range

    如果 offset 没保存、被 PLC 覆盖,或者每次启动重新设一次绝对位置,断电后就可能出现固定 Pitch 偏移。

    七、怎么最快分锅:看驱动器原始位置还是 PLC 位置错

    这个故障一定要分两层看。

    1. 断电前记录

    在 IndraWorks / DriveTop / Sercos 诊断里记录:

    驱动器侧 S-0-0051 实际位置
    编码器原始单圈值
    编码器多圈值
    S-0-0175 offset
    S-0-0403 reference status
    PLC 轴实际位置
    PLC 轴 retain 位置
    2. 重新上电后,先不要让 PLC 写参数

    非常关键:

    只上电
    不要使能
    不要回零
    不要执行 SetPosition
    不要让自动初始化程序写轴位置

    先读驱动器侧位置。

    判断:

    驱动器 S-0-0051 没变,PLC 位置差 10mm:
    问题在 PLC/NC/Sercos master 的坐标展开或初始化。

    驱动器 S-0-0051 本身差 10mm:
    问题在驱动器绝对评估、offset、travel range、modulo 或 C0300 保存。

    驱动器原始多圈值正确,但 S-0-0051 差 10mm:
    问题在驱动器内部缩放/offset/参考建立。

    原始多圈值也差一圈:
    再查编码器、电池、编码器通信和多圈数据。
    八、再做一个边界测试

    把轴移动到两个位置分别断电重启:

    位置 A:接近 0 / 10mm / 20mm 这种 Pitch 边界
    位置 B:离边界很远,比如 5mm、15mm、25mm 中间

    判断:

    只在边界附近偏 10mm:
    典型 modulo 展开 / 四舍五入 / 单圈跨界问题。

    任何位置都固定偏 10mm:
    更像 PLC 初始化多补一圈、offset 固定错一圈,或机械传动比/参考点保存错。
    九、整改方向

    按优先级来:

    1. 不要把直线丝杠轴配置成 10mm modulo 轴。
       除非它真的是循环旋转轴。

    2. PLC 不要自己用单圈值拼多圈。
       使用驱动器提供的绝对总位置。

    3. 上电时不要自动执行 MC_SetPosition / C0300。
       绝对位置设定只应在机械基准确认时执行一次。

    4. 检查 S-0-0277 是否处于绝对评估,而不是相对评估。
       注意 bit 7/bit 8 的配置。

    5. 检查 S-0-0278 最大行程、S-0-0378 绝对编码器范围。
       最大行程和 modulo 配置不能让系统只能识别一圈周期。

    6. 检查 S-0-0175 offset 是否断电保持一致。
       断电前后比对,不应自己变一个 Pitch。

    7. 检查 PLC 轴方向、丝杠螺距、电子齿轮、单位换算。
       特别是 1rev = 10mm 的 feed constant。

    8. 用 IndraWorks 直接读驱动器位置,与 PLC 显示对比。
       先分清是驱动器错,还是 PLC 坐标错。
    我会优先判断的真实原因
    第一:
    PLC/NC 把丝杠轴当 modulo 轴处理,modulo 周期刚好等于 10mm。

    第二:
    PLC 只读取单圈/模数位置,然后用 Retain 变量二次展开,多圈展开错一圈。

    第三:
    上电初始化程序执行了 SetPosition / C0300 / 恢复断电位置,固定多补或少补一个 Pitch。

    第四:
    绝对位置 offset 没有正确保存,或每次上电被主站重新写入。

    第五:
    S-0-0277、S-0-0278、S-0-0378 配置导致驱动器没有按完整绝对行程评估,而是在一圈周期附近重新解释位置。

    一句话:

    绝对值编码器没有丢电池记忆;10mm 这个特征说明系统丢的是“电机第几圈”的坐标展开。先别拆电机,先用 IndraWorks 对比断电前后的原始多圈值、S-0-0051、S-0-0175 和 PLC 轴位置。如果驱动器位置正确、PLC 差 10mm,就是主站 modulo/SetPosition/Retain 展开问题;如果驱动器自己差 10mm,再查绝对评估和 C0300 offset 保存。