基于CAN总线的汽车数据采集系统开发

2019-06-01 03:49邓召文
制造业自动化 2019年5期
关键词:字节总线解析

邓召文,周 围

(湖北汽车工业学院 汽车工程学院 汽车动力传动与电子控制湖北省重点实验室,十堰 442002)

0 引言

CAN(Controller Area Network)即控制器局域网,是几种流行现场总线中应用最广泛的现场总线之一。由于CAN总线采用时间触发协议,在消息传输中采用非破坏性的仲裁机制,保证了数据的完整和系统安全,CAN总线网络已被汽车厂普遍接受,成为车载网络系统的中流砥柱[1]。基于CAN总线对汽车运行数据进行采集可以分析汽车的运行状况,及时发现故障,为检测和故障诊断提供依据,通过对采集数据的分析,发现设计参数的不足,提出改进设计思路,形成分析-改进-分析的闭环设计过程。

华南理工大学开发设计了一套专用的高效、经济、较为准确的离线式数据采集系统[2]。利用专用数据采集芯片对模拟量进行模数转换,由单片机将数据以FAT32格式写入内存卡中,在汽车运行完成后,取下内存卡导出数据到PC机,用数学软件对数据进行显示和分析。武汉理工大学设计了一种基于飞思卡尔9s12单片机的数据采集系统[3]。使用了自定义的传感器对数据进行采集,由单片机进行转换后通过SCI发送给PC机的LabView上位机进行显示,系统优点是可以增加传感器数量和类型。青岛理工大学也采用了单片机采集方案[4]。采用了自定义传感器进行数据采集,利用NRF2401无线模块通过SPI接口与主控芯片连接进行数据传输,数据由上位机进行接收和保存。同济大学设计了一种基于LabView和CAN总线的数据采集监测系统,用于汽车试验时实时监测车辆的运行状态[5]。

本论文利用USBCAN接口卡,实现CAN总线与USB总线间的数据交换。利用LabView调用Dll文件实现对USBCAN卡的配置,包括同步时间、总线速率、滤波方式、CAN卡通道、验收码、屏蔽码等参数,实现接收和发送功能;在USBCAN卡收到数据后根据通信协议解析出对应的数据,实时显示并解析车辆电控系统的状态信息和故障信息;在接收和解析完数据后,根据用户需求实现对汽车实时状态数据的显示、保存与回放等功能。

1 通信协议和软硬件选型

1.1 通信协议

该通信协议包含的信息主要包括以下五部分:1)帧头:一共四字节长度,包含固定的三个标志字节为0x82、0x81、0x80以及一字节的本组数据长度(默认为84个参数);该部分主要用于表示新一组数据的开始,与前一组数据形成分界,防止数据出现混乱;2)数据段:数据共60个,每个数据按高位在前、低位在后分成两字节;包含了发动机以及底盘的部分数据;该部分数据是研究和保存的重点,根据这些数据可以判断发动机及底盘参数的设置是否合理,可能潜在的故障及原因;3)错误诊断信息:共16个数据,每个数据由两字节组成,低位字节的每一位表示一种错误。当某位为1时表示错误发生,为0时表示没有错误;所以每个数据可以表示出8种错误。该部分数据可以作为故障判断的表现判断,也是最直观的故障指示;4)状态信息:共8个数据,每个数据分高低两个字节;低字节的每一位表示一种状态。类似于错误信息,每个数据包可以表示8种系统状态;5)CRC32校验段:该部分按照标准CRC32校验算出每组数据前四部分的CRC32值,分为4字节高位在前低位在后;该部分数据主要作为改组数据是否有效的依据。

1.2 软硬件选型

对CAN总线的数据采集,上位机使用LabView进行编写,通信接口方案需要根据CAN数据由何种总线输入PC机确定。直接利用USBCAN卡将CAN总线数据传输至USB总线,LabView利用CAN卡所附带的驱动程序和动态链接库来实现对CAN卡的设置以及数据获取。所需要的软硬件有:周立功USBCAN-I、USBCAN配套的驱动程序以及动态链接库。

