RTW 技术在轮机模拟器中的应用
2014-01-16高德基卢森微
高德基 , 欧 镇,卢森微
(1. 江苏科技大学 电子信息学院, 江苏 镇江 212003 ; 2. 江苏科技大学 经济管理学院, 江苏 镇江 212003)
RTW(Real Time Workshop)技术是一种将Simulink模型自动转化为代码的技术。目前,在开发轮机模拟器的过程中,需要搭建船舶主机的数学模型。船舶主机的数学模型非常繁琐,而市场对产品的需求呈现多样性、快速性的趋势, 这使产品开发面临着多样性需求与快速开发之间的矛盾。其中系统设计软件( Simulink软件)是用MATLAB语言建立的一种新型的图形建模工具,它免去了程序代码编程带来的低效与繁琐,可以方便地建立系统的模型(例如系统被控对象的模型、控制器的模型),通过仿真可以观察到模型的各种性能,而且,如果模型搭建的不理想,还可以很快地进行反复设计和反复实验,直到找到比较好的解决方法[1]。但是Simulink运算较慢,不能满足轮机模拟器实时仿真的要求。应该将所建立的模型转变为C++程序。具体实现时,不需要将设计数学模型进行编程,可直接将建立的simulink模型通过code generation 工具转换为可执行代码,下载到存储器中,这样大大减轻了软件工程师的编码工作量,并且将Simulink模型转换成的C/C++代码能脱离MATLAB环境独立运行。需要注意的是,要想成功地运行code generation并生成C++代码,需要在电脑上安装Microsoft Visual C++ 5.0以上版本的编译器。
1 Simulink转化为代码的过程
RTW转换代码的过程包括:
1)分析模型
RTW的程序创建过程首先从对Simulink模块方框图的分析开始,包括如下过程:
① 计算仿真和模块参数
② 递推信号宽度和采样时间
③ 确定模型中各模块的执行次序
④ 计算工作向量的大小(例如S函数使用的工作向量)
在本阶段,RTW首先读取模型文件(mdoel.mdl)并对其进行编译,形成模型的中间描述文件"该中间描述文件以ASCll码的形式进行存储,其文件名为model.rtw,该文件是下一步骤的输入信息。mdoel.rtw文件在格式上与simulink模型.mdl文件类似。
2)目标语言编译器(TLC)生成代码
在程序创建的第二阶段,目标语言编译器将中间描述文件(mdoel.nw)转换为目标指定代码。目标语言编译器(TagrctLnaguageComnlier)是一种可将上述模型描述文件转换为指定目标代码的解释性编程语言"目标语言编译器执行一个由几个TLC文件组成的TLC程序,该程序指明了如何根据mdoel.rtw文件,从模型中生成所需代码[2]。
TLC程序包括如下文件:
a.系统目标文件(SystemTagrctFile)系统目标文件是主文件或入口点。
b.模块目标文件(BlockTagretflie)。
c.目标语言编译器函数库。
3)生成自定义的联编文件(makeflie)
4)生成可执行程序[3]
本文以轮机模拟器的仿真对象——MAN B&W 6L80MC大型低速二冲程涡轮增压柴油主机为对象来建立了其Simulink模型[4]。其模型如图1所示。
假定已经安装好了Matlab支持的一个编译器(如VC),首先需要进行编译器的配制。在Windows控制台的窗口下键入mex-setup。系统会显示一个提示选择编译器的菜单,选择当前安装的编译器。
图1 MANB&W6L80MC柴油机Simulink模型Fig.1 MANB&W6L80MC diesel engine’s Simulink model
对于建立好的Simulink模型,首先要在Simulink窗口中打开此模型,为了将该模型通过code generation生成C++代码,实时仿真需要选择定步长的仿真算法,所以在转换之前应进行相应的设置。仿真的控制参数由Toolscode generationoptions菜单项来选择。定步长的仿真算法在该对话框下的Solver options下选择。
Simulink模型中输出参数的设置是在该信号线的signal propety对话框中设置,要将所有在VC中用的信号属性均设置为 ExportedGlobal。
此外,应将code generationoption对话框下的Code Generation中的language选择目标代码的生成类型。完成之后,在单击System target file栏对应的Browse按钮,来选择目标代码生成方式。这里选择Generic Real-Time Target 下的grt.tlc。以上参数设置如表1所示。
配置好各项参数后,就可以转换为C++代码了。系统会自动产生一个名为caiyouji_grt_rtw的文件夹,里面包含生成的所有文件。其中caiyouji.cpp为实现模型功能的c++代码,caiyouji_data.cpp为模型所用到的初始参数值,caiyouji.h为包含参数和状态变量定义的头文件,caiyouji_types.h为代码中所用数据类型的声明,caiyouji_private.h为模型中定义的本地常量和本地变量头文件。其他相关生成文件:rt_nonfinite.cpp,rt_nonfinite.h, rtwtypes.h, rtmodel.h,rtGetNaN.cpp, rtGetNaN.h,rtGetInf.h等为定义RTW所需的必要参数。
表1 代码转换参数设置Tab.1 Code transformation parameters settings
2 验证代码的正确性
将转换完的可执行C++代码加入到新建的MFC的对话框的程序中,运行该程序,将模型仿真所产生的柴油机升速曲线数据存入.txt文本中,再将该数据导入MATLAB中,绘出的图形与Simulink自身所产生的图形对比如图2所示。
图2 Simulink和代码绘制的升速曲线对比Fig.2 The contrast of the curve drawed by Simulink and the code
由图2两图中曲线可以看出转换的代码是正确的,能够得出正确的数据。
3 C++代码在虚拟操作系统上的应用
下面以基于virtools的船舶主机虚拟操作系统的驾驶台操作为例来说明。对于生成的C++代码, caiyouji_initialize()为系统的初始化函数,caiyouji_step()为系统仿真运行的函数,caiyouji_derivatives()为计算连续模型的导数的函数,caiyouji_terminate()为模型中止函数[5]。生成代码的模型执行流程如图3所示。
图3 代码的执行流程Fig.3 Code execution process
其中仿真运算函数中的一部分如下:
caiyouji_step()
{zhuanshu=caiyouji_X.Integrator_CSTATE; (转速输出)
youci=caiyouji_P.Gain4_Gain*caiyouji_B.Gain3;(油尺刻度)
gongyouliang=(0.043* rt_powd_snf(zhuanshu, 0.335) +0.06353 * youci) -0.095255;
(每循环供油量)
……}
设定各模块的参数。本文采用edit box输入,代码如下[6]:
UpdateData(TRUE);
caiyouji_P.Gain_Gain=m_edit1;(更新P参数)
caiyouji_P.Gain1_Gain=m_edit2;(更新I参数)
caiyouji_P.Gain2_Gain=m_edit3;(更新D参数)
caiyoujizhuanshu1_P.Integrator_IC=shedingzs; (在线调整积分初值)
将产生的代码加入到创建好的MFC工程里,做进一步的编程。这里采用ADO的方式访问数据库。
将各模块的参数设定好以后,就可以将代码所产生的数据根据驾驶台发出的信号实时的存入SQL数据库中。例如当程序检测到数据库表 x3d_output中第3行的数据为1时(代表驾驶台台的启动主机按钮按下),将向数据库表x3d_input第17、18、19行实时存入数据(分别代表启动空气压力,柴油机转速,油门刻度)。以供驾驶台操作界面调用。存入SQL数据库表x3d_input中的数据如图4所示。
驾驶台的操作界面读取数据并显示如图5所示。
图4 数据库表x3d_inputFig.4 Database table x3d_input
图5 启动空气压力表Fig.5 Starting air pressure gauge
另外,柴油机排气温度,转速等均可驾驶台操作界面读取SQL数据库中的数据来显示。驾驶台操作界面上的灯也可根据SQL数据库中的数据亮灭。
4 结 论
文中通过将simulink模型转变为C++程序,并验证了结果的正确性,实现了对模块参数的实时修改,且将Simulink模型所产生的数据输入到了数据库中,以供轮机模拟器中的操作界面调用。这样既减轻了编写程序的繁琐,又满足了轮机模拟器仿真实时性的要求[7]。与传统设计方法相比,具有开发周期短、费用低、效率高的特点。
[1 ] 邱晓林,李天柁,弟宇鸣等.基于MATLAB的动态模型与系统仿真工具——Simulink3.0/4.x[M].西安:西安交通大学出版社,2003.
[2]蔡毅.基于Matalab/RTW实时仿真系统的设计与研究[D].天津:天津大学,2005.
[3]王振波. 基于Matlab RTW/Engine的建模仿真实验实验报告[R] .北京航空航天大学,2010.
[4]甘霏斐. 轮机模拟器柴油主机系统动态过程实时仿真研究[D] 镇江:江苏科技大学, 2005.
[5]常青,邢超,李言俊.基于Matlab/Simulink的交互式实时仿真[J] . 计算机工程与应用, 2003(24):131-132.CHANG Qing, XING Chao, Li Yanjun.An interactive real time simulation based on Matlab/Simulink[J]. Computer Engineering and Application,2003.24:131-132.
[6]王春民,安海忠,王丰贵.基于VC和Simulink的电力电子仿真实验平台设计[J].吉林大学学报:信息科学版,2008,26(3):264-268.WANG Chun-min, AN Hai-zhong,WANG Feng-gui. Design of simulation experimental platform for power electronics based on VC and Simulink[J].Journal of Jilin University Information Science Edition,2008,26(3):264-268 .
[7]李长文,赵长禄,张付军,等.基于Matlab/Simulink及RTW的柴油机瞬态建模与仿真[J]. 北京理工大学学报, 2004,24(7):579-582.LI Chang-wen, ZHAO Chang-lu, ZHANG Fu-jun, et al.Modeling and simulation of diesel engine under transient conditions based on Matlab/Simulink and RTW[J]. Transactions of Beijing Institute of Technology,2004,24(7): 579-582.