基于Python的CAN网络数据库管理分析
2023-09-19蓝启亮吴光耀
蓝启亮,吴光耀,王 帅,陈 聪
基于Python的CAN网络数据库管理分析
蓝启亮,吴光耀,王 帅,陈 聪
(比亚迪汽车工业有限公司 产品规划及汽车新技术研究院,广东 深圳 518118)
为高效管理车辆系统控制器局域网(CAN)网络数据,基于对CAN网络数据结构的研究及车载嵌入式软件开发测试经验的积累,提出一种基于Python的CAN网络数据库管理平台的方法,实现多种格式CAN网络数据库文件的导入、数据编辑、数据自动校验、数据自动对比和CAN网络数据库文件输出,解决了当前主流CAN网络数据库管理工具编辑效率低、人工校验和比对数据易出错的缺陷,有效提高CAN网络开发及CAN网络各个节点控制器软件开发的效率。
CAN网络数据库;数据抓取;Python
控制器局域网(Controller Area Network, CAN)网络数据库文件定义了CAN网络中各个控制器节点报文信号信息,是CAN总线网络通讯的密码本[1-2]。在实际的车型研发项目中,CAN网络数据库随着车型项目的推进逐步完善和迭代,各个控制器的数据收发模块必须严格遵循正确定义的CAN网络数据库进行开发,方可保证项目的安全推进[3]。
当前CAN网络数据库的管理一般以Excel表格管理*.xlsx格式文本的形式或者Vecotor公司开发的CANdb++工具管理*.dbc格式文本的形式进行CAN数据定义和编辑[4-5]。随着汽车电动化、智能化的发展,CAN总线数据越来越多,当CAN网络数据库文件进行变更时,各个控制器软件开发工程师需要使用Excel或者CANdb++工具手动逐个筛选、检查和比对CAN总线数据然后再对嵌入式软件CAN通讯模块中的C代码进行逐一修改,如此逐个手动修改CAN报文信号重复低效的劳动方式特别容易出错且出错后不便于定位查找问题。
对于采用CAN通讯的汽车嵌入式软件开发过程而言,软件运行时环境(Run Time Environment, RTE)层CAN通讯数据交互定义方法固定,完全可以从嵌入式软件RTE层抓取控制器中实际定义的CAN网络数据,与系统输入的CAN网络数据统一实现同平台工具管理:通过正则匹配的方式可以从嵌入式运行时环境RTE层C代码或其他类文本格式的CAN网络数据库文件中获取CAN网络数据库信息,利用统一的用户图形界面(Graphical User Interface, GUI)把不同版本的CAN网络数据显示在一个界面内,软件开发人员只需要通过操作控件即可实现不同版本CAN网络数据的导入、编辑、校验和对比,操作便捷高效,开发人员可以从低效重复的工作中解脱出来,把更多精力放到应用层策略开发中。
1 CAN总线与CAN总线数据库
1.1 CAN总线
CAN是由博世公司开发的一个汽车计算机控制系统和嵌入式工业控制局域网的国际通用总线协议[6-7]。CAN总线是一种基于消息的广播式的串行通信总线协议,属于多主控的总线系统。为实现CAN报文的发送与接收,各个控制器在RTE层软件需要实现CAN总线数据的打包、解包、发送和接收等功能[8]。
1.2 CAN总线数据库
DBC(Data Base CAN)文件是Vecor公司开发的用来描述单一CAN网络配置信息的一种特定格式文件,通过CANdb++数据库管理工具进行编辑管理,内容包含CAN总线上各个控制器节点信息、报文信息和信号信息,它可以被专业CAN测试工具识别,用来监测与分析CAN网络上的报文数据,也可以用来模拟仿真某个CAN节点,是总线开发的重要输出物,是软件开发和软件测试的重要参考。其主要内容包含但不限于如下:
1)节点(Node):定义在CAN总线上的所有接收方或发送方,节点名唯一;
2)报文(Message):报文是CAN网络中交换与传输的数据单元,即接收方或发送方一次性要交流的数据块。在DBC文件中,报文含有报文ID(MsgID)、数据长度(Dlc)、发送周期(Cyctime)等信息;
3)信号(Signal):信号是报文数据段的基本单元,在DBC中主要参数包含信号名(Signal)、起始位(Startbit)、信号长度(Length)、因子系数(Factor)、偏移量(Offset)等信息[9-10]。
DBC文件仅能表达单一的CAN总线数据,且当报文帧数据长度超过8个字节时无法通过CANdb++进行编辑[11-12]。在实际工程项目中,对于多路CAN网络数据的管理和含有多帧总线数据的数据库管理通常以自定义的Excel表格进行数据管理,由于Excel的局限性,无法通过Excel自动对比两份不同的CAN总线数据的差异。
不论DBC文件格式的CAN网络数据库文件或者Excel文件格式的CAN网络数据库文件抑或是RTE层代码中开发的CAN网络数据,其实质都是一个或多个储存了CAN网络通信规则的文本文件,其中的字符包含了关键的节点、报文和信号三大部分的信息,且这些信息都是按照固定的规则进行组织。本文通过对不同格式的CAN网络数据库文件规则的分析,基于Python开发了一个DbcManager网络数据库管理平台,快速识别并抓取不同格式的CAN网络数据库文件信息,通过SQLite数据库和PyQt实现对CAN网络数据库文件数据的增删查改等数据管理;开发数据校验算法实现CAN报文信号数据的基本校验;开发数据比对算法实现同格式版本不同CAN网络数据库变更的比对和不同格式版本不同CAN网络数据库变更的比对,有效提高嵌入式软件开发效率,减少人工错误的引入。
2 基于Python的DbcManager网络数据库设计
为了解决CANdb++或Excel管理CAN网络数据编辑效率低、不能校验、无法对版本进行比对等难题,本文基于Python开发了一个运行于Windows操作系统上的DbcManager网络数据库管理平台,集成CAN网络数据读取、编辑、校验、比对、输出等五项主要功能,所有的功能集中显示在一个GUI界面中,其功能架构如图1所示。
图1 CAN网络数据库管理平台
1)CAN网络数据读取:支持从嵌入式软件RTE层代码中抓取CAN总线数据、读取标准dbc格式CAN总线数据和导入Excel格式总线数据共三种方式。
2)CAN网络数据编辑:对数据的整理和结构化处理后显示在GUI中,通过检索算法和数据的树结构方法实现数据的便捷查询和编辑。
3)CAN网络数据校验:对CAN网络数据信息按照Channel/Msg/Signal数据的基本规则进行数据检查,输出校验分析报告。
4)CAN网络数据比对:支持不同版本的CAN网络数据的比对,输出比对分析报告。
5)CAN网络数据库文件导出:CAN网络数据读取的反向操作。
2.1 CAN网络数据库管理平台的GUI界面开发
CAN网络数据库管理平台的GUI界面由菜单栏、工具栏、数据栏和状态栏组成,如图2所示。
菜单栏:负责完成导入数据的功能,导入的格式包括*.xlsx格式的Excel网络数据库文件、*.dbc格式的DBC网络数据库文件和嵌入式软件的路径。
工具栏:负责完成对数据的编辑功能,可以插入数据、修改数据、删除数据、筛选数据、保存数据以及检查CAN网络数据库等。
数据栏:数据栏中包含网络(Channel)、报文(Msg)和信号(Sig)的具体信息。
状态栏:显示当前GUI界面中导入的数据来源以及当前数据栏中网络(Channel)、报文(Msg)和信号(Sig)的数量。
图2 GUI界面
2.2 CAN网络数据库的导入
为了满足*.xlsx、*.dbc和嵌入式软件RTE层代码路径三种不同格式的CAN网络数据库导入,基于正则匹配开发不同的算法抓取不同格式的CAN网络数据库文件中的CAN网络数据库信息,再通过统一定义的*.json文件整理抓取到的数据,最后将*.json数据插入到数据库中,由用户操作GUI界面与数据库进行交互并将所需数据显示在GUI界面上,如图3所示。
图3 导入数据的方式
抓取C文件格式的CAN网络数据库数据和抓取*.dbc格式的CAN网络数据库数据的方式原理基本一致,本质上都是将文本文件读取到内存中,然后采用特定的正则匹配方法获得所需数据。抓取*.xlsx格式的CAN网络数据库数据的方式也类似,唯一的区别是加载的数据来源于表格,通过openpyxl库可以定位到所需的sheet和cell完成数据的逐个读取并整理到*.json数据结构中。
统一的*.json数据结构不仅需要映射完整的CAN网络数据库字段以适配不同格式的CAN网络数据库数据,并且考虑到CAN网络数据库数据之间有明显的内在层次和逻辑,通过多表外键级联的形式实现CAN网络数据库网络、报文和信号的关联,将*.json文件分为Channel.json、Msg.json和Signal.json三个文件对CAN网络数据库数据进行本地化的临时存储,每个json文件由若干个数据字典组成,每个字典对应的关键字如表1所示。
表1 *.json数据字段定义
序号Channel.json数据字段Msg.json数据字段Signal.json数据字段 1ChannelnameMsgnameSigname 2Cantypebl2_ChannelMsgID 3 MsgIDMulti_ID 4 Dec_MsgIDStartbit 5 DLCLength 6 Rx_or_TxByte_Order 7 CyctimeValuetype 8 Factor 9 Offset 10 Min 11 Max 12 Unit 13 Receiver 14 Startvalue 15 Comment 16 Valuetable 17 Start_Pos 18 End_Pos
2.3 CAN网络数据库数据管理的实现
SQLite数据库是一个轻量级的开源数据库系统,以其单一的磁盘文件形式、零配置的使用前提和简单易用的特性广泛应用在桌面应用程序的数据管理项目中。在本文的CAN网络数据库管理平台同样采用SQLite数据库对CAN网络数据库数据进行管控,自主开发了一系列的应用程序编程接口(Application Programming Interface, API)函数,便捷地实现*.json数据的批量导入以及与GUI界面控件的数据交互,实现数据的增删查改,在GUI界面上显示用户需求的CAN网络数据库数据。
为了将*.json数据文件中的字典数据集高效地导入SQLite数据库,开发了*.json矩阵数据批量插入到SQLite表中的算法,其运作方式如图4所示。首先确认*.json数据文件是否存在,若存在则读取*.json数据至内存,然后以*.json文件名在SQLite中创建对应文件名的数据表,以字典关键字为创建数据表的列标题,若*.json中的字典数据完整有效,则向SQLite发送插入数据的SQL指令,完成数据插入工作。
图4 数据库的创建
与*.json数据文件对应,SQLite数据库中使用三个数据表分别存储Channel、Msg和Signal的各个属性信息,如图5所示。
图5 CAN网络数据库SQLite数据库
2.4 CAN网络数据校验
为了避免CAN网络数据库源文件自身存在的信息错误或使用CAN网络数据库管理平台编辑CAN网络数据时引入的信息错误,开发了校验算法对CAN网络数据的一些属性进行必要的检查,校验项目如表2所示。
表2 自动校验内容
序号内容对象 1info_loss_checkChannel/Msg/Sig 2value_error_checkSig 3bit_repeat_checkMsg/Sig
info_loss_check:分别将Channel/Msg/Sig中不可或缺的CAN网络数据信息进行简单的非空校验,当信息缺失时记录在报告中。
value_error_check:仅对info_loss_check校验数据完整的Sig数据对象进行校验:
1)依据Signame字段中涵盖的信号起、止位与Startbit字段和Length字段进行校验,Signame字段描述的起/止位应该与Startbit和Length描述的字节位一致;
2)依据Signame字段中涵盖的信号起/止位和Startvalue字段、Min字段、Max字段、Valuetype字段、Offset字段、Factor字段进行校验,计算的物理最值应该Min字段和Max字段范围内,Startvalue也不能超过该范围。
bit_repeat_check:对隶属于每一个Msg的Sig对象进行bit位重复定义校验,每一个bit位只能被一个Sig信号定义。
校验不通过的数据在GUI中会标注为红色,在GUI中的状态栏会显示错误数据的个数以及错误数据所在的Tablewidget。通过工具栏的上一个错误按钮控件或下一个错误按钮控件,可以在数据栏中快速跳转到错误数据行,用户需要对错误信息进行修改并保存数据后,才可以进行CAN网络数据库文件的生成。
2.5 CAN网络数据比对
CAN网络数据库文件定义了整个车型CAN总线上交互的各个节点报文信号的信息,是车辆嵌入式软件开发与测试的密码本。然而在实际车型项目的研发过程中,CAN网络数据会随着车型项目开发进展不断地完善与变更,各个控制器嵌入式软件CAN通讯模块代码也需要随之做出对应变更修改。对嵌入式软件开发人员而言,明确每次输入的CAN网络数据库文件的变更内容以及CAN网络数据库文件与当前嵌入式软件CAN通讯模块代码中的CAN网络数据的差异,是极其繁琐而又十分重要的内容。
DbcManager支持DBC格式导入、Excel格式导入和嵌入式软件RTE层代码中抓取共三种方式获得CAN网络数据,导入DbcManager的CAN网络数据经过结构化整理后以*.db3存储在SQLite数据库中。对两个不同的CAN网络数据库比对流程如图6所示。
图6 CAN网络数据库比对流程
选取两个待比对的CAN网络SQLite数据库A.db3和CAN网络SQLite数据库B.db3,分别从中反向导出json格式数据文件Channel.json、Msg.json、Sig.json。
分别遍历两份Channel.json、Msg.json、Sig. json中的每一个数据对象获得两份CAN网络数据的差异信息,差异信息内容包含内容增加item_ added、内容删除item_removed和内容变更values_ changed,依据差异信息自动生成比对报告。
2.6 CAN网络数据库文件导出
CAN网络数据库文件导出即导入CAN网络数据的反向操作。在CAN网络数据库管理平台GUI的菜单栏可以选择*.xlsx格式、*.dbc格式和*.db3格式进行CAN网络数据库文件的输出。为了避免输出的CAN网络数据库文件存在低级的数据错误,在生成CAN网络数据库文件之前会自动调用校验程序对数据库中的CAN网络数据库数据进行检查校验,若不存在错误则生成指定格式的CAN网络数据库文件,否则提示“对错误信息进行修改后再执行该操作”。
3 项目应用
本文基于Python开发的DbcManager是一个运行于Windows环境的图形用户界面可执行程序,可以便捷地加载不同格式的CAN网络数据库文件进行编辑、校验和不同CAN网络数据库之间的数据比对。下面以一个实际工程应用进行详细说明。
使用DbcManager导入某项目系统工程师提供的DBC文件进行校验,自动生成校验报告;再使用DbcManager读取某控制器嵌入式软件代码中的CAN网络数据和该DBC文件CAN网络数据进行比对,自动生成比对报告。
导入的DBC文件CAN网络数据如表3所示,包含4个DBC文件,共126个报文信息和1 220个信号信息。DbcManager校验后生成的测试结果显示共有43个信息存在数据值不正确,共3个报文信号存在Bit位重复定义,如图7所示。
表 3 DbcManager校验功能基本信息确认
测试人员测试项目数据来源基本信息 DbcManagerCAN网络数据校验D:/总线网络协议.dbcChannel:4Msg:126Signal:1 220
在DbcManager中选择两份CAN网络数据库进行数据比对,基本信息如表4所示。点击开始比对按钮后,将分别遍历两份数据库中Channel、Msg和Sig中各个字段的差异,自动生成的部分测试报告如图8所示。
表4 DbcManager比对功能基本信息确认
测试人员测试项目数据来源A数据来源B DbcManagerCAN网络数据比对D:/总线网络协议.dbcD:/Project/BSW
图8 DbcManager比对结果
4 总结
本文研究了一种基于Python的DbcManager CAN网络数据库管理平台,通过构建不同算法适配不同格式的CAN网络数据库信息导入,通过SQLite数据库完成对CAN网络数据信息的统一管理,开发桌面用户端集成数据抓取、数据编辑、数据校验以及CAN网络数据库文件的生成等功能。实践表明,DbcManager人机界面友好易于使用,多种方式筛选CAN网络数据库数据,编辑数据方便快捷;自动校验数据,自动比对数据,减少人为操作,降低出错风险,极大地提高了工作效率,对CAN网络的开发和CAN网络各个节点控制器软件的开发有高效的辅助作用。
[1] 陈颖,钟成,李兴华,等.自适应的车内CAN总线安全机制[J].信息安全研究,2019,5(12):1076-1088.
[2] 胡志云.基于CAN总线在车辆中的应用[J].山西电子技术,2020(1):59-60,64.
[3] 马建辉,胡代荣,郭坤.一种汽车CAN总线网关的报文接收和发送方法[J].现代电子技术,2018,41(11):5- 7,12.
[4] 方遒,姜瑜涛,张晓先,等.汽车电子基础软件标准体系研究[J].信息技术与标准化,2011(8):30-33,38.
[5] 江永聪.基于DBC的汽车CAN报文远程采集与分析系统设计[J].电子技术与软件工程,2014(14):203-204.
[6] 陈琪晟.基于DSP的CAN总线通信程序[J].铁路通信信号工程技术,2015,12(2):43-48.
[7] 王永辉.CANoe在整车系统开发测试中的应用[J].汽车实用技术,2019,44(16):85-87.
[8] 恽海,曹莹.2011年CAN总线车身控制系统需求与行业发展分析[J].汽车工业研究, 2012(6):33-37.
[9] 何晔.CAN总线报文丢失故障及其判定方法[J].科技视界,2015(33):126.
[10] 江永聪.基于DBC的汽车CAN报文远程采集与分析系统设计[J].电子技术与软件工程,2014(14):203-204.
[11] International Organization for Standardization.Diag- nostics on Controller Area Networks (CAN) Part2: Network Layer Services:ISO 15765-2:2004[S].Genève: ISO,2004.
[12] Vector Informatik GmbH.User Manual Function Ver- son1.1[EB/OL].(2012-10-05)[2022-11-16].https://cdn. vector.com/cms/content/products/vtsystem/Docs/VT_System_Manual_VT7820_EN.pdf.
Analysis of CAN Network Database Management Based on Python
LAN Qiliang, WU Guangyao, WANG Shuai, CHEN Cong
( Product Planning and Automotive New Technology Research Institute, BYD Automobile Industry Company Limited, Shenzhen 518118, China )
In order to efficiently manage the controller area network(CAN) data of vehicle system, based on the research of CAN network data structure and the accumulation of experience in the development and testing of on-board embedded software, a method of CAN network database management platform based on Python is proposed to realize the import, data editing, data automatic verification, data automatic comparison and CAN network database file output of various formats. It solves the defects of low editing efficiency of the current mainstream CAN network database management tools and the error prone to manual verification and comparison of data, and effectively improves the efficiency of CAN network development and CAN network node controller software development.
CAN network database; Data capture;Python
U469.7
A
1671-7988(2023)17-42-07
10.16638/j.cnki.1671-7988.2023.017.008
蓝启亮(1993-),男,硕士,研究方向为嵌入式软件开发与测试,E-mail:lamnas@126.com。