1.3 调用Dll文件实现USBCAN卡配置

LabView在互联接口函数子模板中提供了库与可执行程序,其中,调用库函数节点可以调用厂家提供的dll文件。只要知道动态连接库里被导出的函数名称及其参数,就可以通过调用库函数节点调用,调用dll文件函数的操作步骤为如图1所示。

图1 调用DLL文件函数步骤

图2 Dll调用程序框图

设置完成后连接参数程序框图如图2所示,左侧为输入端,右侧接口为输出端,右侧最上方返回的是一个状态标志,它表示函数操作的结果。要想使用CAN卡必须先打开设备驱动,初始化设备后才能进行其他操作。

2 数据采集系统软件设计

2.1 用户界面设计

设计代码前,首先必须根据课题要求,进行需求分析。LabView由于采用的是G语言,根据经验,所有的数据处理应该围绕用户需求来进行。而用户需求最直观的表现在用户界面[6~8]。根据课题要求,本次设计主要以获取CAN总线数据为主。第一个用户界面CAN助手界面如图3所示,该界面主要设计为CAN参数的设置、CAN卡配置与操作、数据发送等功能。第二个用户界面波形数据显示界面如图4所示,提供了数据显示、曲线(可见性、颜色、校式等)设置、清除图像操作、数据保存、历史数据打开等功能。第三个用户界面仪表界面如图5所示,提供传统仪表界面,与车辆仪表类似的显示内容。第四个用户界面错误与系统状态显示界面如图6所示,提供原始的英文错误和状态显示,这些提示和状态信息对于后期车辆诊断有很大帮助,有必要进行解析和显示。

图3 CAN助手界面

图4 数据波形界面

图5 仪表显示界面

2.2 代码主体架构设计

根据课题要求分析,该软件主要以数据采集为主,所以数据必须完整且具有一定的实时性,对用户操作响应必须及时。为了满足要求,在整体结构上采取并行循环的生产者与消费者循环[9~11];其中生产者有两个,第一个生产者(CAN数据的接收)独占一个循环,保证数据尽可能实时接收;第二个则是为响应前面板操作动作的状态生产者。由于数据显示为波形和在助手模式下表格显示对数据处理较慢。所以,设计了两个时间占用接近的消费者循环。其中,一个消费者循环处理助手模式下表格显示数据以及部分CAN操作产生的动作响应;另外一个消费者循环主要处理耗时的数据保存和波形显示处理。各循环关系如图6所示。

图6 立体框架设计图

2.3 功能代码设计

2.3.1 波形图数据显示方案

根据课题要求,本次数据显示数据量可以达到60条曲线,且实时显示;根据波形图表和波形图区别,必须选用波形图;波形图由于没有数据缓冲区,要显示数据必须自建一个FIFO的数据缓冲区;最简单的办法是利用二维数组配合删除数组元素来构建这个缓冲区。最后输出这个数组即可,FIFO缓冲区如图7所示。

图7 FIFO缓冲区

2.3.2 数据解析方案

数据的解析是比较关键的一个部分,数据解析要求不能重复解析,数据在正确的情况下保证完整。由于汽车的仪表数据流公用一个数据帧地址,没有可靠的帧标识,所以只能根据帧头信息来确定每组数据的开始,也相当于组同步信号。每组数据从帧头开始累加帧数,根据帧数和字节顺序确定数据位置和数据类型,然后对数据复原。

除帧头包含的两个数据外,其他数据的计算公式为:

其中:

Dk为第k个需解析的数据;

Zij为第i帧的第j字节。

数据提取解析步骤和解析代码分别如图8、图9所示。

图8 数据提取解析流程图

图9 数据解析代码

2.3.3 文件保存方案

文件的保存基本要求是数据的完整性,只有数据完整,才能保证数据在下次打开时不出现失真;数据保存必须尽可能快,数据的保存不能对数据的传输、解析、显示造成用户可感知的影响;另外,由于汽车的CAN速率为1Mbps,每秒钟发送50组数据,每组数据22帧,每帧8字节。折算平均速率为8.8kb/s,由于数据量不是太大,故可以边接收边保存;但是考虑到数据保存耗费的时间较长,不能按帧保存。所以,考虑每接收完一组正确的数据后保存一次。根据LabView对数据保存的速度来看,保存为二进制文件是最快的。为尽量保证程序的流畅性,选择保存为二进制文件。如图10所示为数据保存代码。

