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

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

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