ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

CiA 402 伺服使能失败怎么办?从 Controlword、Statusword 到驱动器状态机逐步排查

CiA 402 伺服使能失败怎么办?从 Controlword、Statusword 到驱动器状态机逐步排查

在机器人控制器的开发与调试过程中,经常会遇到这样一种情况:IgH EtherCAT Master 已经成功启动,从站能够被识别,通信状态也正常,EtherCAT 从站甚至已经进入 OP 状态,但伺服驱动器始终无法使能,电机没有响应目标位置,或者驱动器一直停留在某个状态。

对于刚开始接触 EtherCAT 运动控制的工程师来说,这种现象容易让人误以为是主站通信异常,随后反复检查网卡、网线、周期线程和 PDO 配置。然而,真正的问题可能出现在另一个层面——EtherCAT 通信状态正常,不代表伺服驱动器的运动控制状态已经满足运行条件。

在采用 CiA 402 驱动器状态机的设备中,伺服使能需要经过规定的状态转换流程。控制器需要读取状态字,判断当前驱动器状态,再根据设备要求发送相应的控制字。驱动器是否能够进入 Operation Enabled,还可能受到故障状态、安全回路、驱动器参数、运行模式和其他设备条件影响。

当机器人控制系统采用 ROS 2、IgH EtherCAT Master 与实时 Linux 协同运行时,这个问题还会涉及软件模块之间的职责划分:ROS 2 可以负责任务管理和状态展示,底层控制模块负责状态机逻辑,EtherCAT 周期线程负责过程数据交换,而操作系统则需要为关键线程提供符合要求的执行环境。

本文将从 EtherCAT 与 CiA 402 两套状态机的区别讲起,逐步分析伺服使能流程、PDO 配置、常见故障以及实时控制架构中的诊断方法。

一、EtherCAT 已经进入 OP,为什么伺服仍然无法使能?

首先要理解,EtherCAT 状态机与 CiA 402 驱动器状态机是两个不同层次的机制。

EtherCAT 从站状态机主要描述从站在网络通信中的运行阶段,常见状态包括 INIT、PREOP、SAFEOP 和 OP。

INIT 是初始化阶段,此时从站尚未进入常规过程数据交换所需的完整配置状态。PREOP 通常用于邮箱通信及相关配置操作,具体能力取决于设备实现。SAFEOP 阶段通常意味着从站可以更新输入过程数据,但输出过程数据的有效使用仍受到状态机规则和设备实现约束。进入 OP 后,从站通常具备正常过程数据交换条件,能够按照配置参与周期通信。

这些状态描述的是 EtherCAT 通信层面的运行情况,而不是伺服电机是否已经获得运行许可。

CiA 402 则定义了驱动器的设备状态机。常见状态包括:

  • Switch On Disabled:驱动器处于禁止使能状态。

  • Ready to Switch On:驱动器已经满足进入下一状态的条件。

  • Switched On:驱动器已经进入接通状态,但还没有进入正常运行使能状态。

  • Operation Enabled:驱动器允许执行相应的运行控制。

  • Quick Stop Active:驱动器处于快速停止相关状态,具体行为与配置有关。

  • Fault Reaction Active:驱动器正在执行故障反应。

  • Fault:驱动器处于故障状态,需要按照设备要求处理。

实际设备还可能包含 Not Ready to Switch On 等状态。工程师需要根据驱动器手册理解完整状态机,而不能只依赖一个简化状态列表。

因此,即使 EtherCAT 从站已经进入 OP,CiA 402 驱动器也可能仍处于 Switch On Disabled 或 Fault 状态。主站能够向从站发送 PDO,并不代表驱动器已经允许电机产生目标运动。

举一个典型场景:机器人控制器成功完成从站配置,主站周期线程也能够正常收发数据,但驱动器的状态字一直表示 Switch On Disabled。这时,即使程序不断向目标位置 PDO 写入新的数值,驱动器也可能不会执行运动。

