1、前言
对于程序开发和许多交互式应用来说,unix和windows可以算是优秀的操作系统。然而,它们都不适于实时应用。tornado是美国windriver公司为用户提供的嵌入式开发平台,vxworks是tornado的运行期组件,也是嵌入式行业应用最为广泛的实时操作系统。vxworks的实时性做的非常好,其系统本身的开销很小,任务调度、任务间通信和中断处理等系统公用程序精炼而高效,他们造成的延迟很短。vxworks提供的多任务机制对任务的控制采用了优先级抢占调度和轮转调度机制,也充分保证了可靠的实时性,使同样的硬件配置能够满足更强的实时性要求,为应用的开发留下更大的余地。
rtw(real-time workshop)是matlab图形建模和仿真环境simulink的一个重要的补充功能模块,它是一个基于simulink的代码自动生出环境,它能直接从simulink的模型中产生优化的、可移植的和个性化的代码,并根据目标配置自动生成多种环境下的程序。
rtw提供了几个快速原型化的目标,其中包括提供了从simulink模型到vxworks应用代码的自动转换接口tornado real-time target,可以让用户的模型在vxworks上执行。
2、tornado(vxworks)实时目标运行时结构
开发vxworks实时应用系统的典型配置,如图1所示:

图1 vxworks实时应用开发的经典配置
实时代码在主机上,用tornado提供的交叉编译器编译。通过rtw的tornado实时目标生成目标文件(vxmodel.lo),可通过tornado集成开发环境的windsh下载到vxworks目标机。实时程序在vxworks目标机上执行,通过io设备和外部硬件交换数据,并保持和主机之间的相互通信。
实时程序运行在vxworks目标机上,而simulink运行在主机上。simulink需要vxworks目标机上运行的任务来处理通信过程。tornado(vxworks)real-time tartget生成如下vxworks任务:一个用于和simulink通信,其他用于完成模型功能[2]。
3、tornado(vxworks)实时目标的实现过程
3.1 实验环境
我的实验环境如下表:
表1 实验环境

3.2 实时目标的具体实现步骤
为了通过real-time workshop实现和运行一个基于vxworks的实时程序,用户可按如下的步骤进行:
(1) 在matlab/simulink下建立一个模型,这里以一个经典的pid模型为例:

图2 实验所采用的经典pid模型
模型采用外部工作模式(external mode),并设置simulink parameters对话框中的参数:

图3 仿真参数solver设置

图4 仿真参数real-time workshop设置

图5 仿真参数code generation options设置
[1]
(2) 配置模板联编连文件tornado.tmf,该文件位于%matlabroot%/rtw/c/tornado目录下,要对这个文件作如下修改:
#------------ macros read by make_rtw -------------
makecmd = c:tornado2.2hostx86-win32 inmake
host = pc
#-------------tool locations-----------------------------
wind_base= c:tornado2.2
wind_registry=$(computername)
wind_host_type=x86-win32
#------------vxworks configuration------------------
vx_target_type = pentium
cpu_type = pentium2
#-------------macros for downloading to target-----
target=target
tgtsvr_host=host
vx_core_loc = $(wind_base)/target/config/ pcpentium3/vxworks
(3) 程序的生成、编译、连接
设置完参数,保存后,开始创建程序,单击上图中的build按钮,开始编译程序,成功后可在当前的目录中产生了一个vxmodel_tornado_rtw的文件夹和一个目标文件vxmodel.lo。
(4) 手动下载和运行可执行文件
现在可以将实时程序下载到目标机中,具体的方法是在tornado集成开发环境中启动windsh,在windsh窗口执行如下命令:
ld
请注意要保证lo文件在windsh的工作路径下。vxworks实时程序定义了一个函数rt_main(),用来创建和执行模型代码、完成与simulink的通信(如果选择了外部模式方式)。rt_main函数在文件rt_main.c中定义,这个文件位于目录%matlabroot% twc ornado中。
在windsh窗口中调用rt_main函数,开始运行程序:sp(rt_main,vxmodel,"-tf 100 -w ","*",0,30,17725)
参数的含义分别是:
rt_main()是实时程序定义的函数,用来产生任务执行代码和与simulink进行通信;?
-tf用于指定仿真时间,此处设为100秒;?
-w表示在外部模式时,运行前等待来自simulink消息的触发;?
“*”为安装所有的信号;?
0表示使用各自的模块名;?
30表示使用默认作为tbaserate优先级;?
17725为tcp默认端口号(可以设置在256~65535之间)。?
运行后我们可以看到目标机上的屏幕上显示:
waiting for start message from host
(5) 建立连接
在external target interface对话框中的mex-file arguments指定目标机的ip、冗长度和tcp端口号,如图6所示,就可以建立连接了。

图6 external target interface对话框设置
打开external mode control panel,如图7所示。点击connect按钮,执行start real-time code,可以看到scope上的图形输出。此时,可以改变模型的参数(如增益的数值),参数下载后scope的曲线将随之改变。仿真时间结束以后,可以看到产生了一个external.mat文件,由目标机会传到主机,放在tornado的安装根目录下。

图7 external mode control panel对话框
4、结论
针对matlab的仿真特性和vxworks操作系统的实时特点,本文介绍了rtw面向tornado(vxworks)实时目标的运行结构,并且较为详细的阐述了tornado(vxworks)实时目标的具体实现流程,实现了simulink在tornado(vxworks)实时目标下的仿真。
在结合相关文档的同时,笔者加入了亲身实验的经验,增补了一些必要的内容,完善了实验的具体步骤,降低了为读者今后实验的调试难度。