陈思涛 吴长水 罗素云
摘 要:为了解决某发动机电子控制单元测试软件的测试效率低下与测试数据管理的问题,本文设计了一种发动机电子控制单元测试软件。软件设计基于模块化思想,利用Windows环境中的C#语言、Visual Studio 2015开发平台和SQL Server 2005数据库,实现了具有测试配置简单、测试数据自动保存、导出等功能的测试软件。软件应用表明,该软件运行稳定、易于操作、提高了发动机电子控制单元测试系统的效率,方便了用户管理数据。
关键词:发动机电子控制单元;测试;数据库;软件
中图分类号:TP311.5 文献标识码:A
Abstract: This paper proposes an electronic control unit (ECU) test software to improve test efficiency and test data management of a certain engine. Based on the idea of modularization, this software is designed by using C# language in Windows environment, Visual Studio 2015 development platform and the SQL Server 2005 database. The completed test software has functions of simple test configuration, automatic test data saving, export, etc. Application results show that the software runs stably and is easy to operate. It helps to improve the efficiency of the engine ECU test system, and facilitate users to manage data.
Keywords: engine ECU; test; database; software
1 引言(Introduction)
隨着技术的发展,电子产品的日益更替,为了验证汽车电子控制单元(ECU)的控制策略逻辑的正确性,保证产品质量,测试是必不可少的环节。ECU产品复杂度越高,测试越复杂,测试需求也就越多,为了确保测试中覆盖所有的ECU工况测试点,人工测试已经远远不能满足,并且人工可能会出现错误,费时费力。因此采用测试软件对测试系统进行测试成为人们关注的热点。测试软件能有效地将人力测试行为转为为机器执行测试,具有节省人工、缩短测试时间、提高测试效率等优点[1-3]。比如,中国西南电子技术研究通过利用QT语言和python语言所设计的嵌入式软件自动化测试及管理系统,有效地提高了测试效率和质量[4]。吉林大学所设计的汽车发动机电子控制单元的测试软件,利用Visual C++6.0和Dreamwaver两款编程软件,结合SCPI指令,提高了发动机ECU测试效率,并可对动态数据进行监控[5]。此外,目前一些测试软件的开发较多利用图形化编程软件LabView和测试管理软件TestStand[6],通过在LabView中调用TsetStand编写的测试序列,从而达到自动测试管理,提高测试效率。
本文通过对测试软件的研究,结合当前应用的发动机电子控制单元测试系统,设计一种测试软件。该测试软件通过前台界面与后台数据库进行信息交互,将数据化的东西转变成图形化按钮,使得测试用例的配置简单易懂,数据方便管理,从而提高发动机电子控制单元的测试效率。
2 设计要求(Design requirements)
发动机电子控制单元(ECU)涉及发动机运行状态,是汽车的核心,其运行状态的复杂性决定了发动机ECU需要测量的工况点数据众多,单一靠人工去测量费时费力。因此通过对前人测试软件的研究,结合目标ECU测试系统,所设计的软件需具备以下要求:
(1)测试用户权限可管理,支持多用户操作,且每个用户的记录可保存;
(2)应有足够的数据空间,可供发动机ECU众多工况点的存储;
(3)发动机ECU测试用例配置简单,测试流程简易;
(4)测试记录数据可保存、查询、导出,方便管理;
(5)测试软件运行稳定,易于维护和升级,界面简洁美观。
3 系统框架设计(System framework design)
发动机ECU测试系统软件的设计主要由六部分组成,分别是用户登录管理、通讯连接模块、测试标准模块、测试数据配置模块、测试执行模块、测试记录模块。软件各模块的编写语言采用C#,它是一个面向组件的程序语言[7],易于学习,易于移植,灵活性高,是微软公司为.NET Framwork量身定做的程序语言。用户的测试数据管理采用SQL Server 2005,有着加密功能,安全性更高,全局搜索性更强,数据存储量更大[8]。此外,软件的开发需要特定的开发环境,采用与C#有着密不可分的Visual Studio 2015平台进行软件开发,Visual Studio功能强大,集成了很多.NET程序,能更好的将C#与.NET Framework进行交互,界面设计直观化、图形化。图1为测试软件的系统架构图。
4 通讯接口设计(Communication interface design)
软件与硬件数据信息的交互,往往需要一定的通讯方式,常见的TCP\IP通讯、蓝牙通讯、CAN通讯等。对于本文所研究的发动机ECU,测试系统采用CAN通讯连接。CAN报文的数据传输是基于一定波特率进行的,报文支持11位标准消息帧和29位扩展消息帧[9]。由于绝大多数测试软件运行在个人电脑上,而自动测试设备往往不具有与个人电脑硬件接口相匹配的CAN接口,无法直接进行CAN报文信息传输。通过选用某型号USB-CAN设备,把CAN报文形式转换为个人电脑可识别的报文信号,从而实现测试软件与测试系统设备的通讯。USB-CAN设备往往提供API和DLL给用户进行二次开发,通过对APP和DLL的调用和程序编写,从而来设计符合用户自身的CAN通讯接口程序。图2为CAN通讯接口设计流程图。
首先使用DWORD CanOpenDevice(DWORD DevType, DWORD DevIndex)函数打开设备,DevType表示设备类型,DevIndex表示设备号;若设备打开成功,使用DWORD__stdcall InitCan(DWORD DevType, DWORD DevIndex, DWORD CANIndex, P_INIT_CONFIG pInitConfig)函数去初始化CAN设备,CANIndex表示第几路CAN,pInitConfig表示CAN报文设置的结构体,定义报文传输形式。结构体内容如下:
{AccCode;AccMask;Reserved;Filter;Timing0;Timing1;Mode;}
AccCode表示验收码;AccMask表示屏蔽码;Reserved表示保留位;Filter表示滤波方式;Timing0、Timing1 组合表示CAN波特率,如Timing0=0x03,Timing1=0x1C,表示波特率为125kbps;Mode表示CAN的模式,包括正常模式、只听模式。
当CAN配置初始化成功,进而使用DWORD__stdcall StartCAN(DWORD DevType, DWORD DevIndex, DWORD CANIndex)函数启动CAN设备;每进行一次函数调用,对返回值ERR_CAN进行判断,查看操作是否成功,不成功则重新执行。
当CAN启动成功,接下来准备CAN信息帧定义,定义一个信息帧结构体CAN_OBJ。结构体内容分别定义了帧ID、时间标识、帧类型、是否为远程帧、是否为扩展帧、数据长度、数据和额外提供的保留位。当登录软件之后,对需要的参数进行定义,启动CAN即可,这就完成了CAN通讯模块的设计。图3为CAN通讯模块界面。
5 数据功能接口设计(Data function interface design)
发动机ECU测试系统的重要一环是体现在数据操作的简单化和数据自动管理方面,优秀的测试软件能够帮助用户节省大量时间去简化测试配置、更改数据和管理数据等。数据功能接口的设计是提供用户在软件界面配置发动机ECU测试工况点的。在Visual Studio 2015平台下,通过微软(Microsoft)公司提供的数据库访问组件和对象的功能[10],可以实现前台界面与后台数据信息的交互,极大地提高了数据交互的能力,因此只要通过数据配置接口和编写相关的数据处理代码,就可完成数据功能接口的设计,从而提高发动机ECU测试系统的测试效率。
5.1 ECU电源管理模块
对于任意自动测试系统来说,能用软件自动完成的就不要用人工去操作。发动ECU测试设备往往需要电源供电,传统的方式是使用人工直接去操作开关电源,这样做既不安全也费时。本文针对发动机ECU测试设备,使用一种串口通讯的方法去控制设备的电源开关。将测试设备电源线连接至程控电源,再通过个人电脑使用USB转RS232去连接程控电源。通过在测试软件中发送串口指令,可以控制电源的通断、电压等,进而实现自动电源管理。图4为自动电源管理示意图。
5.2 测试数据用例模块
由于发动机ECU需要测试点数据众多,简易的测试用例配置能节约大量时间,提高测试效率。因此,该软件通过设计测试标准、配置测试数据、配置分组管理这三步进行测试用例设计。
第一步,测试标准的设计是发动机ECU测试结果的参照,每个测试数据都有一个结果范围,发动机ECU最终的测试结果由测试标准决定。在后台数据库中测试人员导入所有的发动机ECU工况点数据,每个工况点有唯一数据ID,每个数据ID对应不同的测试数据,是后台数据库唯一索引依据。当测试人员建立发动机ECU测试标准时,首先通过建立标准测试ID,此ID由代码自动生成,即为建立一个测试标准总表,这由软件自动完成。在总表里面,通过下拉选项依次选择相应的发动机ECU工况点测试数据,即可完成测试标准的建立。
第二步,测试配置的设计是建立在指定型号发动机ECU测试标准之上,只有在一定的测试标准上建立测试数据配置才是有意义的。用户通过界面下拉选项选择相应测试标准,并命名不同配置名称,不同的配置名称代表不同的发动机ECU工况点数据,然后再通过测试需求选择发动机ECU测试所需全部数据。测试数据是通过发动机ECU信号类别进行分类,方便测试人员快速查找选择数据。
第三步,配置分组管理设计是配置具体发动机ECU测试用例。用户根据第二步配置的发动机ECU数据,输入测试分组名称,再依照某型号发动机ECU测试需求及发动机ECU工作顺序依次选择数据,完成测试用例建立。图5为测试用例设计示意图。
6 执行及测试记录模块(Execution and test recording module)
6.1 执行模块
软件的执行模块和数据记录往往是软件功能强大的体现之一。测试过程需要对测试软件下发的数据和上传到测试软件的数据进行解析管理。首先当下发数据时,执行模块调用底层函数库中ULONG__stdcall Transmit(DWORD DevType, DWORD DevIndex, DWORD CANIndex,
P_CAN_OBJ pSend, ULONG Len)函数,通过USB-CAN传输即可完成测试用例的自动下发。当测试对象ECU及测试设备上传数据时,测试软件需要对数据进行解析。在整个测试执行过程中,當一则CAN信息帧上传到测试软件时,CAN通讯模块自动调用USB-CAN的驱动接收函数ULONG__stdcall Receive(DWORD DevType, DWORD DevIndex, DWORD CANIndex, PVCI_CAN_OBJ pReceive, ULONG Len, INT WaitTime=-1)将接收到的信息帧传递给软件实时监听函数tmrRead_Tick(),进而会自动调用CAN接收函数ReadMessages(),该函数通过读取USB-CAN接收到的报文,将其拆解成各个字段并拼接成字符串,通过函数this.lbxRec.Items.Add(str)赋值给待处理缓存数组lbxRec,为下一次接收准备;然后调用CAN报文分析函数fxMessage(),此函数负责解析报文数据,然后提取出具体数据显示到软件执行界面。同时,在该软件测试执行模块中,还提供程控电源COM,测试用例导入、可视化电压、耐久测试开关等,这些都为发动机ECU测试提供了便利。图6为执行界面。
6.2 测试记录模块
当测试结束时,完整的测试记录的分析、保存和导出功能,可以为测试人员对测试设备进行数据统计和分析提供方便。测试记录保存方式以时间测试序列进行保存,每结束一次测试就保存一次,保存分为主表项保存和明显表保存。当查询记录时,可根据时间日期进行查询,方便快速寻找。查询结果先显示主表项,主表项为发动机ECU测试流水号,当点击某一主表项时,显示对应的测试明细表,明细表记录了测试的配置。当需要导出记录时,软件通过调用第三方插件Interop.Excel.dll可分别导出主表和明细表。同时,测试记录添加了测试分析功能,可以对某时间段的测试对象合格率进行统计。图7为测试记录分析界面。
7 软件应用(Software application)
为了测试软件的运行情况,对某一型号的发动机ECU进行测试。测试人员首先进行硬件连接,包括测试对象连接、测试接口连接和通讯连接;然后开启软件,操作流程如下:用户登录→CAN通讯连接→测试标准配置→测试用例配
置→测试用例选择→测试执行→测试记录查询并分析结果。测试人员按此操作流程只需要关心测试数据的配置,设计好功能测试顺序,确定对哪些功能进行测试,而不需要考虑如何更改数据,如何检测功能。测试软件还支持批量测试,节省了大量的人力。此外,测试完成后,数据可自动保存,方便测试人员查询。应用表明,该测试软件有效地提高了测试效率,节省了发动机ECU的开发周期。表1列出了发动机ECU自动化测试前后对比。分析可知,整体测试效率提高了73.1%。
8 结论(Conclusion)
本文充分利用了Windows平台的C#编程语言、SQL Server 2005数据库及Visual Studio 2015开发环境各自的优点,基于软件设计模块化的思想,从设计需求出发,依次设计了通讯模块、数据模块、执行模块及测试记录模块,最后开发出了测试配置简单,流程操作简便,测试记录自动管理的发动机ECU自动测试系统软件。同时,经过实验證明,该软件能极大地提高发动机ECU自动化测试系统的效率。软件模块化的设计方便后期维护与升级,但是该软件存在的问题是个人电脑必须启用SQL Server服务,否则测试软件将不能使用,这也是该方法设计软件的缺陷。在以后对软件进行升级过程中,将考虑采取其他方法进行数据交互。
参考文献(References)
[1] 陈佐,张怀相,方景龙.嵌入式软件自动化测试技术[J].计算机工程与设计,2018,39(10):3125-3131.
[2] 吕名雪.某嵌入式软件自动化测试平台的设计与实现[D].北京工业大学,2016.
[3] 陶雪华.汽车电子控制器嵌入式自动化测试系统的开发设计[J].内燃机与配件,2018(20):237-238.
[4] 阳长永,王月波,代林.嵌入式软件自动化测试及管理系统研究[J].计算机测量与控制,2019,27(09):57-60;75.
[5] 吴昊,李一鸣,付成伟,等.汽车发动机电子控制单元的自动测试系统开发[J].汽车技术,2014(05):35-39.
[6] 孙立行.基于PXI和虚拟仪器的高压共轨ECU自动测试系统[D].浙江大学,2018.
[7] 于国防,李剑,张玉杰.C#语言Windows程序设计[M].北京:清华大学出版社,2015:2-3.
[8] Devraj, G.P. Dixit, P.K. Katiyar, et al. Design and implementation of on-line data submission and retrieval system for coordinated research trials in food legumes[J]. Legume Research, 2016,39(3):442-447.
[9] 李秀娟,徐惠钢,谢启.基于虚拟仪器技术的发动机ECU自动测试系统[J].机床与液压,2015,43(21):138-141.
[10] Visual Studio Document center[Z]. https://docs.microsoft.com.