图10 数据保存代码

2.3.4 错误与状态信息解析

提取状态信息和错误信息可将两个组分开提取,由于LabView可以自己并行处理数据,分开提取可以节约2/3的时间。所以在程序设计时将两者分开处理。

错误与状态信息数据与其他参数数据不同,参数数据是连续不可突变且仅代表唯一含义的参量。而状态和错误信息的数据是分立的数据,不同的值包含了一种或多种状态或错误。根据通信协议中可知:状态错误数据的每一位(化为二进制)代表了一个错误状态的有无,当某位为1说明对应的错误或状态存在,为0则不存在。

由于状态错误信息数据的这种特性,所以需要检查数据的每一位是否为1。然后查表得对应位进行文字的提取。检查数据位可以使用循环移位法,但LabView中不支持取数据特定位的操作。为实现取位,设计了除2取余法判断最低位是否为1,商作为下一次取位的被除数。进行7个循环即可取出每一位的值(虽然是双字数据,但仅用了低字节最大255)。最后将信息输出。

信息表和程序代码如图11所示。

图11 状态信息表及错误处理代码

3 试验验证

软件在初步调试完成之后需进行稳定性和可靠性验证。稳定性验证需要大量时间满载运行,以检验是否能长时间正常工作,采用模拟实验检验。可靠性检验需要验证数据的准确性,需要与仪表进行对比,采用现场试验。

3.1 模拟试验检验

为了提高试验效率,方便离车调试,减少实车调试次数。编写代码写入STM32开发板内,实现下位机部分模拟试验汽车CAN通讯向USBCAN发送有规律的数据,进行稳定性耐久测试。其硬件连接示意图如图12所示。

图12 模拟试验的硬件连接示意图

图13 模拟测试结果

进行了约30分钟的模拟测试后,大约采集了15MB的数据,密集的波形图在局部放大后数据依然完整。测试结果如图13所示。由模拟测试结果可知,数据完整,波形图流畅(正弦曲线,主要检验完整性,如果数据有丢帧波形会有畸变),满载荷运行测试符合基本要求。

3.2 现场试验

确认程序在模拟试验时依然可以较为流畅的运行后,再进行现场数据采集试验,并与实车仪表对比,以验证程序的可靠性和准确性。按照硬件连接规范连接好实物后开始采集数据。观察仪表盘上发动机转速,记录怠速工况下的转速在1600r/min附近,其波动范围约200~350,另外还对比了进气温度、节气门开度和进气歧管压力等这类变化较慢的参数。现场试验连接及观察软件现场测试结果如图14所示。从现场测试图可以看出,转速在1600r/min附近,波动范围在200~350与仪表观测结果吻合。节气门开度保持稳定的怠速开度(约12%),进气温度约23℃,进气歧管压力约90kPa小于大气压力(正常)。根据以上内容的对比,可以判定数据是准确的。

图14 现场试验连接及现场测试结果

4 结束语

1)利用CAN接口卡,完成了CAN总线网络的连接和汽车运行数据状态的实时读取。

2)完成了LabView软件对CAN总线通讯和数据采集系统的开发,实现实时提取并解析车辆电控系统的状态信息和故障信息。

3)实现了汽车状态信息的提取、报警和存储,完成车辆运行状态的实时监控功能。

4)经验证系统稳定可靠、操作简单、界面直观,具有一定的应用价值。

猜你喜欢
字节总线解析
No.8 字节跳动将推出独立出口电商APP
三角函数解析式中ω的几种求法
No.10 “字节跳动手机”要来了?
轻量级分组密码Midori64的积分攻击
一种基于CAN总线的误码测试方法
睡梦解析仪
电竞初解析
对称巧用解析妙解
CAN总线并发通信时下位机应用软件设计
基于CAN总线的水下通信系统设计