整车CAN总线数据测试系统的研究

2021-01-04 03:59刘瑶秋季金强赵苗苗
客车技术与研究 2020年6期
关键词:自动测试报文客户端

刘瑶秋, 季金强, 赵苗苗, 刘 静

(扬州亚星客车股份有限公司, 江苏 扬州 225116)

CAN总线数据测试是车企整车下线调试中的重要环节,为了确保CAN通讯正常,以及整车各ECU(Electronic Control Unit)控制逻辑符合要求,需要对通信报文进行采集和测试。测试内容主要为检测信号状态的正确性和报文发送时序逻辑的正确性[1]。

目前汽车通信及相关行业内,主流的CAN总线报文分析工具功能成熟、专业性强,但价格昂贵且操作复杂,不便于整车下线的批量检测使用。部分定制化整车下线测试工具可以实现一键检测功能,但系统庞大,且只能面向静止车辆进行检测。同时,定制化的系统不利于后期维护和功能修改,且伴随二次收费的可能。

对此,本文设计一种便携的CAN总线数据测试系统,可覆盖动态、静态各种工况。通过自主设计的数据采集设备和Android端测试软件,低价取代昂贵的商业测试产品,通过自动测试序列的理念,在PC客户端软件自由编制测试文本,导入Android客户端实现自动测试,从而为测试工程师快速定位并解决问题提供有利条件[2]。

1 系统的设计和实现

1.1 系统的架构与功能

综合考虑整车CAN总线数据测试系统的功能性和实用性要求,构建其整体架构,方案如图1所示。

图1 系统整体架构方案

其中,数据采集设备通过车辆的OBD接口实时采集CAN通讯报文,并将CAN数据转换为串口数据,并通过无线通信模块发送给Android客户端;Android客户端负责接收和处理外部数据,从而实现报文数据的无线接收、在线解析、自动序列测试、UI页面展示、记录导出的功能[3-4]。

1.2 数据采集设备

数据采集设备包括STM32F407系列微处理器、CAN通信单元、串口通信单元等外围电路,主要实现整车CAN数据的采集、转换和传输。

在初始化阶段,通过轮循的方式配置CAN总线波特率,从而实现自动配置。CAN数据接收部分采用DMA(Direct Memory Access)中断的传输方式,当微处理器检测到CAN数据时触发DMA中断,在中断内读取CAN数据,并按照制定好的通讯协议完成数据编码。串口通信单元和至无线传输模块之间通过AT指令规则进行数据传输,系统在程序中设计并封装了指令解析子函数,用于数据传输调用。

数据采集设备的无线传输通过无线通信模块完成,无线通信模块的主芯片为ESP8266。本系统利用该模块的串口无线模式,将模块设置为WIFI热点,允许其他设备连接到本模块,使数据采集设备与客户端处于相同局域网,实现数据的无线互传[5]。

1.3 序列生成软件

序列生成软件是本系统基于JAVA语言设计实现的独立PC端软件,用于编制和生成测试序列文本。软件框架如图2所示。

图2 序列生成客户端软件设计

测试序列文本是将需要执行的测试以设计好的格式保存的文本,包括一系列对报文信号运算和判断要求的组合集。序列的编制是基于DBC数据库文件,从DBC中选择需要测试的报文及信号,并依次为各测试项选择运算条件以及增加判定逻辑等。为了保证测试文本的编辑错误,分别检查各测试项的完整性和测试项之间的逻辑正确性。对于有误的语句提示修改,直到修改正确才可以生成序列文本。

该软件设计了包含5个功能键的工具栏,功能键分别是导入DBC、添加测试项、删除测试项、语法检测和导出序列。导入DBC用于导入用户目前所测试车辆的DBC文件;添加、删除测试项用于编辑和修改测试序列项;语法检测为用户提示当前的测试语法错误;导出序列用于将用户设定的测试内容编码成序列文本。同时,考虑到序列编辑的灵活性,每个测试项依次由测试指令、测试对象、运算符、运算数、测试延时、备注信息各元素组成,序列生成软件将用户组合好的测试序列以特定格式导出为文本,Android客户端根据相应的格式规则读取序列文本,从而快速解析测试内容,实现自动测试。

1.4 Android客户端

Android客户端软件由输入模块、功能模块和输出模块组成,其框架如图3所示。

图3 APP客户端软件框架

输入模块负责提供接口接收外部数据,例如接收网络通信数据和导入的文件数据;功能模块是客户端的核心模块,软件的无线通信、报文解析、自动测试功能在此模块内实现;输出模块包括人机交互界面的处理,即将报文内容及测试结果输出并展示给用户,以及对数据进行记录和导出。

考虑到Android客户端功能的流畅性,将网络通信、自动测试等具有延时性的工作放在子线程中完成,如图4所示。

图4 Android客户端工作原理