此时应优先检查驱动器状态机、控制字、故障状态及设备使能条件,而不是直接认定 EtherCAT 通信存在问题。

反过来,如果 EtherCAT 状态机本身无法正常进入 OP,PDO 数据也可能无法按预期交换,控制器自然难以可靠地执行伺服控制。也就是说,两套状态机都需要满足各自的要求,但它们不能互相替代。

在使用 IgH EtherCAT Master 的项目中,建议将诊断结果分开记录:一类是主站和从站的通信状态,包括从站状态、Domain 数据与 WKC;另一类是驱动器的 CiA 402 状态字、故障信息和运行模式。这样才能避免把通信问题与驱动器使能问题混为一谈。

二、CiA 402 的 Controlword 和 Statusword 到底如何配合?

Controlword 和 Statusword 是 CiA 402 设备中非常重要的控制与反馈对象。

Controlword 通常对应对象字典中的0x6040,Statusword 通常对应0x6041。在许多伺服设备中,它们会通过 PDO 映射参与周期性过程数据交换,但具体是否映射、数据长度和传输方向都需要依据驱动器配置确认。

Controlword 是控制器向驱动器发送的控制信息,用于请求驱动器执行状态转换或其他控制动作。Statusword 则由驱动器反馈当前状态和相关标志,供控制器判断设备实际情况。

需要注意的是,Controlword 并不是一个可以随意写入的单一“启动命令”。它包含多个控制位,不同位的组合具有不同含义,而且最终行为受到 CiA 402 状态机、设备实现和相关参数的约束。

在常见 CiA 402 驱动器中,控制器会通过一组状态转换请求,使设备依次进入 Ready to Switch On、Switched On 和 Operation Enabled 等状态。工程上经常能看到与0x0006、0x0007、0x000F相关的控制字示例,但这些数值必须放在具体状态机和设备条件中理解,不能当成所有驱动器都可以直接照搬的万能启动序列。

在简化的常见配置中,状态转换逻辑通常可以理解为以下过程:

  1. 读取 Statusword,判断当前驱动器状态。

  2. 如果驱动器处于 Switch On Disabled,则根据设备要求发送 Shutdown 请求。

  3. 等待驱动器反馈 Ready to Switch On。

  4. 发送 Switch On 请求,并等待 Switched On。

  5. 在满足使能条件时发送 Enable Operation 请求。

  6. 确认 Statusword 已反映 Operation Enabled 状态。

  7. 在运行许可成立后,按照所选模式更新目标位置、速度或力矩。

这里的每一步都应当由状态反馈驱动,而不是仅仅发送几个控制字后就假定使能成功。

例如,控制器发送了 Enable Operation 请求,但 Statusword 始终没有显示 Operation Enabled。这说明状态转换请求尚未达到预期结果。程序应该保留诊断信息,检查当前状态和设备条件,而不是继续无条件发送目标位置。

Statusword 的判断也不能简单地使用一个未经验证的固定十六进制值。Statusword 中既有表示状态机的位,也可能包含警告、远程控制、内部限制和厂商定义的状态标志。可靠的实现通常需要根据 CiA 402 的状态掩码与状态模式进行解码,并参考具体驱动器手册。

例如,常见实现会使用类似statusword & 0x006F的掩码进行部分状态判断。这类写法在常见 CiA 402 状态机解码中可以作为参考,但实际使用前必须确认设备采用的状态机版本、相关位定义和厂商扩展,不能仅凭掩码就忽略其他状态标志。

除了状态字与控制字,驱动器的运行模式也非常关键。对象0x6060通常用于设置 Modes of Operation,0x6061通常用于读取 Modes of Operation Display。常见模式包括 Profile Position、Profile Velocity、Homing、Cyclic Synchronous Position、Cyclic Synchronous Velocity 和 Cyclic Synchronous Torque,但不同驱动器支持的模式并不完全相同。

