APP下载

C#MATLAB混合编程在汽车性能仿真平台开发的应用

2018-03-06刘杰畅黄兵锋罗永革李峥盛俏杨芸芸

汽车实用技术 2018年3期
关键词:调用内核组件

刘杰畅,黄兵锋,罗永革,李峥,盛俏,杨芸芸

(1.湖北汽车工业学院汽车工程学院 汽车动力传动与电子控制湖北省重点实验室,湖北 十堰 442002;2.东风汽车集团股份有限公司技术中心,湖北 武汉 430056)

前言

在汽车V型开发模式中,动力性和经济性计算是整车设计及总成、零部件匹配的重要一环。目前,针对传统车、纯电动、混合动力及燃料电池等车型的计算理论和仿真平台较为完善,其中使用最广的是ADVISOR和AVL Cruise。前者可自由配置计算任务,后者可从汽车建模开始,参数配置精细到零部件,软件的仿真自由度更大,但同时降低了便捷性。企业中,通常需要对大量车型进行动力性经济性指标验证,每次仿真前重新对每一款车型进行细致的参数配置会降低工作效率。为在满足功能的前提下提高仿真便捷性,Excel成为企业中较为普遍的计算平台[1],但其无法避免人工输入导致容易出错且精度不高。本文结合Matlab强大的计算性能和C#友好的人机交互特性,以Simulink为仿真内核,Winform应用窗体为仿真界面,平台继承了ADVISOR和Cruise的仿真对象的通用性、动力总成的可调性、计算指标的可自定义性。并以数据库提取整车参数的方式作为创新点,避免了繁杂的参数设置,实现了工程实用性与功能性的平衡。

1 C#与MATLAB混合编程技术

1.1 C#与Matlab的简介

Microsoft Visual C# 是 Microsoft 专门为. NET 平台而开发的一种强大的、面向对象的语言,可方便快捷的在. NET公共语言运行库 ( common language runtime, CLR) 上创建Windows应用 程序[2]。C# 简单、功能强大、类型安全,可缩短软件开发周期,但是在数值计算分析和曲线绘图方面的操作繁琐,功能薄弱。

将数据可视化和数值计算功能集成在一起的 Matlab软件被广泛地应用于图像处理、控制系统、数学建模等领域,具有强大精准的仿真计算能力。Maltab的函数库种类丰富,且接口设计完善,结构开放易于扩充,但Matlab软件在用户界面上的开发功能比较简单、执行效率低,难以实现底层数据输入输出的管理。Matlab软件在用户界面的功能上的开发还比较简单,执行效率低,难以实现底层的数据输入输出的管理[3]。

为保证软件的便捷性和工程实用性并兼顾软件开发周期和成本,利用Matlab提供的API接口和C#COM组件将两者联合,充分发挥各自优势,同时将主程序与仿真内核隔离开来,方便了后续的代码修改和升级。

1.2 混合编程的实现

Matlab软件提供了三种应用程序接口(API)方式[4]:1)调用Matlab模块所生成的动态链接库(DLL)。2)通过引用Matlab COM组件,访问Matlab内置函数。3)利用 Matlab 编译器来创建 C #语言共享库,创建一个能提供方法入口的包装类[5]。其中,方法一的编程接口和编程方式较特殊,需另外学习,降低了开发周期。方法三使用的函数有一定局限性,仅限于数学函数库且无法使用 Matlab强大的图形处理功能[6]。而方法二是嵌入式编程,调试简单方便,不需要进行复杂的接口设计,并能执行所有Matlab命令,因此本文选用第二种方式, 结果证明此方法能在缩短开发周期的同时充分发挥Matlab强大函数库的优势。

方法二的调用原理如下:利用.NET 环境的运算库可调用包装(Runtime Callable Wrapperm, RCW),将 COM 组件提供的 COM 接口转换为与.NET 框架兼容的接口,使托管客户端(C#)在调用一个 COM 组件时认为是在自身的环境中调用对象,而不需要处理 COM 特性。通过 RCW,C#可以在.NET 环境下作为一个 COM 应用的客户端访问 COM组件,提出数据请求。实现步骤如下:

1)添加 COM(Matlab Application(Version7.11) Type Library)引用。加入对程序集文件“MWArray.dll”的引用,并加入命名空间:

usingMathWorks.Matlab.NET.Arrays;

using MathWorks.Matlab.NET.Utility

2)在Main函数中添加如下代码:

MLApp.MLAppClass matlab = new MLApp. MLApp Class();

利用Matlab com组件中的函数执行Matlab命令,所调用的函数及功能如下表1所示:

表1 Matlab com组件调用函数

2 软件设计

图1 软件架构设计

平台的仿真对象涵盖传统汽车、混合动力、纯电动汽车、燃料电池汽车四大类型。为提高工程实用性,避免繁杂的参数设置,平台需支持Excel格式和数据库格式的参数导入导出功能。平台以C#应用窗体(Winform)作为人机交互界面,以Simulink程序作为仿真内核,并将指标计算的函数封装,通过Matlab的COM组件执行运算。软件架构设计如图1所示:

2.1 流程设计

根据软件的需求定义,采用 “自上而下”的模块式开发流程完成各个子系统架构,模块设计、数据流和接口设计。软件的流程图如图2所示:

图2 软件流程图

2.2 界面设计

指标的仿真分三个过程:1.汽车配置。2.计算指标配置.3.执行运算显示结果。考虑到界面的友好性,将主界面针对过程1和2分为两个窗口。如图3所示。建模部分可从外部导入数据也可手动填写,计算指标根据汽车类型的选择而变化,通过工具栏中的Matlab按钮调用仿真内核开始计算。整个界面主体突出,交互友好,使用方便。

图3 软件主界面

3 批量数据传输

平台的计算对象涉及传统车、纯电动、混合动力、燃料电池汽车,因此仿真内核的参数高达 470个。为实现 C#与matlab平台的大量数据传输,采用C#类属性反射遍历技术。

反射是C#.NET的一种重要机制,它表示在程序运行时对一个程序集的类型元数据的使用,好比我们可以将一个程序集进行映像,在此映像中我们可以从中获取需要的类型元数据,从而完成相应的功能[7]。

对应某个类的实例化的对象采用遍历反射技术,可以动态地取得类的成员:类、接口、结构、枚举和委托等。建立变量类,通过反射技术访问变量的get、set属性,获取变量名和相应的值,便可进行跨平台传输。关键代码如下:

4 数据管理

数据管理涉及用户登录,文件新建、打开、保存。历史记录存储、对比等。仿真过程中,车辆的输入参数及结果状态如图4所示。

图4 窗体切换时的数据状态图

状态图中的变量定义如下表:

表2

对于非静态变量,每一次状态的转换,都需要实例化一个新的变量类,而变量类中的数据量庞大,结构复杂, C#提供的浅拷贝函数只对顶级对象进行复制,不足以满足克隆全部数据的要求,但深拷贝技术术不仅可以复制对象,还可以复制其子对象。

利用这一技术编写拷贝构造函数,实现基于同一类的其他对象的构造和初始化,从而将同类变量在不同窗体和不同状态之间完整传递。代码应用序列化和反序列化的思路将变量逐个检索并复制。

5 计算分析实例

软件对一辆EV汽车进行了动力经济性仿真,配置了车型参数,定制了计算任务。在参数、计算任务均相同的情况下,将采用了混合编程技术的仿真平台计算结果与仿真内核独立运行的结果进行对比,如表3:

表3 平台与仿真内核结果对比

结果表明采用C#调用Matlab的混合编程方式对计算结果不会产生影响。并且,良好的人机交互界面使仿真更为简单,同时与Excel数据的交互避免了繁杂的参数设置,增强了工程实用性,说明C#与Matlab混合编程技术在整车动力性经济性仿真中的应用是切实可行的。

6 结论

系统以人机交互界面调用仿真内核的形式将车型及任务配置程序与动力性经济性计算模型隔离开来,通过严格定义的接口相连,降低了代码耦合性,从而提升了功能扩展性。仿真内核以Simulink作为建模平台,可充分发挥matlab强大的计算性能。界面采用C#winform应用窗体,利用C#COM组件调用matlab运行仿真内核,将matlab强大的仿真性能和c#友好的人机交互界面统一起来,扬长避短,在有限的开发周期内充分发挥两者的优势。

通过C#调用Matlab进行的性能仿真与Matlab单独仿真的计算结果完全一致,证明了本文的方法可行,且为整车性能仿真平台的开发提供了新思路。

[1] 谢卫兵. MATLAB在汽车动力性、经济性仿真中的应用[A]. 全国各省区市机械工程学会、云南省机械工程学会.2015年第五届全国地方机械工程学会学术年会暨中国制造2025发展论坛论文集[C].全国各省区市机械工程学会、云南省机械工程学会:2015:18.

[2] 马煜,陈海军.Visual C#.NET 案例开发集锦[M].北京:电子工业出版社, 2008.

[3] 柯彪,高跃飞,罗炳华,徐凤军.C#与MATLAB混合编程在内弹道设计中的应用[J].弹箭与制导学报,2013,(05):129-132.

[4] 秦春影,喻晓锋,仝海燕,唐淑萍. C#与Matlab集成方式的比较研究[J].洛阳理工学院学报(自然科学版),2011,21(04):42-46.

[5] 张望.一种基于COM的改进组件创建的研究[D].西南大学,2010.

[6] 杨成,申丽然,李雪耀. Matlab引擎的VC++6.0接口调用及其面向对象编程[J].应用科技,2001,(11):41-44.

[7] 斯梅切尔.C#和.NET2.0实战:平台.语言与框架[M].施凡.人民邮电出版社.2008.168-169.

猜你喜欢

调用内核组件
多内核操作系统综述①
无人机智能巡检在光伏电站组件诊断中的应用
Kistler全新的Kitimer2.0系统组件:使安全气囊和安全带测试更加可靠和高效
强化『高新』内核 打造农业『硅谷』
活化非遗文化 承启设计内核
3月光伏组件出口量增长164.6%至7.49GW!单价创新低
一种嵌入式软件组件更新方法的研究与实现
微软发布新Edge浏览器预览版下载换装Chrome内核
系统虚拟化环境下客户机系统调用信息捕获与分析①
基于属性数据的系统调用过滤方法