CANopen诊断
本章介绍了CANopen协议提供的诊断选项。
CANopen州
CANopen网络由 NMT主站(网络管理)和 NMT 从站组成。在这种情况下,NMT主站控制所有设备并可以更改它们的通信状态。CANopen 设备处于以下四种可能状态之一:

初始化:节点开机后,会经历此状态。此时,设备应用程序和设备通信(比特率和节点地址)都会被初始化。之后,节点会自动切换到“预运行”状态。
预操作阶段:可以通过SDO与节点通信。但是,节点无法执行PDO通信。
Operational: CANopen节点运行状态良好,能够独立发送和接收过程数据。
已停止:该节点已完全与网络断开连接,无法进行任何 SDO 或PDO通信。该节点只能通过相应的网络命令(例如:start node)切换到其他网络状态。
错误寄存器
根据 CiA 301 标准,每个CANopen设备都有一个错误寄存器(对象 16#1001)。该寄存器可通过 SDO 读取,并在发生错误时提供有关该错误的更多信息。
错误寄存器中只需要第 0 位(通用错误)即可。其他位是可选的,并非所有从从站都会设置。一旦设备检测到任何错误,该对象的至少第 0 位就会被设置。
少量 | 描述 |
|---|---|
0 | 通用错误 |
1 | 当前的 |
2 | 电压 |
3 | 温度 |
4 | 通信错误(溢出错误状态) |
5 | 设备配置文件特定 |
6 | 已预留(始终为 0) |
7 | 制造商特定 |
紧急和预定义错误字段 (EMCY)
CANopen定义了可选的紧急 (EMCY) 协议,用于指示错误。紧急消息是根据预定义的连接集发送的 CAN 消息,其 CAN-ID 为 16#80 + NODE-ID。
电报的结构如下:

紧急消息的长度始终为 8 个字节。相应的紧急错误代码 (EEC) 在前两个字节中传输。接下来是错误寄存器 0x1011 的当前值(ER:错误寄存器)和 5 个制造商特定的字节(MEF:制造商特定的错误字段)。
错误代码的具体解释必须参考制造商手册。并非所有从站都支持紧急协议,需要通过CANopen管理器进行相应配置。
可以通过 SDO 从对象 16#1003 读取已发生的紧急情况(错误历史记录)。其中,子索引 0 包含已存储的错误数量,后续子对象包含已传输紧急情况的数据内容。
更多信息请参见:预定义错误字段和错误寄存器
监测机制:心跳和节点保护
如果 CAN 节点不持续发送消息(循环PDO),则需要对其进行监控。为此,提供了“心跳”和“节点保护”机制,可以交替使用这两种机制。
节点守护:在此协议中,NMT主站向现有的CANopen从站发送消息(CAN 远程帧)。从站必须在指定时间内响应这些消息。如果没有收到响应,NMT主站会记录此情况。由于通常应避免使用 CAN 远程帧,因此最好采用心跳机制进行监控。
心跳协议:心跳协议随CANopen 4.0 版本发布,是首选的监控方法。在该协议下,每个节点以周期性间隔独立发送一条消息。网络中的任何其他订阅者都可以监控此消息。