例如,使用 CSP 模式时,控制器通常需要按照周期更新目标位置,并与驱动器的同步机制和内部插补要求相匹配。若驱动器实际上没有进入所需模式,即使目标位置 PDO 持续变化,也不一定会产生预期运动。

因此,排查伺服使能失败时,应当把 Controlword、Statusword、运行模式、PDO 映射和驱动器手册放在一起分析,而不是只看其中一个对象。

三、为什么控制字已经发送,驱动器仍然不响应?

当工程师确认主站已经进入 OP、PDO 数据能够交换,而且控制程序也在写入 Controlword 后,仍然需要继续排查设备端的运行条件。

第一类问题是驱动器仍处于故障状态。驱动器可能因为过流、过压、编码器异常、跟随误差、通信看门狗或其他内部保护条件进入 Fault。不同设备对故障复位的条件和时序有不同要求。控制器应当先读取相关故障信息,按照设备手册执行复位流程,并确认故障确实已经清除。

故障复位不能被视为可以无限重复执行的通用操作。如果底层故障仍然存在,反复复位可能只会造成状态机反复切换,而不会恢复正常运行。对于涉及安全风险的故障,应当遵循设备和整机安全设计,不应通过绕过保护逻辑的方式强行使能。

第二类问题是驱动器缺少必要的外部条件。例如,硬件使能输入、急停回路、安全门状态、制动器状态、限位信号或其他设备配置可能影响伺服使能。部分条件并不一定直接体现在 EtherCAT 主站状态中,必须结合驱动器诊断信息和现场电气状态判断。

第三类问题是 PDO 映射与应用程序不一致。假设控制器认为某个 PDO 字段是 16 位 Controlword,但实际映射顺序、偏移或数据类型不同,程序写入的数据就可能落在错误的位置。也可能出现对象已经配置,但应用程序仍然按照旧的 Domain 偏移访问数据的情况。

在 IgH EtherCAT Master 应用中,PDO 映射通常通过相应配置接口和从站描述完成。具体注册方式、数据偏移获取方式以及 Domain 的处理流程应以当前 IgH 版本的 API 和示例为准。工程师需要确认对象索引、子索引、位宽、方向和数据格式与设备配置完全一致。

第四类问题是运行模式设置错误。控制器可能写入目标位置,但驱动器当前运行模式并不是预期的 CSP 或 Profile Position。此时目标数据即使能够正常传输,也不代表驱动器会按照预期方式使用这些数据。应当同时检查模式设定值和驱动器反馈的模式显示值,并确认设备支持相应模式。

第五类问题是目标值的单位或范围不正确。某些驱动器使用编码器计数作为目标位置,另一些接口可能使用特定工程单位。控制器需要正确处理弧度、角度、编码器分辨率、传动比、符号约定以及目标值范围。如果单位转换错误,可能表现为目标变化过小、目标超限或运动方向不正确。

第六类问题是周期任务没有按预期运行。假设控制程序已经实现正确的状态机,但 EtherCAT 周期线程偶尔超期,或输出数据未能在预期周期提交,那么驱动器接收到的控制字和目标值也可能无法按预期更新。

此时就需要检查操作系统调度、线程优先级、CPU 资源竞争和中断处理。对于采用实时 Linux 的系统,可以评估 PREEMPT_RT、CPU 亲和性、核心隔离和内存锁定等措施,但它们必须与实际测量结果结合,不能仅凭配置项存在就认定周期稳定。

第七类问题是应用程序没有正确处理状态机中的等待和超时。例如,程序发送 Shutdown 后立即发送 Enable Operation,完全没有检查驱动器是否已经完成预期转换。某些驱动器能够接受这种操作序列,但在不同设备和运行条件下,忽略反馈可能导致状态转换失败或诊断困难。

