高宁 李晓明
摘 要:由于商业半实物仿真平台往往需要配合专用硬件使用,通用性较差、价格高昂,且国内半实物仿真平台较少,难以满足半实物仿真技术的学习教学需求。因此,本文设计实现了一种基于组合式仪器平台和Simulink的半实物仿真系统,通过分析RTW代码生成过程,实现Simulink模型的实时性扩展。并通过编写脚本文件,自动生成可在组合式仪器平台上运行的半实物仿真应用。实例运行表明,该半实物仿真平台具有较高的自动化程度和通用性。
关键词:半实物仿真;Simulink;实时性;自动化
中图分类号:TP273+.5 文献标识码:A
Abstract:As commercial HIL (Hardware In the Loop Simulation) platforms often need to be used with special hardware,the versatility is poor and the price is high.Meanwhile,there are few HIL platforms available in our country.Therefore it cannot meet the needs of learning and using HIL technology.For this case,a HIL platform based on a combined instrument platform and Simulink was built.By analyzing the RTW code generation process,the real-time extension of the Simulink model is realized.By writing the script file,semi-physical simulation applications can be generated automatically on the platform of the combined instrument.The running example shows that the semi-physical simulation platform has a high degree of automation and versatility.
Keywords:HIL;simulink;real-time;automation
1 引言(Introduction)
半实物仿真根据英文翻译有时也被称为硬件在环(HIL)仿真,是指在仿真系统应用中包含有数学模型同时也有真实硬件设备的接入,相互配合共同完成仿真。相比于传统仿真测试方法,可以使系统表现出更为接近完全真实硬件情况下的性能和状态,帮助研发人员进行更全面、更彻底的系统测试,及早发现和解决测试过程中存在的问题,有效减少研发周期,降低研发成本或进行极限、危险工况下的测试,提高成功率。因此,半实物仿真被广泛应用于武器装备研发[1,2]、航空航天[3,4]、汽车研发[5]等诸多领域,已经成为一个国家仿真技术发展水平的重要体现[6]。
目前,半实物仿真应用较为广泛的有Simulink Real Time[7]、dSpace[8,9]、RT-LAB[10]、NI,以及基于Windows实时扩展系统[11]和基于Linux系统的半实物仿真平台[12]。但上述平台在使用过程中往往需要专用的软件和硬件配合使用,使用范围难免受到硬件的限制,通用性较差,而国内现有的半实物仿真平台较少。同时商业半实物仿真平台价格高昂,更适合实际生产研发,对于高校同学和教师而言,学习和研究半实物仿真技术的成本过高。针对以上情况,本文搭建了基于组合式仪器平台和Simulink的一种通用半实物仿真平台,并提出了对Simulink模型实时性改造的方法,最后对该半实物仿真平台开发仿真应用进行了实例展示。
2 半实物仿真平台总体架构(Overall architecture of hardware in the HIL simulation platform)
组合式仪器平台包含硬件模块和软件系统,该平台可以完成网络传输、多任务处理,以及各种外围接口的调用,并且通过系统BootLoader、系统kernel、系统驱动程序等方面的定制,实现了一个稳定性好、实时性高的适用于组合式仪器系统的嵌入式Linux系统,运行在组合式仪器系统硬件模块上[13],硬件模块如图1所示。
本文以组合式仪器平台为硬件基础、Simulink为软件基础,通过Simulink设计开发数学模型,然后使用RTW工具箱将模型转化成C语言代码,并根据半实物仿真系统的特点对自动生成的代码进行定制,最后下载至组合式仪器平台中进行编译链接生成可运行的目标程序,完成半实物仿真应用的开发。二者之间通过网络通信完成仿真程序的下载,以及仿真程序运行状态的监控,系统总体架构如图2所示。
3 Simulink模型的实时性扩展(Real-time extension of Simulink model)
3.1 RTW代码自动生成分析
RTW作為Simulink中集成的一个工具箱,可以方便地将Simulink模型转换成能够直接在目标硬件平台使用的C语言代码,使之可以脱离Simulink环境运行在目标硬件平台上。使用RTW工具箱自动将Simulink模型转换成C语言代码过程中的关键步骤如图3所示,通过修改创建过程中所需要的各种配置文件和模板文件,可以实现对生成代码过程、格式的控制[14]。
(1)Simulink提供一种图形化的开发环境,该环境可以看作是由模块和子系统两种要素组成的一种图形化开发语言。RTW可以将图形化的仿真程序编译成传统编译器可以进行编译的代码。
(2)在代码自动生成的初始阶段,首先Matlab内建函数对搭建的Simulink模型文件Model.mdl进行解析,分析其中的模块、子系统结构,以及它们之间的相互连接关系,然后进行组合编码,生成Model.rtw中间描述文件。
(3)目标语言编译器(TLC)对Model.rtw文件进行解析,然后根据系统目标文件ert.tlc、模块目标文件grt.tlc、目标语言编译函数中的指令生成C语言代码,其中grt.tlc文件和ert.tlc文件分别控制着代码的生成特性,以及单个模块代码的生成。因此可以通过修改grt.tlc文件、ert.tlc文件来生成与不同硬件平台相匹配的专属代码。
(4)模板Make文件针对具体的仿真模型进行标记和扩展控制控制专属Make文件的生成。Model.mk文件的作用在于可以实现对代码编译链接的控制。因此修改Makefile文件或者直接修改Model.mk文件便可以使代码能够针对真实的硬件运行环境进行交叉编译或在真实硬件平台上直接进行编译。
(5)最终生成的程序由运行接口、应用程序组件两个部分构成,进一步运行接口根据是否与目标运行环境有关可以分为与环境有关的组件和与环境无关的组件两个部分。其中与环境相关的组件在RTW工具箱提供的rt_main.c文件中实现,文件中的主函数控制着整个仿真程序的定时,创建任务,安装中断句柄,启动数据记录及错误检查。因此可以通过修改rt_main.c文件設置仿真模型的定时引擎,进而控制整个仿真的执行进程。
3.2 Simulink模型的实时性扩展方法
因为半实物仿真系统中仿真程序和真实的硬件之间有数据交互,所以需要保证二者在运行中保持时间的同步,即要求半实物仿真系统具备实时性能力,而直接通过Simulink开发的数学模型并不具备这样的性能,因此需要对转换后的Simulink程序进行实时性扩展。
基于Simulink的半实物仿真系统的实时性能可以使用时间同步精度和最小仿真步长两个参数来进行表征。时间同步精度为理想仿真时间与实际仿真时间之间的最大差值,如式(1)所示。该值受每一个仿真帧的同步精度和整个仿真过程中的累计同步精度误差影响,其值越小,表明系统的同步特性越好,反之则越差。最小仿真步长表示整个仿真过程中最大仿真帧的实际计算时间,该值代表了仿真计算的速度,如式(2)所示。要求最小仿真步长应小于等于设置的仿真步长,保证每一个仿真帧的计算都可以在设置的步长内计算完毕。
半实物仿真应用按照设定的步长循环迭代运算,组合式仪器平台的硬件已经为计算速度提供了保证,因此为进一步提高系统的实时性能,就需要在每个仿真帧计算结束后进行等待,控制每一个仿真帧的同步精度。但多次延迟等待后,不可避免会产生累计误差,所以还应该从整个仿真过程进行考虑。首先计算实际已仿真时间除以仿真步长的余数,获取该仿真帧计算的实际消耗时间;然后将仿真步长与计算得到的余数作差,即可得到模型运行到此时的时间同步精度;最后通过调用延迟函数,用二者之间的时间差值作为同步等待补偿,将每个仿真帧运行结束后的实际仿真时间和理想仿真时间向前对齐,进行时间同步。基于以上思路,设计了实时性扩展框架,其流程如图4所示。
3.3 Simulink模型的实时性扩展实现
若要实现图4中的实时性扩展功能就需要对自动生成的代码进行改造后再进行编译执行。通过对RTW代码自动生成过程的分析,已经知道系统是通过rt_main.c文件来实现定时引擎调用、仿真模型执行,以及中断调用返回等控制功能的。因此可以对该文件进行适当修改,通过C语言实现上述实时性运行框架后再将其加入rt_main.c文件中实现对仿真程序的实时性扩展。同时引入POSIX(可移植操作系统接口)高精度定时器,保证仿真系统的高实时性。实时性扩展实现流程如图5所示。其中POSIX定时器封装在getCurrentTime()函数中,实时性扩展实现的关键代码如下:
double stepTime=RT_MDL->Timing.stepSize0;
rt_OneStep();
getCurrentTime(&sec,&u_sec);
double fst=sec+u_sec/1000000.0;
double Tsynca=fst%stepTime;
double dely=stepTime-Tsynca;
4 目标程序生成及文件传输(Object program generation and file transfer)
4.1 目标程序生成
对主函数进行实时性扩展以后,还需要创建主函数头文件并引入主函数中,头文件中包括实时主函数文件中需要的宏定义,对调用的外部函数进行声明,以及仿真程序的头文件Model.h,使实时主函数可以调用Model.c中实现的方法,将实时主函数和仿真程序连接为一个整体。全部改造工作完成后,将程序文件下载至组合式仪器平台中。但是组合式仪器平台中并不包含模型运行时的诸多依赖文件,因此还需将模型依赖文件一同打包下载至组合式仪器平台,并放置在组合式仪器平台的固定文件目录中,这些依赖文件包括Matlab提供的文件,POSIX高精度时钟实现文件,以及组合式仪器平台各种扩展接口的通信组件。当建立的半实物仿真应用需要其中的某些文件时,可以直接调用。下载完毕后还需要继续对程序文件进行编译链接才可以生成在组合式仪器平台上运行的程序,这个过程中最重要的是梳理目标程序中需要用的头文件和C文件,建立Makefile文件,然后通过make指令生成最终的目标程序文件,并启动仿真程序。程序生成流程如图6所示。