李青涛,钱枫,3,王明达,王洁,祝能,王超
(1.430081 湖北省 武汉市 武汉科技大学;2.100012 北京市 中国环境科学研究院;3.264207 山东省 威海市 山东鸣川汽车集团有限公司)
随着对重型车污染物排放监管力度的加大,国家生态环境部发布的GB 17691-2018《重型柴油车污染物排放限值及测量方法(中国第六阶段)》明确规定所有国Ⅵ车型必须安装OBD 车载终端,使用SAE J1939、ISO 15765、ISO 27145 通信协议实现OBD 车载终端与车辆CAN 总线的通讯,对发动机尾气排放状况进行实时监控和故障诊断[1]。
由于各个主机厂采用的通信协议类型不尽相同,致使不同车型的通信参数配置也存在较大差异[2]。整车各控制域CAN 通道通信参数一致时,车载终端系统可以快速配置相同的通信参数并实现通信,但是由于车型更新、配置升级、网络结构优化等需求变化,整车各控制域通信机制也不断调整,导致单个车辆的多通道CAN 总线可能存在不同的波特率、通信协议,车载终端若无法实现通信协议自适应,将导致其与车辆ECU 通讯失败,无法起到OBD 车载终端的实时监控诊断功能[3]。目前存在的CAN总线转换器多数是协议转换或者是波特率转换,功能单一,不能对CAN 总线各通信参数进行较完整的识别,且应用于车载终端系统,不仅增加成本,而且也会降低数据传输效率和增加误码率[4-5];汽车OBD 诊断仪可以识别车辆各种通信参数,但是需要手动选择匹配,使得量产的车载监控终端安装使用更为繁琐。
针对当前国Ⅵ重型车适配的OBD 车载终端对CAN 总线波特率和协议类型不能进行自动识别,为了提高终端的通用性、兼容性和自适应性,设计了一种CAN 总线协议自适应算法。该算法首先通过轮询法对CAN 总线的波特率进行准确识别;其次利用协议通信模式特征和数据包特征字符对车辆各CAN 通道总线通信协议类型进行自动识别,相对于单一的识别算法,该算法识别率和准确率更高,可以快速匹配车辆总线并进行可靠的数据通信。
OBD 车载终端遵循模块化设计原则,旨在降低整体设计复杂程度[6]。车载终端通过CAN 数据采集模块采集车辆实时运行数据、诊断数据、状态参数以及其他需求信息,经加密签名后,利用2G或4G 无线通信模块按照国Ⅵ标准规定的通信协议上传于网络平台。图1 是终端系统硬件架构,MCU选用国产芯片GD32F403RC,负责整个系统的运行调度,具有低功耗、高集成度和高性能的特点。
图1 终端系统结构示意图Fig.1 Schematic diagram of terminal system structure
CAN 控制器与车辆CAN 总线的硬件连接如图2 所示。CAN 收发器采用恩智浦公司的TJA1042 芯片,控制车辆CAN 总线信号采集工作。CAN 收发器与车辆上的CAN 总线之间采用双绞线形成的差分信号进行异步串行通信,依靠收发器中的位定时寄存器对总线电平分位,进而实现波特率设置;利用CAN 总线协议实现数据的稳定传输[7-8]。
图2 终端CAN 模块与车辆通信示意图Fig.2 Schematic diagram of terminal CAN module and vehicle communicationstructure
波特率参数配置在CAN 数据采集模块的底层驱动中进行设置,根据波特率的计算公式(1)-(6),只需要合理设置BAUDPSC、BS1 和BS2 三个参数的值即可改变CAN 波特率。
式中:BaudRate——波特率;Bit_Time——位时间;tSYNC_SEG——同步段占用时间单元;tBS1——位段1总时间单元;tBS2——位段2 总时间单元;tq——最小时间单元;tpclk1——总线系统时钟周期;BS1、BS2——位段1、位段2;BAUDPSC——CAN 总线系统时钟预分频系数。
MCU 内部集成的CAN 控制器功能模块有3 种工作状态:初始化状态、正常通讯状态和睡眠状态,通信过程中处于正常通讯状态。寄存器CAN_INTEN 是CAN 中断使能寄存器,控制各个中断使能位,如图3 所示。其中位2 和位5 分别是接收FIFO0 和FIFO1 满中断使能位,1 使能,0 禁用;位15 为错误中断使能位,1 使能,0 禁用。在CAN 处于正常通讯状态时,分别使能寄存器CAN_INTEN 位2、位5 和位15,读取CAN_RFIFO0 接收FIFO0 寄存器、CAN_RFIFO1 接收FIFO1 寄存器和CAN_ERR 错误寄存器的状态值,判断当前波特率是否正确。
图3 CAN_INTEN 中断使能寄存器Fig.3 CAN_INTEN interrupt enable register
汽车CAN 总线上广泛使用高速CAN:250 kB/s和500 kB/s[9],考虑到车载终端与车辆匹配使用的特性,车载终端仅需要检测车辆总线上这2 种波特率即可。波特率自适应流程如图4 所示,在自动识别波特率过程中,控制器不断读取错误寄存器的状态值并进行判断,若有错误中断发生,说明当前波特率不正确,错误寄存器累加计数,当计数值大于设定的错误报文阈值时,设置波特率参数,切换波特率;若无错误中断发生,说明当前波特率正确,波特率匹配成功。
图4 波特率自动识别图Fig.4 Baud rate automatic identification diagram
协议类型主要通过不同协议通信模式特征进行区分。SAE J1939 协议、ISO 15765 协议和ISO 27145 协议均以开放式系统互联参考模型为基础进行制定,相比OSI 的7 层协议,3 种诊断协议在物理层、数据链路层、网络层和应用层进行详细规定,并且各有不同,总线通信机制也具有很大差别[10-13]。如图5所示,对于SAE J1939 协议,通讯报文多以广播形式发送于CAN 总线,对于特定需求的消息报文,需要节点请求相应PGN 来获取;对于ISO 15765 协议和ISO 27145 协议,所有通信报文是基于请求-回复型的通信机制,需要节点周期间隔性请求信息才能获取数据。因此,根据总线上报文通信模式特征即可区分是广播型SAE J1939 协议还是请求-回复型ISO 15765 或ISO 27145 协议。
图5 广播型协议和请求-回复型协议消息传输机制对比Fig.5 Comparison of broadcast and request-reply protocol message transmission mechanisms
如表1 所示,可以根据各协议通信模式特征的不同,先区分出广播型协议和请求-回复型协议。对于广播型协议如SAE J1939 协议,车辆各个电控节点会周期性向CAN 总线上发送数据,当波特率匹配一致时,终端会接收到相应报文,终端以此来初步区分广播型和请求-回复型协议。
表1 通信模式特征区分Tab.1 Communication mode feature distinction
对于请求-回复型协议ISO 15765 协议和ISO 27145 协议,利用特征字匹配算法对数据流中的净荷内容的更深层次的扫描和匹配,识别数据报文中的指纹信息,与已定义的特征字进行匹配比对,进而确定协议类型。ISO 27145 协议虽然基于ISO 15765 协议制作,但是两者在一些固定的参数标识符上存在较大不同,因此可以根据静态特征标识符进行区分[14],ISO 15765 协议和ISO 27145 部分服务标识符SID 和参数标识符PID 对比如表2 所示。
表2 ISO 15765 协议和ISO 27145 部分SID 和PID 对比Tab.2 Comparison of partial SID and PID between ISO 15765 protocol and ISO 27145
依据不同数据流的传输规则,特征字匹配识别存在单帧识别与多帧识别的差别,单包识别通过单帧报文匹配即可确定协议类型,多帧报文匹配则需多次检验比对才能准确辨别协议类型。本文特征字匹配识别主要考虑多帧报文的识别,报文特征字匹配处理流程如图6 所示,通过逐包分析和匹配的识别技术,对CAN 总线协议能做到比较准确的识别。
图6 特征字匹配处理流程Fig.6 Feature word matching processing flow
自适应算法的核心思想是根据车辆上多通道CAN 总线通信参数的差异动态匹配车载监控终端的波特率和通信协议,各通信参数配置格式如表3所示。
表3 CAN 总线通信参数配置Tab.3 CAN bus communication parameter configuration
式中n 与m 均为自然数。可知共有24 种组合方式,但由于SAE J1939 只有扩展帧格式,实际上只需考虑20 种匹配方式。
CAN 总线协议自适应算法实现流程如图7 所示。具体步骤:(1)在终端启动自检后,会从FLASH 配置区读取保存的协议检测状态参数,若协议已经检测成功,则直接省略检测步骤;若未检测成功,则开始初始化CAN 通信参数,执行协议检测程序。(2)车载终端在尚未确定车辆总线各通信参数的情况下处于监听检测模式,终端在规定时间内循环监听检测各通道上的报文信息。(3)检测各通道总线上是否有接收错误产生或者数据格式不正确或未接收到数据,如果有则表示当前波特率不匹配或协议错误或者总线处于空闲状态;反之,说明当前通信通道波特率、协议类型及数据帧类型与车辆上通信参数一致。(4)若协议检测成功,则保存当前通道的通信参数,该通道可正常通信;若还未检测成功,则轮询切换协议及波特率类型,直至匹配成功为止。
图7 CAN 总线协议自适应算法实现流程Fig.7 CAN bus protocol adaptive algorithm implementation process
为提高协议检测效率,进行以下优化:(1)依据CAN 总线波特率使用广泛性,各通信通道的波特率默认设置为250 kB/s。(2)由于重型汽车多采用SAE J1939,故终端初始匹配的各通道协议类型均为SAE J1939。(3)自适应算法是利用轮询遍历方式进行检测参数,参数检测时间需设定上限,该项服务时间必须考虑总线信息访问冲突、信息传递延时时间[15]、报文优先级及周期性报文时分调度等因素的影响,保障各个检测部分的公平性[16]。(4)考虑到检测过程中的软硬件运行环境变化,设置循环检测次数上限,到达次数上限后终端自动重启,重新开始循环检测,提高正确匹配性能。(5)为进一步增强OBD 车载终端的CAN 总线协议的自适应性能,对于终端出厂后未配置任何通信参数、外界干扰导致终端和车辆通信异常、车辆升级或其他原因导致总线波特率改变等特殊情况,软件设计中加入了总线通信参数实时判断并配置功能。
对OBD 车载终端的CAN 总线协议自适应算法实验验证主要利用的工具有车载24 V 电源、周立功CAN 适配器、PC 机、车载终端、仿真器和串口线束及其他线束,用CANTest 测试软件和SecureCRT调试终端对车载终端中CAN 总线协议自适应状态进行记录。实验之前,将电源、CAN 适配器、PC 机、车载终端、仿真器和串口线束连接可靠。
以重型柴油车为测试对象,针对不同车型进行测试,进一步观察OBD 车载终端的CAN 总线协议自适应性能。终端在车辆上安装成功后,对多通道的CAN 总线协议进行自动识别。结果表明,OBD车载终端的CAN 总线协议自适应模块能正常满足功能需求,实现与车辆总线协议可靠匹配,其中两通道上的SAE J1939 协议和ISO 15765 协议自适应实验环境和日志信息如图8、图9 所示,实验结果和实车各通道总线协议一致。
图8 实验环境Fig.8 Lab environment
(1)本文在重型车适配的OBD 车载终端基础上设计了一种CAN 总线协议自适应算法。通过对CAN 总线波特率轮询识别、协议通信模式特征识别和特征字匹配识别等多种识别方法的结合大大提高了协议的识别率和准确率,利用CAN 总线协议自适应算法使终端对车辆总线通讯参数具备自动识别能力,进一步优化了OBD 车载终端的应用性能。
(2)实验结果表明,应用CAN 总线协议自适应算法后的OBD 车载终端能在不同通道上完成各通信参数的自动识别,并可识别多种CAN 总线通信协议,实现快速匹配,适应多样化的需求。算法系统具有较高的稳定性和实用性,大大提高OBD车载终端的实际使用性能和应用范围。
(3)本文设计的CAN 总线协议自适应算法已广泛应用于雄安、烟台、义乌、西宁、杭州等地重型车的OBD 车载终端,并与山东凯马汽车制造有限公司深度合作。实践表明,OBD 车载终端应用CAN 总线协议自适应算法,很好地解决了重型车上出现的多通道通信参数不同导致车载终端与车辆总线适配困难的问题,具有显著的工程实践意义。