刘杰畅,黄兵锋,罗永革,李峥,盛俏,杨芸芸
(1.湖北汽车工业学院 汽车动力传动与电子控制湖北省重点实验室,湖北 十堰 442002;2.东风汽车集团股份有限公司 技术中心,湖北 武汉 430056)
汽车性能仿真中批量数据交互方法研究
刘杰畅1,黄兵锋1,罗永革1,李峥2,盛俏2,杨芸芸2
(1.湖北汽车工业学院 汽车动力传动与电子控制湖北省重点实验室,湖北 十堰 442002;2.东风汽车集团股份有限公司 技术中心,湖北 武汉 430056)
在汽车性能仿真平台开发过程中,经常涉及跨平台的数据传输问题。以C#为人机交互界面,调用Simu⁃link整车模型的并行开发模式,在减少代码耦合性的基础上,充分发挥Winform的UI界面优势和Matlab的强大仿真功能。基于这种开发模式,对车辆性能仿真中的数据传递特点进行分析,提出利用C#反射机制来实现Visio Studio与Matlab平台之间的数据交互。结果证明此方法能精简代码,使数据传输自动化,便于数据管理。
汽车性能仿真;批量数据交互;反射
Matlab/Simulink软件具备强大的仿真功能[1],是在对汽车控制策略研发、性能仿真时常用的核心软件,其计算选项和输入输出参数成百上千,为便于使用计算功能和管理数据,尤其是为不熟悉Mat⁃lab/Simulink的工程师提供便利,需要同时开发一套交互界面。Visual C#提供了强大方便、资源丰富的交互界面开发功能[2]。以C#平台下的Win⁃form应用程序为界面,后台调用Simulink平台下的S-function仿真内核,可以将2个软件的优势互补,在友好的人机交互基础上保证了仿真功能的全面性和精准性。这种将界面与仿真内核独立并行开发的模式,减少了代码耦合性,便于后续的仿真功能扩展和升级。仿真过程中涉及车辆模型数据、仿真任务数据、性能指标结果以及道路工况下的仿真曲线,上述数据均需要在界面与内核之间反复交互,跨平台的数据传输成为难点。
C#与Matlab的混合编程,有COM组件、Net组件、Matlab Engine等多种实现方式[3],文中采用COM组件方式。
由于汽车构型发展较快,国家法规标准不断更新(尤其是乘用车企业平均燃料消耗量(CAFC值)有关标准),软件算法也有待持续改进,出于对核心算法保护、更新、扩展的考虑,将Simulink S-function编写的核心算法编译为mex文件格式(*.mexw32或*.mexw64)随软件发布。在调用时,通过引用Matlab COM组件,访问Matlab内置函数,即利用.NET环境的Runtime Callable Wrapperm(RCW),将COM组件提供的COM接口转换为与.NET框架兼容的接口,使托管客户端(C#)在调用一个COM组件时认为是在自身的环境中调用对象,而不需要处理COM特性[4]。实现步骤如下:
1)添加COM(Matlab Application(Version 7.11)Type Library)引用。加入对程序集文件“MWArray.dll”引用,并加入命名空间:
利用Matlab COM组件中的函数执行Matlab命令,常用的函数及功能如表1所示。
软件主界面如图1所示。软件根据用户选择的车型平台及车辆配置,将与之匹配的输入输出量与S-function仿真内核进行数据交互。
表1 C#与Matlab通信的常用函数[5]
图1 汽车性能仿真软件主界面
汽车种类繁多,仅普通乘用车,为计算动力性与经济性,分为传统燃油车、纯电动车、燃料电池、混合动力车、其他能源车等;而混合动力汽车根据动力系统结构形式和电机种类、数量,又可分为数十种。每个公司每年推出不同配置的各型号车,还会进行各种改款。因此有必要利用数据库管理庞杂的车型参数,同时搭建用户界面便于查阅、修改、调用。数据库中车型列表如图2所示。
图2 从车型数据中选取车型
仿真软件中的数据传递具有以下特点:
1)数据传输的针对性 对于通用的仿真内核,需要根据用户选择的平台及车辆构型传输与之匹配的数据,同时过滤掉与该车型无关的数据。
2)数据传输的批量性 在汽车性能仿真时需要将数据从界面传递给仿真内核,并将结果传回显示界面。所传递的数据涉及车辆模型参数(图3)、仿真任务指令、性能指标结果以及道路工况下的仿真曲线(图4),传输的数据量十分庞大。
3)数据结构的复杂性 汽车由动力总成(发动机、电池电机)、传动、转向、制动及电气系统组成,构造复杂。在汽车仿真时,所有的数据都由一个“整车(Car)类”处理;在整车类内部,根据各参数的物理意义将其归属到以下几个总成类:整车基本参数、发动机、变速箱、电机、电池、驾驶员参数、控制策略参数类等,以便在人机交互时更方便地匹配数据。而且,根据当前车型配置的实际,各个总成类也派生为很多子类,对应的类结构如图5所示。汽车性能仿真类结构图中的参数见表2。
4)参数的可扩展性 汽车性能仿真时会随控制策略的变化或未来车型配置的变化添加或删除仿真变量,因此在数据管理时必须考虑参数的可扩展性,做到预留接口和统一管理。
图3 车型参数页面
图4 仿真曲线选择页面
图5 汽车性能仿真类结构图
表2 Car类及其成员说明表
鉴于汽车性能仿真过程中,参数传递的针对性、批量性、复杂性和软件可扩展性,使用指令逐句传递成千上万个变量到Matlab,既不便于数据管理也不利于程序的后期维护。将C#中类对象属性和反射机制结合起来,可有效解决上述问题,即实现指定类别下的变量自动化传输,将传递过程中,变量的操作转换为类别的操作,后续软件维护或升级时,若添加或删除某个变量,只需修改类中的属性定义,不必再修改程序中的数据传输代码。
反射是.Net中获取运行时类型信息的方式。反射可以动态地创建类型的实例,还可以将类型绑定到现有对象,或从现有对象中获取类型。然后可以调用类型的方法或访问其字段和属性[6]。在引用System.Reflection命名空间之后,可调用Assem⁃bly类、Type类、PropertyInfo类等。其中Assembly类是一个包含程序的名称、版本号、自我描述、文件关联关系和文件位置等信息的一个集合[7]。Type类可以获得对象的类型信息,此信息包含对象的所有要素如方法、构造器、属性等等,通过Type类可以获取并调用这些要素的信息。MethodInfo包含方法的信息,通过此类可以得到方法的名称、参数、返回值等。
在C#与Matlab的数据交互过程中,需要将输入类和结果类中的属性的变量名和值进行一一对应的传输。对于属性数量庞大的类,将遍历与反射机制结合起来,先利用反射获取一个类的属性集合,再遍历集合中的每个属性分别获取其Name和Value,执行变量的传递工作。主要代码如下:
此方法适用于C#类的属性的批量传输,相比于手动代码对每个属性进行逐个传输,遍历反射机制能够显著地精简代码,只要类的属性定义准确,便可有效避免人工代码的疏漏和错误。数据传递时的变量通用化是此方法最大的优点,不需要针对某个具体变量执行传输命令,而是利用反射遍历,系统自动将变量类中的数据进行传递。数据传输时只需指明需要传递的变量类;管理变量时只需修改变量类中的属性。
由于启动Matlab/Simulink的过程较长、耗费资源较多,联合开发得到的软件在第1次调用Matlab时无法及时响应用户的其他操作,造成假死现象。但是在Windows预读取技术的帮助下,第2次调用Matlab时速度将大大提高。因此自编软件可以在空闲时提前启动Matlab。较好的方式是,在一开始启动软件时,通过多线程启动Matlab/Simulink,正式的仿真计算时就能做出及时的反应。为此,创建一个委托StartMatlab,并通过该委托的实例start⁃Mat调用启动过程CallMat。下述代码为调用万有特性计算子程序启动Matlab。
新创建的线程作为后台线程,其优先级较低,避免占用过多的系统资源、干扰用户其他操作。
文中对涵盖传统车、纯电动汽车、混合动力等车型的通用汽车性能仿真平台开发过程中存在的数据交互特点进行了分析,提出了利用反射机制与属性相结合的解决方案,使数据传输通用化、自动化,避免了针对个体参数进行传递的高复杂度和易错性,能够有效精简代码,统一管理数据;提出了运用多线程的方式,节省了仿真过程中Matlab软件的启动时间,从而对软件运行速度进行了优化。
[1]吕科,罗永革,张光德,等.柴油机电控单体泵高速电磁阀驱动设计[J].湖北汽车工业学院学报,2011(4):8-10+27.
[2]石超.基于Winform的发动机ECU测试系统开发[D].长春:吉林大学,2015.
[3]姚光强,陈立平.基于COM技术的C#与Matlab混合编程[J].计算机工程,2008(14):87-89+94.
[4]张燕,马永杰,袁秋林.Visual C#与Matlab混合编程方法及其实现[J].西北师范大学学报(自然科学版),2008(6):35-37.
[5]MathWorks.MATLAB COM Automation Server[DB/OL].(2017).[2017-06-21].http://cn.mathworks.com/help/matlab/call-matlab-com-automation-server.html.
[6]陈海燕,朱宇来,林阳,等.利用反射技术实现程序结构优化设计[J].科技资讯,2014(28):21+23.
[7]陈浩.ABP框架的体系结构及模块系统分析[J].电脑知识与技术,2016(32):45-46.
Research on the Method of Batch Data Interaction in Vehicle Performance Simulation
Liu Jiechang1,Huang Bingfeng1,Luo Yongge1,Li Zheng2,Sheng Qiao2,Yang Yunyun2
(1.Hubei Key Laboratory of Automotive Power Train and Electronic Control,Hubei University of Automotive Technology,Shiyan 442002,China;2.Technology Center,Dongfeng Motor Croup Co.Ltd.,Wuhan 430056,China)
In the development of automobile performance simulation platform,cross-platform data trans⁃mission is often involved.The parallel development model that use C#as the man-machine interface and invoke the vehicle model in Simulink,give full play to the advantages of the UI of Winform and the powerful simulation function of Matlab on the basis of reducing code coupling.Based on this develop⁃ment model,the characteristics of data transmission in vehicle performance simulation were analyzed,and the data interaction between Visio Studio and Matlab platform using C#reflection mechanism was proposed.The results show that this method can streamline the code and automate data transmission to make data management more convenient.
vehicleperformancesimulation;bitchand bulkdata-exchange;reflection
TP319
A
1008-5483(2017)04-0027-04
10.3969/j.issn.1008-5483.2017.04.006
2017-06-21
汽车零部件技术湖北省协同创新项目(2015XTZX04);湖北汽车工业学院硕士研究生创新基金(Y2016308)
刘杰畅(1991-),男,湖北十堰人,硕士生,从事新能源汽车系统匹配与集成方面的研究。E-mail:465674015@qq.com