重型柴油车标准CAN协议遵循J1939,同样适用于一些工程机械和大部分的客车,SAE J1939物理层基于ISO11898-2,速率为250kbit/s。CAN(Controller Area Network)总线信息传输着车辆各总成控制器的重要控制信号,如何直接从CAN总线上获取、保存与分析报文非常重要。
我们针对各类不同的汽车做数据采集,这些数据不仅有利于驾驶员更好获取驾驶信息,提高车辆操控性,而且便于交通事故的调查分析,为汽车智能化提供了数据基础。SAE J1939协议是目前客车、卡车等大型汽车中最广泛的应用层协议,其针对车辆内部ECU(Electronic Control Unit)的报文格式、ISO拉丁字母符集、参数范围、传输重复率、地址配置、发动机参数命名、通信方式及报文发送优先级等做了明确的规定。
SAE J1939的消息格式使用参数群编号作为一组参数的标号。这些参数中的每一个都可以用ASCII码表达,或者由两个或者两个以上的字母组成的功能状态。字母数字字符将首先作为最高位的有效字节进行传送,除非另外有特殊指定,字母数字字符都遵照ISO字母组,其他两个或者两个以上数字字节组成的参数,首先作为最低位有效字节进行传送。
对每个参数都应该确定它的数据类型,数据的类型可以是状态值或者是测量值。状态值表示一个或多个状态参数的目前状态,比如车门为打开状态、或者为关闭状态,当下车速是60码,这些都是状态数据,这些都是传输节点在执行操作后所产生的结果。这个操作是根据本地或者网络测量值或者状态信息进行计算的结果。要注意的是,这样的操作不需要有特定的确认信息。例如状态数据表示有一个电磁线圈已经被激活了,我们并不需要对他进行测试来确认这个电磁线圈已经实现了它的功能,直接通过报文信息比对便可以输出这个结果。状态类的数据有发动机刹车被启动,速度运行、巡航控制运行、巡航状态、故障代码、转矩、油门以及这些状态数据不对称性的调整等等。
测量之类的数据表示了传输节点对某个参数测量后得到的当前值,这样可以确定已定义的参数的状态。数据测量值类型的数据有进气压力、点火开关、巡航设置开关打开、最大巡航速度、剩余油量、速度、负载百分比等等。
通信参数的定义:
看下面三个表格,包含了确定的传输信号有效数值范围、表示离散参数的传输数值(测量值)及表示控制模式命令状态的数值范围。在错误指示范围内的数值表示,由于传感器、子系统或功能模块中出现某种类型的错误,因而没有可利用的参数(比如该车没有这个传感器)。
在不可用的范围内的素质表示,模块传递的消息包含的参数在该模块中不可用或者不支持,在不可被请求范围内的数值提供了设备传输命令消息和识别那些不要接收设备发出响应的参数的手段。
如果一个元件故障阻碍了某个参数有效数据的传输,那表示离散参数的传输数值及控制命令传输数值的下表中描述的错误显示数值应该用于代替该参数的数值。然而,如若测量或计算出来的数据所产生的数值是否有效的,但它超过了已定义的范围,那么我们采集到的错误显示的数值就不应该使用,而应该用合适的最小或者最大数值进行传输,采集的时候容易掉坑。
传输信号有效数值范围
范围名称 | 1字节 | 2字节 | 4字节 | ASCII |
有效信号 | 00-FA | 0000-FAFF | 00000000-FAFFFFFF | 01-FE |
特定参数指示 | FB | FB00-FBFF | FBXXXXXX | - |
保留给将来指示使用的范围 | FC-FD | FC00-FDFF | FC000000-FDFFFFFF | - |
错误指示 | FE | FEXX | FEXXXXXX | 00 |
不可用或者不可请求 | FF | FFXX | FFXXXXXX | FF |
表示离散参数的传输数值(测量值)
范围名称 | 传输数值 |
禁止(关闭,非运行等) | 00 |
启动(打开,正在运行等) | 01 |
错误提示 | 10 |
不可用或不能装 | 11 |
表示控制命令的传输数值(状态)
范围名称 | 传输数值 |
用于停止功能的命令(关闭等) | 00 |
用于启动功能的命令(打开等) | 01 |
保留 | 10 |
无关紧要/无动作(看功能决定) | 11 |
我们在采集数据的过程中会涉及到比例、界限、偏移量、和传送等,这样给在CAN总线上给定的参数类型(如温度、压力、速度)中尽量保持数据的一致性。例如大众汽车的方向盘转向角度通过CAN报文采集的是-32768至32768的范围,它的分辨率是0.1秒位,数据长度是16位,偏移量就是-3276.8,为此可以判定这个的角度和方向。另如制动踏板,这个数据在DBC报文显示踩下为01,放开为00,也十分容易判别。
类似这样的数据采集,可以从DBC获得丰富的数据包含了计数、里程、剩余油量、电流、进气流量、耗油量、调速增益、齿轮传动比、重力负荷、进气压力、温度等等,在BCM系统还可以采集安全带、手刹、车门状态、钥匙状态、方向盘转向角度、动力开关等,控制上基本都可以实现动力开闭、闪灯鸣笛、门锁开闭、升窗、关天窗、控雨刮、尾箱等。
发动机的有些参数是根据曲柄角的变化进行计算或者更新的,它们不是在某个特定的时间后进行的。这个情况下,参考特定的更新就会失效,因为这个时候是按照转速变化而变化。为了避免网络负担过重,我们采用总线监听的方式,读懂了发动机的通信与控制参数,发动机也是尽量缩短采样时间、运算和传输数据的反应时间。大体有2种,一是基于时间的采样、运算和传输;二是基于时间和基于曲柄角混合使用的采样、运算和传输。这时,为了在可接受的范围内保持数据更新速度,曲柄角的角度值会根据当前的运转速度,在前后更新的时间间隔中改变。
例如下面几组发动机电子控制单元的主报文帧内容:
Torque/ Speed Conrtol-转矩速度控制
发动节点:HCU
接受节点:ECU
发送周期:取决控制目的
数据长度:8
数据页:0
PDU格式:0
特定PDU:DA
默认优先值(P):3
参数群编号(PGN):0
起始位 | 长度 | 数据名 | SPN |
1.1 | 2bit | 发动机控制模式 | 695 |
1.3 | 2bit | 发动机请求速度控制状况 | 696 |
1.5 | 2bit | 控制模式优先级 | 897 |
2-3 | 2 byte | 所请求的输出转速/速度极限 | 898 |
4 | 1 byte | 所请求的转/转矩限制 | 518 |
5.1 | 3bit | TSC发送速率 | 3349 |
5.4 | 5bit | TSC 控制目的 | 3350 |
Turbocharger-涡轮增压器
发送周期:1秒
数据长度:8
数据页:0
PDU格式:254
特定PDU:221
默认优先值(P):6
参数群编号(PGN):0XFEDD
起始位 | 长度 | 数据名 | SPN |
1 | 1 byte | 涡轮增压器润滑油压力 | 104 |
2-3 | 2 byte | 涡轮增压器1转速 | 103 |
4.7 | 2bit | 涡轮增压器油位开关 | 1665 |
在国六远程OBD在线排放终端控制器的系统中,速锐得就是采用这一特性,从J1939的数据协议中采集获得发动机工况包含了车速、大气压力、发动机扭矩、摩擦扭矩、发动机转速、燃料流量、SCR上游氮氧化物传感器输出值、反应剂余量、进气量、SCR出入口温度、DPF压差、发动机冷却液温度、邮箱液平面百分比、定位状态、经纬度、累计里程、发动机扭矩模式、油门踏板、油耗、尿素箱温度、实际尿素喷射量、DPF排气温度等数据,通过移动4G/5G网络,采用GB-17691网络通讯传输协议,将终端数据发送给数据平台,实现重型车J1939在环保排放领域的CAN总线数据应用。