2023-04-10
应用于重型车辆的SAE J1587协议
作者:triv 点击:619
SAE J1587协议
协议背景
SAE J1587协议是由卡车和公共汽车的电子电气委员会的一个分会提出的一种SAE标准。协议的目的是促进不同电子控制单元中软件之间的一致性。J1587协议应当与描述硬件和通信基础的SAE J1708协议一起使用。它与J1708一起用来为重型车辆(卡车和客车)中微控制器设备的开发和维护降低成本和复杂性。
SAE J1587是卡车用网络通讯协议,J1708是其对应的物理层。SAE J1939的出现比J1587晚,J1939全面的定义了卡车的通讯网络,包括物理层、应用层等。J1587与J1939都有使用,但是J1939在行业的应用更为普遍,是大家公认的行业标准。
应用领域
J1587协议专门用在重型车辆中,用于网络中节点之间的数据交换、驾驶信息或诊断。应用领域包括:
◉车辆和组件信息(性能、维护、诊断)。
◉导航和时间规划(路线描述和时间估计)。
◉驾驶信息(行程记录器数据、驾驶日志)。
◉货物运输信息(关于起运地点和运送目的地的信息)。
协议简介
J1587协议定义重型车辆中微处理器设备之间发送的J1708报文的格式。它还支持与连接到总线的外部设备进行通信。
◉J1587是一种应用层协议,与物理层J1708一起使用。
◉J1587描述报文格式并定义参数。
◉J1587报文由MID、PID、数据字节和检验和组成。
◉按照J1708规定,J1587报文的长度限制为21个字节。
◉J1587允许使用面向连接的传输服务(COTS)发送长度大于21字节的报文。
协议细节
➡ 报文剖析
J1587报文的组成遵循J1708规范,因此报文的长度限制为21字节。
1️⃣报文的第一个字节包含一个节点特定的报文标识(MID)。J1587定义MID的区间为128-255。
2️⃣MID后面的第一个字节是一个参数标识(PID)。PID(通常)是一个字节长度,可以包含的值范围是0-255。
3️⃣每个PID后面跟一些参数数据字节。它们的值和含义取决于PID的值。注意,报文可以包含多个PID。
4️⃣报文以一个字节长的检验和结尾,这个检验和由报文中所有数据字节总和的补数组成。如果报文有效,那么对包括检验和在内的报文中的所有字节总和对256求模,结果是0。
MID |
PID |
数据 |
PID |
数据1 |
数据2 |
检验和 |
128 |
21 |
50 |
12 |
05 |
48 |
248 |
PID 0-127(以及256-383)描述一个字节长的数据参数。PID 128-191(384-447)描述包含两个字节的数据参数。需要两字节以上的数据参数分配的PID是192-253(或448-509)。这些PID后面的第一个字节将包含数据参数字节数。
PID 194-196用于诊断。出于这个目的,车辆中的许多电气部件都分配有子系统标识(SID)。对于每个MID,最多可以为其定义255个不同的SID。通过这些SID,可以标识那些无法与特定PID关联的部件。SID只应分配给可现场替换的部件或可以与MID相关的部件。大部分SID由SAE或数据格式分会预定义。SID 151-155是可用于读出非部件特定诊断信息的“系统诊断代码”。诊断信息包含一个故障模式标识符(FMI)。
PID 225-227用于仪表盘文本显示,多个ECU均可以访问它。有三个命令用于此用途:文本报文显示类型(PID 227)、要显示的文本报文(PID 226)和确认的文本报文(PID 225)。
PID 254用于传输目的地为总线上特定节点的特殊命令、数据和信息。这个PID后面发送的数据参数可以由设备厂商确定。
PID 255用于把PID扩展到两个字节,也就是说,后面的字节也是一个PID。对于这个额外的PID,可以使用的值最大可以为511。如果第一个PID是255,那么后面的PID被理解为256的求模结果(0=256、1=257)。
➡ 参数定义
通常,数据发送时最低有效位在前面。但是字母数字数据发送时最高有效位在前面,按照ISO Latin 1(8859-1)标准进行解释。有符号整数作为2的补数发送。所有温度都采用华氏温度。浮点数遵循IEEE浮点标准。
➡ 优先级
报文的优先级和传输速度由设备的厂商确定。J1587包含关于如何设置优先级和传输速度以避免总线过载的建议。如果单条报文中发送多个参数,那么优先级将基于具有最高优先级的参数。应该为包含诊断请求的报文赋予低优先级,以避免干扰正常的总线通信。
➡ 如何理解J1587报文?
SAE的网店中提供J1587标准。表1定义MID。例如,128是引擎(确切地讲是1号引擎),130是传输。表2是所有PID的列表。例如,21是引擎ECU温度。标准的附录1中包含每个PID数据的定义。下面是一个例子:
参数数据长度: |
1个字符 |
数据类型: |
有符号的短整型 |
位精度: |
2.5 °F |
最大范围: |
–320.0至317.5 °F |
传输更新周期: |
1.0 s |
报文优先级: |
8 |
格式: |
|
PID |
数据 |
21 |
a |
a— |
引擎ECU温度 |
本例中,我们可以看到温度编码为一个字节(紧跟在PID字节后面的21)。它是一个有符号的值并带有刻度,所以每个位对应于2.5 °F。
分段报文的组成
使用外部通信链路从“封闭式系统”中读出信息的需求一直在增加。因此J1587提供本设置。使用的方法称为面向连接的传输服务(COTS)并提供方法来发送用于内部通信的长度超过21字节的报文。
这种传输协议可以处理的最大报文长度是3825字节。报文分成段,每个段包含15个字节。最后一个段的长度可能小于15。每个段都被赋予一个带有段号的报头,然后以带有一个MID和一个特殊PID的J1708报文进行发送。分段报文的接收方删除报头和检验和,并且从剩下的15个数据字节重构原来的报文。当整条报文传输完毕后,可以根据需要处理报文,例如可以通过网关发送到外部设备或内部发送到显示器。
用于传输分段报文的服务使用两个特殊的PID。连接管理PID(197)控制连接的开始和结束、报文流控制和报文接收。连接模式数据传输PID(198)专门用于数据传输。
➡ CMP(连接管理PID)
这个PID(197)管理分段的数据传输。这个PID后面的第一个字节包含后续的字节数。第二个字节包含接收方的MID。第三个字节包含连接管理控制命令(CMCC),后面跟随数据字节(不同命令有不同长度的数据字节)。
PID |
n |
MID |
CMCC |
数据(1) |
数据(2) |
数据(3) |
数据(...) |
CMCC字节可以包含下列命令:
◉请求发送(RTS)。从希望传输数据的节点发送。
◉清除发送(CTS)。从RTS的接收方作为响应发送。
◉报文结束确认(ACK)。在接收到报文所有段时从接收方发送。
◉请求标准化的数据。在请求标准格式的数据时使用。例如,驾驶记录或行程记录器。
◉中止。从发送方或接收方发送,用来中止通信。
➡ CDP(连接模式数据传输PID)
这个PID(198)用于传输分段的报文。这个PID后面的第一个字节包含后续的字节数。第二个字节包含接收方的MID。第三个字节包含段标识(1-255),后面跟随15个数据字节。最后一个段可能不到15个数据字节。
PID |
n |
MID |
段 |
Id |
|
|
|
|
➡ 分段报文的传输
![图片](static/picture/20230410171224_82065.jpg)
△ 分段数据通信 ( 图片引自J1587规范 )