### J1939多帧广播DM1、EC1报文格式详解
#### DM1报文格式
在探讨DM1报文格式之前,我们需要先了解一些基础概念。SAE J1939-21标准对CAN ID进行了重新划分,并且加上8个字节的数据域,从而构成了J1939的协议数据单元(PDU)。根据SAE J1939-73标准中的定义,DM1报文具有一定的优先级和PGN(Parameter Group Number,参数组数编号)。
- **优先级**: 定义为6。
- **PGN**: 为65226(00FECA)。
因此,当源地址为0x41时,DM1 ID为18FECA41。如果该节点存在两个现行故障,其SPN(Specific Parameter Number,特定参数编号)和FMI(Failure Mode Indicator,故障模式指示器)分别为(521132,1),(521008,3),则按照DTC(Diagnostic Trouble Code,诊断故障码)结构定义,当OC(Occurrence Count,发生次数)=1时,两个DTC分别是ACF3E101和30F3E301。
#### DM1多帧传输说明
当故障数量超过一个,导致DM1报文的字节数大于8时,就需要使用“多帧传输”参数组来进行传输。根据SAE J11939-21标准,长度超过8字节的消息会被拆分成多个小数据包,每个数据包将被单独传送。具体而言:
- 每个数据包都会被分配一个从1到255的序列编号。
- 最后一个数据包的剩余字节会填充为“FF”。
因此,对于报文0x18FECA41:00FFACF3E10130F3E301,由于其长度超过了8字节,会被拆分为两个报文:0100FFACF3E10130和02F3E301FFFFFFFF。
#### 广播公告消息(BAM)及数据传送说明
如果需要广播一条多帧消息,首先需要发送一条BAM消息,该消息包含了即将广播的长消息的PGN、消息大小以及被拆分的数据包的数量。然后使用PGN=60160来发送这些数据包。例如,对于报文0x18FECA41:00FFACF3E10130F3E301,消息大小为10个字节,分成两个数据包,参数群编号为00FECA,因此BAM的消息数据域为:200A0002FFCAFE00。
SAE J1939-21标准还定义了链接管理TP.CM(BAM为其中一种),其PGN为60416(00EC00),BAM的目标地址为全局目标地址FF。此外,如果PDU格式(PF)段的值在240和255之间,则特定PDU包含群扩展(GE)值。全局目标地址(255)要求所有设备都作为消息响应者进行监听和响应。因此,对于0x18FECA41的BAM报文ID为0x18ECFF41。
对于数据传送TP.DT的参数群编号为60160(00EB00),并且使用全局地址进行BAM数据的传送。所以,对于0x18FECA41的TP.DT报文ID为0x18EBFF41。
#### EC1报文传输说明
EC1报文用于传输发动机特性曲线等信息,其传输过程与DM1类似,但细节有所不同。
1. **单帧CAN数据长度限制**:SAE J1939-21协议要求单帧CAN数据长度为8字节。如果消息长度大于8字节,则会被拆分成若干个小的数据包,每包长度为8字节,并且每个数据包都有一个从1到255的序列编号。最后一个数据包的剩余字节会填充为“FF”。例如,0x18FEE300会被拆分成6个报文。
2. **广播公告消息(BAM)**:如果需要广播一条多帧消息,需要先发送一条BAM消息。BAM消息包含了即将广播的长消息的PGN、消息大小以及被拆分的数据包的数量。使用PGN=60160来发送这些数据。例如,报文18ECFF00的第2和第3字节0028表示要发送28字节数据;第4字节06表示分6个包发送;第6、7、8字节表示发送的是来自ID:FEE300的数据。
3. **BAM和TP.DT的PGN定义**:SAE J1939-21定义了链接管理TP.CM(BAM为其中一种)的PGN为60416(00EC00),BAM的目标地址为全局目标地址FF。因此,第一帧报文ID为18ECFF00。而数据传送TP.DT的PGN为60160(00EB00),使用全局地址FF进行BAM数据的传送。因此,后续数据包报文ID为18EBFF00,并且连续发送6帧。
对于发动机参考扭矩的解析,首先需要监测报文ID为18ECFF00且第6、7、8字节是E3FE00的数据报文;接着接收3帧报文ID为18EBFF00的报文,第1字节分别为01、02、03;最后通过获取报文ID为18EBFF00且第1字节为03的报文来完成整个数据的接收与解析。
通过对DM1和EC1报文格式及其多帧传输机制的详细介绍,我们可以更深入地理解J1939协议在CAN总线上传输大容量数据的方式及其应用场景。