本文转载在我的微信公众号:古德曼汽车工业。公众号文章都会知识星球、知乎进行转载,请有兴趣的朋友可以关注我的微信公众号
原文地址:CRUISE与Simulink联合仿真介绍
使用AVL-CRUISE仿真软件做新能源汽车动力经济性仿真时,无一例外的会遇到控制策略编写的问题。本文分析常用的几种AVL-CRUISE与Simulink联合仿真的方式及他们的优缺点,帮助大家选择合适的联合仿真方式。
介绍联合仿真前,我们先来看看AVL-CRUISE自带的Function模块,这个模块支持C语言与RPN-Formula,由于C语言比较灵活,所以应用也比较多。准确的说是一种模拟的C语言,支持基础的语法与函数,可以方便使用者做一些简单的策略(指针、结构体共同体这类的就不用想了)。
这个模块有一个特点就是代码不能太长(印象中是不超过400字符),如果你的控制逻辑相当复杂,那可能需要拆分成多个Function模块来实现。再者,就是输入输出都以数组的形式(a[0]~a[n],y[0]~y[n]),这给编程人员造成不少麻烦,需要通过看描述才能知道输入输出具体代表什么。总的来说开发环境不太友好。
Matlab API
将Simulink保存的MDL文件直接加载到AVL-CRUISE的模块中,运行的时候需要同时开启Matlab与AVL-CRUISE两个软件
这种仿真的优势很明显,工程师可以非常直观的看到每一个步长的执行过程,判断是否与预先设计的逻辑相符。缺点也非常突出,这样的仿真速度是一个步长一个步长的进行,速度会非常缓慢。实际使用中也不推荐大家使用。
Matlab DLL
Simulink控制策略模型使用代码生成技术转换为C语言,并且经过编译器生成dll文件格式。32位的Matlab使用自带的lcc-win32编译器,64位Matlab需要额外安装Win SDK7.1编译器,通过AVL-CRUISE提供的编译模块编译生成dll文件。
根据不同编译器选择对应的CRUISE解算器,使用64位编译器Platform就应当选Win64
仿真任务运行时,由CRUISE解算器调用编译过后的DLL文件,过程无需启用Matlab程序。仿真速度非常快,并且对策略进行封装后,策略闭源有助于保密。当然这种联合仿真方式也有个缺点,就是只能运行经济性任务。也是就说,它只适合运行Cycle类型的任务。
如果需要做动力性仿真,要么就设置一个能跑出动力性的循环工况(例如设置一个无法到达的车上,看看最后最高车速能稳定在多少与百公里加速时间),要不就是使用之前提到的Function模块设计个简单的动力性策略。
**如果您觉得文章对您有帮助,麻烦点击下关注,订阅号将会持续与您分享经验和小工具**
CRUISE Interface
Interface联合仿真,是通过AVL提供的Sfunction进行的,在Matlab中调用CRUISE的解算器,这个过程中无需要额外开启AVL-CRUISE。
封装的S函数模块需要输入的参数有:CRUISE解算器的路径、CRUISE的模型路径、任务文件夹索引、任务的索引。其中任务文件夹索引、任务的索引用来描述第几个计算任务文件夹下的第几个任务。
S函数的输出为CRUISE的输入接口,S函数的输入为CRUISE的输出接口。S函数的信号数要与CRUISE的接口信号数量严格一一对应。即便有的S函数的输出端口在CRUISE中没有实际作用,也要在CRUISE将该信号连接到Monitor上,否则S函数是会报错。
在Simulink中点击运行,就可以在加入的示波器中看到图形。这种方式的运行速度虽然不如Dll方式来的快,但是比Matlab API快不少了,也方便工程师比较直观的看到整个策略逻辑执行的过程,提高调试策略的效率。这种使用Simulink通过S函数调用CRUISE工程的方式也方便广大搞学术研究的朋友,在Matlab实现更多高大上的优化算法。但问题也不是没有,每一次仿真只能够运行一个仿真任务(通过任务文件夹索引与任务索引来确定)。
FMU
FMU文件是基于FMI协议进行封装模型文件。FMI协议是独立于建模软件的标准接口协议,可以用于集成不同的软件建立的不同详细程度的模型,进行MIL/SIL/HIL仿真。
其实FMU文件的本质还是上面讲过的DLL方式,它对DLL文件再一次进行封装。文件中增加了输入与输出口的描述信息。
导入FMU文件后,点击解包就能看到输入输出信号的描述
FMU文件的导出需要在Matlab中安装一个插件在Matlab的项目管理状态下,将Simulink导出为FMU文件
既然本质与Dll方式一致,所以优缺点就与DLL方式是一样,就不重复说明
最后使用表格的形式总结下内容
每种联合仿真方式都有自己的特点,需要根据自身编程习惯,项目需求等,选择合适的仿真方式