客户端开启并完成初始化后,创建子线程发起服务端的连接请求,建立TCP长连接,从而可以持续稳定地接收数据采集设备无线发送的报文信息。为了确保数据不丢失,客户端会将接收到的数据先写入数据缓存流,再从缓存流中依次拆解报文并校验,将校验通过的报文发送至主线程。报文的解析和界面更新工作在主线程中完成。

客户端对报文的解析基于DBC文件,将DBC底层文件中的报文ID、信号变量等信息按照程序设计好的规则存储在容器中,从而在解析过程中进行检索、解析数据。解析过程中,客户端查找容器中是否存在当前报文ID。如果存在便开始读取解析,不存在则直接返回。解析得到各信号变量值后,查找各信号值是否有对应的含义解释,有则输出含义,没有则直接输出信号值。

自动序列测试基于实时报文解析数据和测试序列集完成,客户端读取测试序列指令,并前往输出数据集中查询相应的信号状态,从而判断测试是否通过[6-7]。

1.5 序列测试算法

图3中的“自动序列测试”中的序列测试算法是实现系统自动测试功能的核心。在安卓客户端实现。

由于测试语句中判断或循环逻辑是由多条语句及判断分支组成的,为了便于测试过程中定位测试项,设计了序列测试算法,流程如下:首先客户端读取导入的测试序列文本,将测试序列文本转化为便于程序读取的测试序列集。测试序列集处理完后,根据不同的指令类型进入不同的测试逻辑。在各测试项后添加标记数,即每个测试项距离逻辑结束的倒计数,这样便于在测试过程中,测试逻辑已满足条件时,可以准确地定位到逻辑外的语句,不需要进行逻辑内剩下的测试语句。当达到结束逻辑的条件后,根据标记数跳出当前逻辑,再进入下一轮的测试,直到测试结束[8-9]。

2 试验验证

2.1 试验方案及准备工作

本文设计的系统功能试验方案如图5所示。系统通过整车OBD接口采集CAN报文,从而验证无线通信和报文的解析功能。同时,使用CANoe工具采集实时CAN数据信号,查看本系统的自动测试结果是否符合原数据变化状态,验证系统测试结果的准确性[10]。

图5 系统试验方案

系统在实车试验之前,首先进行试验室模拟试验,CAN报文发送软件模拟实车发送报文,与系统建立通信并测试功能,初步验证系统设计方案的可行性。

在试验室模拟试验通过的基础上,完成试验车测试,验证系统设计方案的可行性。系统实车试验如图6所示。

图6 系统实车试验

2.2 报文采集功能验证

系统开启工作后,报文采集设备获取整车实时CAN通信报文并发送给客户端,客户端进行报文校验和解码,读取报文对应的时间、信道、ID以及报文信息并显示在客户端界面,部分结果如图7所示。

图7 客户端采集报文

客户端导入试验车所用的DBC,实现报文的在线解析,部分结果如图8所示。解析结果与车辆当前状态一致,表明系统的报文解析功能可靠。

图8 客户端DBC解析结果

2.3 自动测试功能验证

本文以系统的上电逻辑为例验证测试功能,测试流程见表1。

使用序列生成软件按照测试流程依次填写需要测试的内容项。完成填写后,软件检测序列的语法和逻辑,导出测试序列文本。

表1 自动测试内容

客户端导入编写好的测试序列开始自动测试,检测到车辆上电的各逻辑步骤均通过,部分结果如图9所示。

图9 客户端测试结果

同时,使用CANoe 报文监测工具采集实时报文,并查看报文信号的变化曲线,如图10所示。将系统的测试结果与实际信号曲线进行对比,表明系统测试结果无误,并且两者的时间戳一致,验证了自动测试功能具有较高的时效性和准确性。

图10 报文信号变化曲线(CANoe监测)

3 结束语

本文针对目前行业内CAN报文采集设备成本较高、报文分析操作复杂、后期维护困难等现象,提出了一种低成本替代解决方案。通过设计一种Android端CAN总线数据实时解析、自动测试的系统,同时考虑到用户测试需求的不断变化,将测试需求文本化,便于用户根据实际需求自由编制测试序列,实现总线数据自动测试。系统具有便携、低成本、便于维护等优点,并且能够快速定位通讯故障,满足整车下线的实际测试需求。

猜你喜欢
自动测试报文客户端
你的手机安装了多少个客户端
基于J1939 协议多包报文的时序研究及应用
“人民网+客户端”推出数据新闻
——稳就业、惠民生,“数”读十年成绩单
以太网QoS技术研究及实践
基于CANoe的商用车SAE J1939网络自动测试方法
基于Python的汽车CAN总线报文格式转换系统的设计与实现
基于报文类型的限速值动态调整
虚拟专用网络访问保护机制研究
基于Labview与Keithley设备的自动测试系统
新华社推出新版客户端 打造移动互联新闻旗舰