电动汽车的结构种类繁多,结构千差万别,这给电动汽车的设计带来了极大的挑战。当今世界汽车工业的飞速发展带来了资源和环境的双重压力,传统燃油汽车尽管努力改善燃油经济性和排放性,但毕竟改善潜力有限,因此,电动汽车的发展成为一个热点方向。电动汽车的仿真技术在汽车的设计初期发挥着重要的作用,在选择部件和最佳结构时,需要设计和制造者能够很快地缩小研究范围,找到技术的突破口。利用计算机仿真技术能够快速的建立任意的车辆动力传动系统模型,通过改变不同的动力系统部件来预测电动汽车的性能,分析动力性能和经济性能的影响因素,从而可以优选出最佳的系统方案,缩短研究周期,节约研究经费。
一、常用电动汽车的仿真软件介绍
1.1 SIMPLEV
SIMPLEV? Version 3.1是由爱达荷州国家工程和环境实验室开发的基于DOS下的电动汽车和混合电动车的仿真程序。它的主要用途是作为汽车性能的一种仿真工具。它可以对装有传统的、所有电动的、串联混合和并联混合驱动系统的车辆进行仿真。
1.2 ADVISOR
ADVISOR是由美国能源部运输技术办公室混合电动车项目所支持的位于NRREL的车辆系统分析组(VAST)根据工业的需要开发了一套复杂的系统分析工具,它可以对部件和整车的设计中各种问题进行仿真,是目前世界各国企业使用最多的免费软件。
1.3 PSAT
美国Argonne国家实验室开发了PSAT电动汽车仿真软件,它在Matlab/Simulink软件环境下运行,该项目获得了美国福特、通用和戴姆勒一克莱斯勒三大汽车公司的指导和资助。该软件的仿真模型采用前向(forward-looking)仿真算法,由驾驶员一控制器一车辆形成一个前向仿真闭环回路,其内部部件模型之间的联系更加接近于车辆的实际情况。这种算法比后向(backward-looking)仿真算法的计算结果更准确,但是PSAT的计算速度通常比采用后向仿真算法的软件(如Advisor)要慢许多。
1.4 CRUISE
CRUISE是一次开发的、用于计算车辆动力性、经济性、制动与排放的专业仿真软件,已经成功实现了商品化。该软件采用可视的模块化建模,可以仿真内燃机、纯电动和混合动力汽车。CRUISE可以计算不同行驶工况下的动力性、经济性与排放性能、发动机、变速器和燃油经济性与排放性、加速特性、传动系速比、整车制动性能,还可用于集中载荷计算和传动系扭转振动计算。
1.5 其它
一些重要的电动汽车仿真软件介绍见表一,其中EVSIM是香港大学开发的用于纯电动汽车的仿真Vehicle Simulation v2.1f.2是由VTT开发的一套基于微软Windows环境下的电动汽车仿真程序。它可用于电动汽车或其它由电机驱动的机器的设计中。可以看出,大多数的仿真软件是基于Matlab/Simulink开发的。目前, 国内还没有较系统和成熟的混合动力汽车仿真软件,因此,这也是我国汽车工业应该研究的一个重点内容。可以预计未来在仿真技术的研究与软件开发中,应该遵循的目标是:
1) 精确。即能够使不同结构的动力传动系统间的比较具有意义。
2) 快速。即能快速进行汽车分析和空间研究设计, 例如对多维变量参数的研究和优化等。
3) 灵活。即能对不同控制策略和结构组成的汽车进行评价。
4) 共享。即能够与潜在的合作者共享,推动混合动力汽车的发展并促进公众的了解。
5) 实用。即能针对各种车型建模,如传统汽车、电动汽车、串联式和并联式混合动力汽车等。
6) 使用方便。即使用者对汽车建模没有经验也能快速掌握。
表一 当前电动汽车仿真软件的总体情况[4]
nload="javascript:if(>740)=740" align=center border=0>
二、混合编程技术的优点及应用
VC++用于面向对象的可视化编程,可以完成从底层软件直到面向用户软件等各种应用程序的开发。利用它提供的各种实用工具,可以轻松开发出高效强大的Windows应用程序。但在实际工程开发中,与MATLAB相比:①VC++在数值处理分析和算法工具等方面不如MATLAB;②VC++在准确方便地绘制数据图形方面不如MATLAB。MATLAB具有强大的数值计算和图形显示能力,以及易用的编程开发环境。MATLAB具有矩阵和数组计算方便、编程效率极高、易学易用、可扩充性强和移植性好的优点,它把工程技术人员从烦琐的程序代码中解放出来,可以快速的验证自己的模型和算法。MATLAB具有良好的开放性和扩充性,利用MATLAB提供的科学计算能力和M语言编程能力开发了很多专业函数并组成了不同的工具箱,而这些工具箱产品被广泛地应用于科学计算、控制系统、信息处理等领域的分析、仿真和设计工作中。采用混合编程技术能够最大限度的发挥二者的优点。
对于电动汽车仿真软件的开发,前述大部分的仿真软件都是基于MATLAB/Simulink二次开发的,其功能不能脱离MATLAB环境运行,根据电动汽车仿真的特点可以看出,仿真计算过程中涉及众多的数学计算和图形显示。采用VC++的面向对象方法进行建模及程序设计能够最大限度的发挥VC++界面优良和MATLAB程序设计简单的特点,这样就可以使的软件设计者不用花费很大的精力进行算法的研究,而是充分利用MATLAB的强大的数学计算功能和图形显示能力。此外,由于VC++具有的类的封装性的特点使得软件的扩展非常方便,最终通过混合编程实现可脱离MATLAB环境运行的可执行程序。
三、Matlab和VC++混合编程的几种方式
目前利用Matlab和VC++进行混合编程的方式主要有以下几种:
1) 使用MATLAB自带的MATLAB Compiler
MATLAB自带的c语言的编辑器matlab compiler作用是将MATLAB的M文件转化为c/c++代码。即MCC命令Compiler是混合编程的基础。生成的c/c++代码需要用编译器编译链接成独立的应用程序。在将M文件转化为独立应用程序的过程中生成C/C++文件,原则上是可以被其他C/C++代码调用的,编译器可以通过设置mcc命令的选项,将M文件编译成动态链接库文件、C/C++文件、可执行文件等一系列文件。
2) 利于MATLAB引擎
MATLAB引擎库函数是MATLAB提供的一组接口函数,它允许用户在自己的应用程序中对MATLAB函数进行调用,因此,可将MATLAB作为一个计算引擎使用,让其在后台运行,这样可以简化前台用户程序的设计任务。当用户使用MATLAB引擎时,采用客户机/服务器模式,相当于在后台启动了一个MATLAB进程。MATLAB引擎库函数在用户程序和MATLAB进程之间起桥梁作用,完成两者的数据交换和命令的传送。在Windows系统中通过ActiveX完成。
3) C-MEX方式
C-MEX是MATLAB Executable的缩写,即MATLAB的可执行程序。在Windows环境中,它的扩展名为DLL的动态链接库。MEX是MATLAB调用其他语言编写的程序或算法的接口。它符合MATLAB的调用格式,可以在M程序中直接调用。与MATLAB引擎API一样,MATLAB也提供了一组用于MEX程序的应用程序接口。在MATLAB中,可以调用用户自己开发的C子程序,通过MATLAB的API函数库将C子程序编译成MEX文件,以便在MATLAB环境中直接调用或链接这些子程序,以达到提高计算效率的目的。
4) 利用Mideva/Matcom
Matcom是MathWorks公司开发的为MATLAB中的M 文件进行高效解释和调试的集成开发环境,其最新版本为Matcom4.5,是一个非常有用的.m 文件编译器(Replacement),它有如下几大优点:
(1) 它提供了Matlab语言中.m文件和其他语言的接口,使.m文件可以编译为脱离Matlab环境独立执行的可执行程序,这样不仅提高了代码的复用率、执行速度,而且使纯文本的.m文件转化为二进制的可执行文件,增加了知识保护的安全性。
(2) 它提供了近千个数学函数,对于其他高级语言编辑器来说,提供了一个丰富的数学库,基本上在Matlab上能用的常用函数都可以在高级语言中调用,数学函数主要包括矩阵属性生成函数、数学函数、绘图函数等。
(3) 提供了.m文件的方便快捷的编译调试环境,可以使用step、watch、breakpoint等各种调试手段。
以上各种混合编程的方法中,利用Matcom的方法最为方便有效,其具体原理如下:Matcom 编译M 文件,先将M 文件按照与Matcom 的cpp库的对应关系,翻译为cpp源代码,然后用对应版本的C编译器将cpp文件编译成相应的exe或dll文件,其具体步骤如下:
1)进入Mideva主界面,在File菜单中选择Compile to dll,输入文件filename.m,则在Matcom \debug目录下可找到文件filename.c,filename.h,,filename.1ib,等。
2)将,filename.h加入工程中。
3)设置路径在VC++集成开发环境中,选择Tools/option/directory/include中加入D:/matcom45/lib,在Library选项中加入D:/matcom45/lib。
4)加入库文件在Project/add to project/files中加入文件 D:/matcom45/lib/v4501.1ib。
5)设置完之后,便可以在VC 中直接书写matcom 语句或运行matcom 生成的函数filename。
四、一个简单的实例
下面以绘制2.0L (54kW) 某型柴油发动机的外特性曲线为例利用Matrix
在VC++中创建一个新的SDI MFC工程. 使用缺省设置. 创建完成后需要将Matrix
在View类中定义BOOL型变量init;
void CEngine_mapView::onDraw(CDC* pDC)
{
CEngine_mapDoc* pDoc=Getdocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
if(!init) //判断是否初始化成功
{
initM(Matcom_VERSION); //Matcom的初始化
Mm h=winaxes(m_hWnd);
axesposition(10,10,1000,300); //指定坐标轴位置及大小
double bounddata[4]={500,5500,0,150}; //指定坐标显示的范围
Mm mbound;
M_VECTOR(mbound,bounddata); //初始化坐标轴范围向量
axis(mbound); //改变坐标轴显示范围
Mm fc_map_spd=colon(1000,500,5000); // 发动机转速取值
Mm fc_max_trq=(BR(605),750,750,800,850,815,750,690,650)*1.987/6.28/2; //发动机对应个转速的最大转矩,首个变量的初始化要用到BR函数。
Mm p=polyfit(fc_map_spd,fc_max_trq,3); //将发动机转速-转矩离散点进行曲线拟合
Mm n=colon(1000,100,5000); //相当于matlab里的n=1000:100:5000;
Mm T=polyval(p,n);
plot((CL(n),T));
//在Matcom C++矩阵库中当函数接受个数不确定的输入参数时借助CL函数来实现。
title((CL(TM("发动机外特性曲线"))));
xlabel((CL(TM("转速(r/min)"))));
ylabel((CL(TM("转矩(N*m)"))));
grid(TM("on"));
init=true;
}
drawnow();
exitM();
}
程序执行后的结果如右图所示。
nload="javascript:if(>740)=740" align=center border=0>
五、结论
作为计算机辅助设计重要组成部分的仿真技术,在电动汽车领域的应用日益广泛;目前我国电动汽车行业发展迅速,但国内尚没有系统的电动汽车的性能仿真软件,因此,开发出具有自主知识产权的电动汽车的仿真软件就具有了重要的意义。