APP下载

基于RTX,Simulink与LabWindows/CVI的控制系统实时仿真

2014-01-16王婧宇吴中华

电子设计工程 2014年13期
关键词:共享内存目标语言实时性

付 玮,王婧宇,吴中华

(西北工业大学 陕西 西安 710129)

控制系统的稳定性、可靠性是系统能否安全运行的基本前提。随着当今先进控制技术的不断更新与发展,控制系统变得越来越复杂,控制系统的仿真也提出了更高的要求,不仅要求计算机操作系统具有强大的通用功能,还要求其具有优秀的实时性。

因此,本文提出一种基于RTX+Matlab+LabWindows/CVI的仿真平台架构。对某汽车行驶控制系统进行了实时仿真。建立仿真模型后,通过自主研发Real-Time Work Shop内相关编联文件与目标语言文件,可将simulink仿真模型转换成可移植的RTX代码,该程序具有高实时性,可达到预期实时要求。数据显示等非实时任务由Win32进程完成,该程序由LabWindows/CVI编写,在RTSS进程和Win32进程间建立IPC通信和同步机制,以实现两者之间的数据交换、互斥与同步。

1 RTX实时仿真系统与工作原理

RTX采用HAL扩展技术为Windows操作系统安装实时子系统RTSS。为了保证RTSS线程的实时性,RTX增加了在Windows和RTX线程间的中断隔离,当RTSS线程运行时,屏蔽所有Windows控制中断。RTSS有其独立的进程线程管理、进程间通讯、中断、时钟、I/O管理机制。具有128个优先级,对应Win32的32个线程优先级[1]。

RTSS的线程优先于所有Windows线程,提供了对IRQ、I/O、内存的精准控制,能确保实时任务的可靠执行。通过高速的IPC通信和同步机制,RTX进程可方便地实现与Windows应用程序之间的数据交换[1]。RTX只需安装在Windows系统下,减少了仿真成本,而且RTX和Windows系统采用进程间通信,大大提高了实时通信的稳定性。

同时RTX拥有3个精度达1 ms的时钟,最小定时周期可分别达到100、200、500 ms。事件的精确执行在实时系统中是相当严格的。RTX内核利用抢占式调度方式,在保证临界线程的上下文切换的同时还确保线程切换时间保持在500 ns到2μs范围内。

RTX的内存分配都在非分页内存池内,以保证其进程在运行过程中不会被置换出内存,从而确保了对外部事件响应的确定性,避免了使用虚拟内存因缺页产生的延迟。RTSS运行时只占用250 kB的内存,内存占用率极低[1]。同时,RTX对Windows系统在Ring 0级进行了稳定的、高性能的实时扩展,同时支持30 kHz持续稳定的中断触发。实时进程运行时,屏蔽一切Windows中断和错误报告,由此去掉了由线程切换、中断调度而产生的延迟[1]。

表1 RTX与WIN32的优先级对照Tab.1 Comparison of the priority between RTX and WIN32

图1 RTX体系结构Fig.1 Configuration of RTX system

2 仿真系统的架构

2.1 RTW简介

RTW(Real-Time Workshop)是MathWorks公司提供的基于MATLAB和Simulink的一种工具,它能直接从Simulink的模型中产生针对应用优化的、可移植的代码,并根据目标配置自动生成多种环境下的程序[2,6,11]。该生成过程包含如下4个步骤:

1)创建、分析Simulink模型并对模型描述文件进行编译。

2)通过目标语言编译器TLC转换模型并生成代码。

3)程序联编文件(makeflie)的生成。

4)在自定义程序创建文件的控制下,由联编实用程序生成可执行程序。

由于RTW暂时还没有支持RTX的目标语言文件与相关编联文件,所以该功能需根据此流程自行编写。

图2 RTW生成C代码流程图Fig.2 Ccode generation process in RTW

2.2 针对RTX编联文件和目标语言文件的编写

通过编写相关的model.tlc与model.tmf文件,配置相关参数,生成针对RTX相应的实时性代码。其中,model.tlc文件存储simulink的相关配置信息与目标语言信息等参数,model.tmf则为生成文件model.mk的模板,RTW根据要求对model.tmf中的参数进行设置,最终生成model.mk与model.mak文件[9]。其中model.mak文件为makefile制作文件,可在VC6.0中直接打开并转换成.dsp工程文件。

