You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求基于SAE J1939协议的OBD-II完整数据帧示例及通信规则答疑

SAE J1939 29位扩展ID字段构成

SAE J1939协议规定29位扩展ID按从高位到低位拆分以下字段,OBD诊断类请求按如下规则填充即可:

  • 优先级(3位):诊断请求优先级固定填6,对应二进制110
  • 保留位(1位):默认填0
  • 数据页(1位):普通OBD诊断报文填0
  • PDU格式(8位):诊断请求类报文固定填0xDA
  • PDU特定字段(8位):广播读PID时填全局目标地址0xFF,指定单个ECU访问时填对应ECU的目标地址
  • 源地址(8位):外部诊断设备的标准源地址为0xF9,直接使用即可

按以上规则拼接,OBD广播请求的标准报文ID为0x18DAFFF9。

实际总线传输数据帧示例

以下是商用车J1939总线上读取发动机转速的真实通信帧:

请求帧(诊断工具发广播):
报文ID:0x18DAFFF9
数据段:0x03 0x01 0x0C 0x00 0x00 0x00 0x00 0x00
说明:0x03为有效数据长度,0x01对应OBD模式1(实时参数读取),0x0C为发动机转速的PID编号

响应帧(发动机ECU返回,ECU源地址为0x00):
报文ID:0x18DAF900
数据段:0x04 0x41 0x0C 0x1A 0xF8 0x00 0x00 0x00
说明:0x41是模式1的响应标识,0x0C对应转速PID,0x1AF8换算为十进制后除以4得到实际转速1758rpm

OBD-II通信应答机制说明
  • 11位标准ID的OBD-II通信:依赖CAN总线底层硬件自动应答,收到合法报文的节点会自动返回ACK位,应用层不需要额外实现应答逻辑,仅需配置超时重试机制即可,常规PID读取的超时阈值建议设为200ms,连续3次无响应可判定请求失败。
  • SAE J1939协议下的OBD通信:单帧传输的短报文同样不需要应用层应答,仅当响应数据长度超过8字节需要多帧传输时,诊断工具需要在收到首帧后返回应用层流控帧,通知ECU可以发送后续连续帧。

内容的提问来源于stack exchange,提问作者Alex Ghilas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:24:02