基于Python的汽车CAN总线报文换挡次数统计
2021-12-22李波张建穆勇勇
李波,张建,穆勇勇
西安双特智能传动有限公司 陕西西安 710119
近年来,汽车电子系统的功能越来越强大,其电子控制单元也越来越多。各个控制器之间的信息交换主要依靠车载网络技术,而CAN总线作为车载网络系统的重要组成部分,在汽车电子系统的网络通信与控制中得到广泛应用[1,2]。
为了了解安装自动变速器车辆的运行情况,可以通过采集车辆实际运行的报文并解析报文,分析车辆运行的实际换挡次数。如果依靠人工来统计庞大的采集数据,会消耗大量的时间并且效率较慢。本文旨在开发一种CAN总线数据统计系统,实现自动统计换挡次数,进而解决统计大量数据带来的诸多困难,提高效率。
系统架构
本系统主要由三个功能模块组成,分别为:人机交互、数据处理以及目标结果生成。系统整体流程如图1所示,人机交互主要包括待处理数据路径和系统工作状态的提示;数据处理包括数据提取和Message转换;目标结果生成包括数据重组、数据写入和目标格式文件生成。
图1 系统整体流程
系统功能
Python是一种面向对象的、交互式的、解释型的计算机编程语言,具有实用性强、功能全面、性能高的特点,拥有丰富的标准库和第三方库。本系统基于Python平台,通过面向对象开发方式进行软件开发[3]。
1.人机交互功能
用户将处理数据及软件放到同一个文件夹里面,双击软件系统开始统计换挡次数并且弹出转换进度条界面,提示用户转换进度,如图2所示,当显示100%时,提示用户统计完成。
图2 转换进度
2.数据处理功能
(1)原始报文格式分析 如果需要提取信息功能,首先需要了解原始报文的记录规则。现在以周立功CAN线记录仪采集的“*.asc”格式报文为例进行分析,采集的一段车辆运行报文,如图3所示。
图3 车辆运行报文
每条报文中包含的数据可以分为七组,分组示例见表1。第1组表示帧时间间隔;第2组表示此条报文通道;第3组用于记录帧的报文ID;第4组表示报文传输方向;第5组表示符号d ;第6组表示信息长度;第7组记录帧的数据。
表1 报文数据分组示例
(2)数据处理功能 如图4所示,该模块分为两部分,第一部分将ETC2报文按照一定的规则进行拆分,其拆分信息按照设计的逻辑进行计数。第二部分将其统计次数按照设定格式储存为文本格式。数据处理功能是核心功能。
图4 数据处理模块
3.目标文件生成功能
该模块主要包括数据重组、数据写入及文件生成。系统将数据处理模块生成的通用化信息以参数形式传递给目标格式数据类,目标格式数据类创建目标对象接收通用化报文对象中的数据,并按照规定格式进行组合,组合完成后,将其重组的数据写入文件中。
实验测试
1.实验准备
如图5所示,本文中报文采集的硬件工具为周立功车载CAN-BUS 数据记录仪。车辆为公司通勤班车,如图6所示。
图5 周立功车载CAN-BUS 数据记录仪
图6 实验车辆
2.实验结果分析
通过运行该脚本会生成目标文件.txt,将其内容拷贝到Excel里面得出该工况下车辆整体换挡次数,如图7所示。
图7 该工况下车辆整体换挡次数
结语
本文利用Python语言实现了车辆换挡次数统计的目的,大大减少了人工进行统计的工作量,并且比较灵活,可以进行二次开发(提取其他报文的信息)。经试验测试,本系统能够有效、准确地对其换挡次数进行统计,给数据分析人员提供便利。