J1939协议中用于请求删除ECU名称的对应PGN编号查询
SAE J1939删除ECU信息相关PGN问题解答
1 删除/下线ECU的标准实现方案
SAE J1939标准没有定义专门用于“请求删除ECU名称”的专用PGN,你描述的地址修改后旧数据残留的问题,有成熟的标准解决方案:
- 当ECU地址或信息修改完成后,该ECU主动向全网广播
PGN_ADDRESS_CLAIMED (0x00EE00)报文,其余ECU收到报文后,通过报文中的唯一ECU NAME字段匹配原有存储记录,直接覆盖旧的地址与信息即可 - 如果需要主动让某台ECU下线,可触发该ECU发送地址声明报文时,地址字段填无效地址
0xFE,其他节点收到该报文后,自动移除对应ECU的所有存储信息 - 兼容优化方案:可在库中增加地址声明超时机制,若某ECU的地址声明报文超过5秒未收到更新,自动将其标记为离线并删除记录,符合J1939的通用约定
2 0xFFFFFF PGN编号的使用说明
0xFFFFFF是SAE J1939标准预留的无效PGN标记值,已被占用,不能用于自定义功能,否则会和标准设备的错误处理逻辑产生冲突。
如果需要自定义ECU信息删除的专用PGN,可以使用SAE预留的厂商专有PGN段,该范围内的PGN不会被标准占用,可自由定义功能,不会出现兼容性问题:
- PDU1格式专有PGN范围:
0x00FF00 ~ 0x00FFFF - PDU2格式专有PGN范围:
0x00FF0000 ~ 0x00FFFFFE
现有代码确认
你给出的两个PGN定义是正确的:
PGN_ADDRESS_CLAIMED = 0x00EE00, PGN_COMMANDED_ADDRESS = 0x00FED8,
你提供的请求函数实现也符合J1939的请求报文规范,仅需在地址变更场景下补充主动广播地址声明报文的逻辑,即可解决其他ECU旧数据残留的问题。
内容的提问来源于stack exchange,提问作者euraad
相关产品推荐
相关产品推荐

