【Autosar从入门到精通到进阶实战篇】13 CANopen紧急报文(EMCY)与错误处理实战:让系统在异常时“优雅地倒下”
13 CANopen紧急报文(EMCY)与错误处理实战:让系统在异常时“优雅地倒下”上回我们聊了NMT状态机这根“指挥棒”,它让多设备从“各自为政”变成了“协同工作”。但现实是,再好的指挥棒也挡不住设备突然“生病”——电机过载、传感器断线、通信超时……这些故障如果处理不当,轻则数据错乱,重则整条产线跳闸。今天,我们就来拆解CANopen的“急诊科”:紧急报文(EMCY)。它不追求“精准诊断”,而是追求“秒级报警”——让系统在崩溃前,至少能喊一声“我快不行了”。痛点拆解:把“死机”当成“正常”我见过太多项目,遇到设备故障时,主控还在傻傻地发PDO,从站已经“躺尸”了。最常见的错误认知有:1. 以为“没收到心跳”就能当报警心跳是“活着”的信号,但设备可能“活着但痛苦”——比如电机堵转,心跳依然在发,但转矩已超限。此时心跳检测无效。2. 用PDO传错误码有人把错误码塞到PDO里,但PDO是周期性发送,等主控收到时,设备可能已经烧了。紧急报文是事件触发,优先级最高。3. 错误处理“一刀切”不管什么故障,全部触发系统停机。结果一个传感器误报,整条线停半小时。反例代码(错误做法——用轮询方式检查错误):