CANopen EMCYEmergency紧急对象 是 CANopenCiA 301定义的高优先级、事件触发、单次广播的故障通知机制核心作用是让设备在发生内部严重异常时立即、可靠地向全网告警支撑快速故障诊断与安全响应。EMCY 报文格式8 字节can082[8]3000 04 0111223344can0CAN 接口82CAN-ID 0x82固定规则0x80 节点 ID这里节点 ID 2[8]固定 8 字节EMCY 永远是 8 字节30 00 04 01 11 22 33 44真正的错误信息字节名称说明0–1EECEmergency Error Code16 位紧急错误码标准定义 厂商自定义2ERError Register8 位错误寄存器OD 0x1001反映错误大类3–7MEFManufacturer-specific Error Field5 字节厂商自定义信息如故障位置、参数、时间戳Byte0 Byte1 错误码Error Code0x0030 错误码格式低字节在前高字节在后所以 30 00 → 0x0030CANopen 标准错误码举例0x0000故障恢复0x1000Generic error0x3100过压0x3200欠压0x4100过温0x8110CAN 被动错误0x8120CAN 总线关闭Byte2 0x1001错误寄存器直接等于从站当前的 0x1001 值。Byte3 ~ Byte7厂商自定义用来放更详细的故障如通道号、故障点、故障状态。EMCY核心作用快速、高优先级故障告警错误发生时立即触发抢占总线确保主控 / 监控系统第一时间获知严重异常适合中断式安全响应如紧急停机、切断回路、切换冗余精准故障定位与诊断EEC 标准化错误分类如 0x1000 通用、0x2000 电流、0x3000 电压、0x4000 温度等ER 快速判断错误大类0x1001MEF 提供厂商级细节支持快速定位根因状态同步与安全联锁全网节点同步获知故障状态触发安全联锁逻辑如停止相关轴、切断动力、进入安全状态配合 NMT、Heartbeat/Node Guarding形成完整的设备健康监控体系故障历史追溯错误记录存入 0x1003可事后读取分析用于故障复现、根因排查、预防性维护EMCY工作流程设备检测到内部严重错误更新 0x1001 错误寄存器置位对应位生成 8 字节 EMCY 报文EEC ER MEF以 CAN-ID 0x80 Node-ID 广播发送仅一次记录事件到 0x1003 错误历史错误清除时发送 EEC 0x0000 的 “无错误” EMCY并更新 0x1001关键对象字典(OD)0x1014: COB-ID Emergency紧急报文 COB-ID项目标准规定工程关键索引 / 子索引0x1014 / 0仅子索引 0无多子索引数据类型UNSIGNED3232 位无符号低 29 位为 COB-ID访问属性RW可选部分从站 RO出厂默认0x00000080 节点 ID功能定义从站发送紧急报文的 COB-ID主站监听此 ID 即可接收无需协商标准默认值0x00000080运行时自动叠加节点 ID如节点 2 → 0x820x1015: Inhibit Time Emergency紧急报文抑制时间项目标准规定工程关键索引 / 子索引0x1015 / 0仅子索引 0无多子索引数据类型UNSIGNED16单位×100 微秒即 0.1ms访问属性RW可选对象非必须实现无默认值功能限制连续紧急报文的最小发送间隔避免总线被同一故障刷屏计算示例设为 100 → 100×100μs 10ms工业场景常用 10ms~100ms0x1001: Error Register索引0x1001类型UNSIGNED8含义当前有什么类型的错误只读从站自己更新每一位代表一类错误bit0Generic 通用错误bit1Current 电流bit2Voltage 电压bit3Temperature 温度bit4Communication 通信错误如 CAN 被动错误、总线关闭bit5Device profile 设备专用错误bit6reservedbit7Manufacturer 厂商自定义0x1003Pre-defined Error Field预定义错误队列索引0x1003类型ARRAY of UNSIGNED32子索引 0错误个数子索引 1~8最近 8 个错误码这是错误历史记录。每当发生错误从站把错误码写入 0x1003 [1]旧错误往后挪最多存 8 个这些对象字典的关系0x1001 → 当前有没有错0x1003 → 错的历史记录Emergency → 把 0x1001 0x1003 主动发给主站0x1014 → 用哪个 CAN-ID 发0x1015 → 限制发得太频繁Other那为什么有的从站不发 Emergency从站本身就没实现 Emergency可选功能。简单 IO、低成本模块经常不做。