创建rtx.tmf文件,编写代码,包括 MAKECMD=nmake,HOST=PC,BUILD=yes,SYS_TARGET_FILE=rtx.tlc 等。 同时,创建编写相应rtx.tlc文件,部分注释及代码如下:

%%SYSTLC:Generic Real-Time Target

%% TMF:rtx_default_tmf MAKE:make_rtw EXTMODE:ext_comm

%%SYSTLC:Create Visual C/C++Solution File for the"rtx"target

%% TMF:rtx.tmf MAKE:make_rtw EXTMODE:ext_comm

%%$RCSfile:rtx.tlc,v$

...

rtwoptions (9).makevariable ='TMW_EXTMODE_TESTING';

rtwoptions(9).tooltip= ['Internal testing flag for Simulink external mode'];

2.3 LabWindows/CVI的图形显示和数据存储平台架构

使用LabWindows/CVI构架平台,它是National Instruments公司推出的交互式C语言开发平台。他的集成化开发环境、交互式编程方法、函数面板和丰富的库函数大大增加了语言的功能,为熟悉C语言的开发人员提供了一个理想的软件开发平台[7-8]。

该平台系统在LabWindows/CVI环境下运行,应用控件包括NUMERIC控件,COMMAND BUTTON控件,LED控件,AsyncTimer异步时钟控件,STRIPCHART控件等。

该平台使用多媒体定时器实现实时数据采集与显示,它使用自己单独的线程来调用一个回调函数,并且该线程优先级高,每隔一定时间就发送一个消息而不管其它消息是否已执行完,采用多媒体定时器可以达到1ms的最小时间精度[2,10,3]。所以,利用多媒体定时器产生定时中断来显示数据完全满足仿真系统的实时性要求。定时器中段代码如下:

int CVICALLBACK TIME(int panel,int control,int event,void

*callbackData,int eventData1, int eventData2)

{

if(pdata->endflag==0)

{SetCtrlVal(panelHandle,PANEL_NUMERIC1,pdata->Out);PlotStripChart(panelHandle,PANEL_STRIPCHART,&(pdata->Out),1,0,0,VAL_DOUBLE)

;

number++;

SetCtrlVal(panelHandle,PANEL_NUMERIC1_2,number);}

else SetAsyncTimerAttribute (timerhandle,ASYNC_ATTR_ENABLED,0);

return 0;}

仿真数据采集和显示平台如图3所示。

图3 仿真数据采集和显示平台Fig.3 Data collection and manifestation platform

2.4 RTSS工程高精度始终定时

通过编写相关文件后,可通过RTW直接生成高实时性的RTSS代码,该代码中使用RtCreateTimer()函数创建定时器,使用RtSetTimerRelative()函数设置定时器的时间相关参数,精度可以达到0.1微秒(1×10-7s)。将任务放在定时器中断函数中即可实现仿真的每一帧的高精度时间控制。大致程序如下:

RtCreateTimer(…,TimerHander,…);//创建时钟

RtSetTimerRelative(…,FrameTime,…);//设置时钟参数

Void RTFCNDCL TimerHandler(PVOID context)//定时中断函数

{

rt_OneStep(S);

pdata->Out=rtY.Out1;

}

2.5 LabWindows/CVI与RTSS进程通信

RTSS支持IPC对象,这使得实时程序与非实时程序之间的通讯和同步成为可能[1]。RTSS与WIN32进程通信可使用共享内存(Shared Memory Object)、信号量(Semaphore Object)、事件(Event Objects)和互斥(Mutex Objects)。与Win32下IPC不同的是RTSS的IPC对象都分配在不分页内存池,而且支持等待的优先级。当有多个不同优先级的RTSS线程在等待,系统可以保证按照线程优先级的高低来获取资源[1]。仿真流程图如图4所示。

图4 仿真流程图Fig.4 Process diagram of simulation

通过创建相应结构体,放入共享内存中可进行RTSS与WIN32进程通信[4]。该结构体包含了所有需要在WIN32进程中显示的数据与信号量,结构体部分信息如下:

typedef struct

{

double Out;

int endflag;

...

double Gain;

double time;

}*PDATA;

RTX提供了特有的API函数RtCreateSharedMemory()和RtOpenSharedMemory()来创建和打开共享内存与Win32进程进行数据交互[5]。本仿真程序通过在Win32进程中创建共享内存并且在RTSS进程中打开共享内存进行数据交互。并且通过 RtCreateEvent()与 RtWaitForSingleObject()进行 Win32进程与RTSS进程之间相互通信。

3 仿真数据的实时显示

首先搭建某汽车行驶控制系统仿真模型,如图5所示。

由于已经编写过相关的制作文件和目标语言文件,所以可通过RTW直接生成针对RTX的实时代码。配置相关参数后,生成代码。产生vehicle_control.rtss文件用于实时仿真系统。

首先打开仿真数据采集和显示平台,进行与RTSS进程的链接,通过共享内存与RTSS通信。若连接成功,则可设置仿真时间与增益等相关参数。仿真步长设置为0.02 s,仿真时间设置为20 s。

图5 汽车行驶控制仿真模型Fig.5 Simulation model of vehicle control

图6 仿真结果显示Fig.6 Manifestation of simulation result

4 结论

仿真结果表明,该真系统具有相对较高的实时性,充分满足了该汽车行驶控制系统仿真的实时性要求。与在WIN32环境下进行的Simulink仿真结果对比后可得出,该实时仿真平台能精确地实时显示仿真数据,有效的避免了因Simulink运行在Windows中的低实时性。对于一般实时仿真系统来说,该系统可以非常好的满足实时性要求。

[1]张福凯.基于RTX的无人机飞行控制系统实时仿真[D].西安:西北工业大学,2013.

[2]郭朕凯,卢京潮.RTW在某型直升机飞控系统半物理仿真中的应用[J].火力与指挥控制,2009,34(12):160-165.GUO Zhen-kai,LU Jing-chao.Application of RTW in a helicopter flight control system hardware-in-the-loop simulation[J].Fire Control&Command Control,2009,34(12):160-165.

[3]于强,何宁,李亮,等.Windows下基于LabWindows/CVI 8.0的实时数据采集[J].工业控制计算机,2009,22(10):66-67.YU Qiang,HE Ning,LI Liang,et al.Real-time data acquisition based on Labwindows/CVI 8.0 under Windows[J].Industrial Control Computer,2009,22(10):66-67.

[4]陈向群,马洪兵.现代操作系统[M].第3版.北京:机械工业出版社,2009.

[5]杨建和.基于LabWindows/CVI数据采集系统的设计[D].北京:北京邮电大学,2012.

[6]陈永春.从Matlab/Simulink模型到代码实现[M].1版.北京:清华大学出版社,2002.

[7]史君成,张淑伟,律淑珍.LabWindows虚拟仪器设计[M].北京:国防工业出版社,2007.

[8]孙晓云.基于LabWindows/CVI的虚拟仪器设计与应用[M].第2版.北京:电子工业出版社,2010.

[9]郑智琴.Simulink电子通信仿真与应用[M].1版.北京:国防工业出版社,2002.

[10]王晓东,尚耀星,吴帅.基于LabWindows/CVI和RTX的实时测控软件设计[J].科技信息,2008(19):397-398.WANG Xiao-dong,SHANG Yao-xing,WU Shuai.Design of real-time control software with LabWindows/CVI and RTX[J].Science Technology Information,2008(19):397-398.

[11]贾秋玲,袁冬莉,栾云凤.基于MATLAB7.x/Simulink/stateflow系统仿真、分析及设计[M].1版.西安:西北工业大学出版社,2006.

猜你喜欢

共享内存目标语言实时性
通过QT实现进程间的通信
中国大学生对越南语虚词的误用
基于Linux内核的文件服务器模型的研究与构建
教材插图在英语课堂阅读教学中的运用及实例探讨
基于PCI总线的多处理器协同机制研究
航空电子AFDX与AVB传输实时性抗干扰对比
计算机控制系统实时性的提高策略
一种车载Profibus总线系统的实时性分析
一种高效RTAI 共享内存管理层的研究与实现*
多媒体英语学习法