更可靠的设计是将伺服使能过程实现为明确的状态机,每个阶段都定义进入条件、预期反馈、超时时间和异常分支。当预期状态没有出现时,程序能够停止继续推进,并记录当时的状态字、控制字、故障码、从站状态与时间信息。

四、ROS 2、IgH EtherCAT 与实时线程如何组织伺服使能流程?

在机器人软件架构中,伺服使能不应该被设计成一个随时可以重复调用的简单函数,而应当被看作一段具有明确状态、条件和异常处理逻辑的设备生命周期流程。

ROS 2 可以负责接收上层使能请求、管理机器人任务状态和发布诊断信息。但如果每次控制周期都依赖 ROS 2 回调临时决定是否发送控制字,就可能增加不必要的调度依赖。

更合理的方式,是将伺服状态机放在具有明确执行周期和数据访问规则的控制模块中。ROS 2 发送一个经过校验的请求,控制模块在自己的执行路径中更新状态机,并持续读取驱动器反馈。使能过程的每一步,都由底层反馈决定是否进入下一阶段。

例如,可以把状态机划分为以下逻辑阶段:

  • 初始化阶段:确认主站已初始化,必要的从站配置和 PDO 映射已完成。

  • 通信确认阶段:确认 EtherCAT 状态与过程数据满足运行要求。

  • 驱动器诊断阶段:读取 Statusword、故障信息和当前运行模式。

  • 故障处理阶段:按照设备手册处理可恢复故障,并确认设备已恢复到允许转换的状态。

  • 状态转换阶段:按驱动器要求发送控制字,并逐步等待状态反馈。

  • 运行模式确认阶段:确认驱动器采用目标控制策略所需的运行模式。

  • 运行阶段:允许更新目标值,并持续检查通信和驱动器状态。

  • 异常处理阶段:遇到通信异常、状态超时或设备故障时,执行定义好的恢复、保持或停止策略。

这只是架构层面的示意流程。实际设备的状态转换细节、超时时间、故障恢复方法和安全响应,必须依据驱动器手册、整机安全要求和具体项目设计确定。

在 ROS 2 中,可以通过 Action 或其他适合的接口表达使能请求及其执行结果。对于可能持续一段时间、需要反馈状态和允许取消的操作,Action 通常比简单的单次消息更容易表达任务生命周期。但具体接口形式不是决定实时性的关键,重要的是不要让非实时业务回调成为底层周期任务的无条件依赖。

底层周期线程则应当按照自己的调度要求持续运行。它负责接收过程数据、更新状态机所需的输入、检查驱动器状态,并在适当的周期更新控制字和目标数据。诊断信息可以通过独立路径发布给 ROS 2,以减少日志处理、消息序列化和外部订阅者对关键周期的影响。

使用 IgH EtherCAT Master 时,工程师还需要明确主站初始化和运行期间各类 API 的职责。配置阶段与激活后的周期数据处理应当按照所用版本的 API 约束组织,避免在周期关键路径中执行不必要的阻塞性操作。

对于需要较高实时确定性的机器人控制器,可以将 EtherCAT 周期线程安排在经过评估的实时运行环境中,并根据测试结果配置调度策略和 CPU 资源。望获rtLinux 可以作为实时运行平台的评估选项之一,但是否满足项目要求,需要在实际硬件、网卡、驱动和应用负载下进行验证。

需要特别注意,伺服使能成功并不等于机器人已经具备安全运动条件。实际运动前仍应确认控制模式、运动范围、限位、安全功能、目标值有效性和整机控制策略。对存在人员接近风险的机器人,必须遵守适用的功能安全设计与设备安全要求,不能把软件状态机当作独立的安全保护装置。

五、从状态字到系统日志:如何建立可复现的伺服故障诊断流程?

在实际项目中,最难排查的并不一定是完全无法使能的问题,而是偶发性问题:设备有时可以使能,有时不能;重新启动后暂时恢复;高负载时出现故障;或者程序显示驱动器状态正常,但实际运动行为异常。

这类问题往往需要把通信层、驱动器层和操作系统层的证据放在同一时间线上分析。

首先,应记录 EtherCAT 主站与从站状态。至少要知道主站是否成功激活、从站是否处于预期状态、Domain 数据是否正常更新,以及 WKC 是否符合配置和设备预期。WKC 用于反映相关 EtherCAT 数据报的处理结果,不是通信延迟指标,也不能单独证明实时周期满足要求。

其次,应记录 CiA 402 的状态字与控制字。每次发送状态转换请求时,都应保存当时的 Statusword、Controlword、运行模式显示值以及相关故障信息。这样可以还原设备究竟停留在哪个状态,以及控制器是否在收到预期反馈后继续推进状态机。

再次,应检查 PDO 数据本身。对关键字段,可以在开发和诊断模式下记录目标值、实际值、控制字、状态字以及数据更新时间。需要注意日志记录本身可能影响实时性,因此不宜在高频周期线程中无节制地进行字符串格式化和文件写入。可以采用预分配的诊断缓冲区,由非关键线程异步导出日志,并在验证过程中测量其对系统的影响。

第四,应记录周期执行信息。包括控制周期开始时刻、执行时间、周期超期次数以及异常事件发生时的线程状态。对于 Linux 实时环境,可以结合cyclictest、调度跟踪工具和应用级时间戳分析问题。但cyclictest主要测量定时唤醒延迟,不能代替实际 EtherCAT 周期与整机运动控制的测量。

第五,应把故障现象与复现条件联系起来。记录系统内核版本、ROS 2 发行版、IgH 版本、驱动器固件、PDO 映射、EtherCAT 周期、CPU 亲和性、IRQ 配置和测试负载。只有这些环境信息足够完整,才能判断问题是否与某次配置变更或系统升级相关。

下面给出一个实用的排查顺序:

排查顺序需要确认的内容重点判断
1EtherCAT 主站和从站状态通信层是否满足运行条件
2PDO 映射和 Domain 数据控制字与状态字是否正确传输
3Statusword 与故障信息驱动器实际停留在哪个状态
4Controlword 状态转换请求是否符合当前状态及设备要求
5运行模式与目标值驱动器是否支持目标模式,单位是否正确
6外部使能与安全条件是否存在设备端禁止运行的条件
7周期执行与调度日志是否存在超期或数据更新不及时
8故障恢复与异常路径系统是否能按设计恢复或停止

这个顺序不是要求所有问题都从第一项机械地查到最后一项,而是帮助工程师按层次区分问题。若从站根本没有进入预期通信状态,应优先排查网络和主站配置;若通信正常而 Statusword 明确表示 Fault,则应转向驱动器故障诊断;若状态机已进入 Operation Enabled 但运动仍异常,则应进一步检查模式、目标值、控制算法和周期执行情况。

对于望获rtLinux 等实时运行平台,故障诊断还应关注底层调度是否满足控制周期要求、CPU 资源竞争是否影响周期任务,以及核心隔离配置是否真正降低了关键线程的干扰。不能把所有伺服问题都归结为操作系统实时性,也不能在没有证据的情况下排除操作系统和驱动调度的影响。

总结来看,伺服使能失败通常不是单一的“通信不通”问题,而是 EtherCAT 状态机、CiA 402 状态机、PDO 配置、设备运行条件和控制线程共同作用的结果。排查时,应先确认通信层,再检查驱动器状态和控制字转换,随后核对运行模式、目标数据和系统周期行为。

对于 ROS 2 + IgH EtherCAT Master 的机器人控制系统,最重要的是把伺服使能设计成一个有明确状态、反馈、超时和异常分支的过程,而不是简单地连续发送几个控制字。只有将设备状态机、实时通信和系统级诊断结合起来,才能提高机器人控制软件的可维护性与故障定位效率。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进