首页 / 专利库 / 软件 / 交互式应用程序 / 一种基于仿真软件Simulink实时扩展RTX的飞行器实时仿真程序的编程方法

一种基于仿真软件Simulink实时扩展RTX的飞行器实时仿真程序的编程方法

阅读:794发布:2020-05-13

专利汇可以提供一种基于仿真软件Simulink实时扩展RTX的飞行器实时仿真程序的编程方法专利检索,专利查询,专利分析的服务。并且本 发明 的一种基于仿真 软件 Simulink实时扩展RTX的 飞行器 实时仿真程序的编程方法,Simulink可以在普通计算机上运行,避免了使用专用仿真计算机和专用编程工具所带来的价格昂贵和使用专用仿真计算机及其编程工具给编程工作带来的不便因素。Simulink利用图形模 块 化编程方法,内置共享的图形模块,用户根据需要直接调用库中的图形模块,插入到程序当中,快速编程。Simulink的RTX是一个直接面向 硬件 的功能模块,它绕开了视窗 操作系统 的 进程 ,为程序提供了实时运行环境。本发明提供了在普通计算机上编制飞行器实时仿真程序的方法,提高效率,程序兼容性好, 费用 低,方便工作。,下面是一种基于仿真软件Simulink实时扩展RTX的飞行器实时仿真程序的编程方法专利的具体信息内容。

1.一种基于仿真软件Simulink实时扩展RTX的飞行器实时仿真程序的编程方法,其特征在于,包括步骤如下:
步骤一:开发基于RTX的程序:
安装RTX,在其可视化编程工具(Visual Studio)集成开发环境中,有开发RTX软件的实时扩展应用程序编程向导(RTX AppWizard),使用该向导,设置所需的应用程序框架,包括定时器、中断、事件管理、端口输入输出及RTX动态链接库,在该框架基础上添加程序代码,编译链接后生成RTX应用程序;
步骤二:基于MATLAB的Simulink的仿真建模:
(1)用Simulink仿真建模:
Simulink采用图形模化、交互式操作方式,建模时使用鼠标拖放不同模块库中所需要的功能模块图标,并将它们连接起来,创建仿真模型,在仿真组件(Simulink)中,使用鼠标拖放不同模块库中所需要的功能模块图标,将它们连接起来,创建仿真模型,设置模型名为model;
(2)编写S-函数
用C语言编写MEX文件的S-函数,实现仿真程序与硬件接口的联接,包括回调函数:
mdlInitializeConditions();     //初始化状态变量;
mdlOutputs ();                 //数据输出;
mdlUpdate();                   //更新离散状态;
mdlDerivatives ();             //求导数;
mdlZeroCrossings ();           //过零检查;
打开MATLAB提供的用C语言编写MEX文件的S-函数的模板文件sfuntmpl_doc.c,分析该文件定义的各回调函数的结构和详细注释,参考模板文件中各回调函数的注释和结构,编写S-函数;
(3)生成C语言代码
设置图形模块化的仿真模型,包括:(a)设定仿真模型的内部参数,包括积分项的初始条件等;(b)设定Simulink仿真参数,通过Simulation/Configuration Parameters菜单设置,设定开始时间、终止时间、求解器;(c)设定RTW代码,指定RTW系统目标文件、模板联编文件和联编命令文件;
将RTW生成文件设置为grt.tlc,模板联编文件和联编命令文件保持默认设置,各项参数设置完后,点击“Build”按钮,生成C语言代码,生成的C语言代码文件默认保存在MATLAB安装目录下的 work\model_grt_rtw 目录下,所述del为用户自定义的仿真模型名称;
用VC++6.0软件打开位于MATLAB安装目录下的 work\model_grt_rtw \model.mak 文件,创建一个Win32控制台(Win32 Console Application)类型的工程,此工程在安装目录MATLABROOT\rtw\c\libsrc\下,包括C源文件和头文件,这些C源文件提供了模型运行中的函数支持,此工程的主文件在MATLABROOT\rtw\c\grt目录下,文件名称为 grt_main.c;
步骤三:实时性改造和移植C语言程序代码:
(1)分析仿真模型转化的C语言程序代码结构
分析Simulink的图形模块化的仿真模型转化的C语言程序代码即grt_main.c和
model.c文件,仿真程序包括三部分:(a)初始化部分,由模型函数MODEL()、初始参数的个数函数MdlInitializeSizes()、 采样时间函数MdlInitializeSampleTimes()、启动函数MdlStart()函数组成;(b)循环部分,找到并实时处理帧循环部分单步仿真函数rt_OneStep(),及其包含的数据输出函数MdlOutputs()、更新状态函数MdlUpdate()函数;
(c)仿真结束处理部分,结束函数为dlTerminate(),对初始化部分和仿真结束处理部分的数据记录、清理都不作实时处理;
(2)构建实时仿真程序
RTX实时仿真程序采用Win32进程与RTSS进程相结合的方法,将全部仿真程序包括初始化、帧循环、仿真结束处理都放在RTSS进程运行,代码包括:
RtOpenSharedMemory()      //调用打开由Win32进程创建的共享内存,并映射指针变量
Initialize global memory:          //初始化全局变量
memset(&GBLbuf, 0, sizeof(GBLbuf));//设置内存变量
Initialize the model:              //初始化模型数据空间
rt_InitInfAndNaN();
S = MODEL();
MdlInitializeSizes();           //设置输入/输出/状态/参数的个数
MdlInitializeSampleTimes();     //设置采样时间
rt_SimInitTimingEngine();       //开始计时
rt_CreateIntegrationData();     //积分
MdlStart();                     //启动
RtCreateTimer();                //创建定时器
RtSetTimerRelative();         //设置定时周期,开始仿真帧循环
rt_OneStep(S);                //单步仿真
MdlTerminate();               //仿真结束
Win32进程仅负责共享内存的创建、RTSS进程的载入,负责RTSS仿真过程的控制及仿真结果的显示功能,并通过共享内存向RTSS进程发送控制命令、读RTSS仿真数据及状态信息,包括:
RtCreateSharedMemory();      //创建的共享内存,共享内存初始化,映射指针变量;
CreateProcess();             //运行RTSSRUN,载入并运行RTSS进程;
RtUnmapSharedMemory();       //释放共享内存;
return(EXIT_SUCCESS);        //反馈仿真过程完成状况;
将经过实时性改造的代码移植到基于RTX的仿真程序框架结构中;
(3)建立RTSS工程
用VC++6.0软件创建一个实时子系统(RTSS)应用(Application)类型的工程,在该工程中加入实时工作间(RTW)生成的代码文件,将主程序文件替换为MATLAB的grt_main.c文件,然后对该文件代码进行修改,修改的内容有:(a)在main()函数中加入创建共享内存函数RtOpenSharedMemory(),用于打开由Win32主程序建立的共享内存;(b)调用定时器函数RtCreateTimer()和 设置时间间隔函数RtSetTimerRelative(),创建定时器并设置时间间隔即帧周期;(c)编写定时器回调函数代码,将单步仿真程序rt_OneStep()移到该函数中;(d)去掉原代码中帧循环部分,改为检查共享内存中控制命令字节程序;(e)删除原程序中有关显示及数据记录的函数;(f)将该工程编译连接后生成可执行文件,扩展名为.rtss;
(4)建立Win32工程
用VC++6.0软件建立Win32中控制台或微软基础类(简写为MFC)类型的Win32工程,加入以下程序代码:(a)调用 RtCreateSharedMemory()函数创建共享内存,进行共享内存的初始化;(b)通过CreateProcess()函数运行RTSSrun程序,载入并运行由RTSS工程生成的.rtss程序;(c)查询共享内存的RTSS状态字节,等待RTSS进程的“就绪”状态,然后写“允许仿真”命令;(d)进入帧循环阶段,读共享内存,存储、显示仿真过程的有关数据;(e)设置“结束仿真”命令;(f)仿真结束,存储数据,调用RtUnmapSharedMemory()函数释放共享内存。

说明书全文

一种基于仿真软件Simulink实时扩展RTX的飞行器实时仿真

程序的编程方法

技术领域

[0001] 本发明属于仿真程序的编程方法领域,具体涉及一种基于仿真软件Simulink实时扩展RTX的飞行器实时仿真程序的编程方法

背景技术

[0002] 在实验室的专用仿真计算机上,例如“河”大型仿真计算机,编制飞行器实时仿真程序是已有技术。但是,在实验室的专用仿真计算机造价昂贵,日常使用不方便;该专用仿真计算机的编程工具是“银河”计算机专用软件(“银河”Sim),它使用了传统的语句式编程方法,每一条语句代码都要用户自己编写,效率较低;另外,利用专用仿真计算机的编程工具编制的程序,难以移植到普通办公电脑、商用笔记本、家庭电脑上,兼容性不佳,日常办公、升级维护都不方便。这就造成了飞行器实时仿真程序的编程工作效率低、程序不通用。

发明内容

[0003] 为了解决已有技术存在的问题,为了在普通计算机上高效率编制兼容性好的飞行器实时仿真程序, 本发明提供了一种基于仿真软件Simulink实时扩展RTX的飞行器实时仿真程序的编程方法。
[0004] 几个定义:(1)仿真组件(Simulink)是数学计算软件(MATLAB)的一个重要组件,可以在普通计算机上运行;(2)视窗操作系统(Windows)是面向对象的操作系统,没有实时性;
(3)实时扩展(Real Time Extension,简写为:RTX)属于视窗操作系统(Windows)内扩展的实时功能模,是直接面向硬件系统的功能模块,为程序提供了实时环境,支持程序实时运行;
本发明提供的一种基于仿真软件Simulink实时扩展RTX的飞行器实时仿真程序的编程方法,包括步骤如下:
步骤一:开发基于RTX的程序:
安装RTX,在其可视化编程工具(Visual Studio)集成开发环境中,有开发RTX软件的实时扩展应用程序编程向导(RTX AppWizard),使用该向导,设置所需的应用程序框架,包括定时器、中断、事件管理、端口输入输出及RTX动态链接库,在该框架基础上添加程序代码,编译链接后生成RTX应用程序;
步骤二:基于MATLAB的Simulink的仿真建模:
(1)用Simulink仿真建模:
Simulink采用图形模块化、交互式操作方式,建模时使用鼠标拖放不同模块库中所需要的功能模块图标,并将它们连接起来,创建仿真模型,在仿真组件(Simulink)中,使用鼠标拖放不同模块库中所需要的功能模块图标,将它们连接起来,创建仿真模型,设置模型名为model;
(2)编写S-函数
用C语言编写MEX文件的S-函数,实现仿真程序与硬件接口的联接,包括回调函数:
mdlInitializeConditions();     //初始化状态变量;
mdlOutputs ();                 //数据输出;
mdlUpdate();                   //更新离散状态;
mdlDerivatives ();             //求导数;
mdlZeroCrossings ();           //过零检查;
打开MATLAB提供的用C语言编写MEX文件的S-函数的模板文件sfuntmpl_doc.c,分析该文件定义的各回调函数的结构和详细注释,参考模板文件中各回调函数的注释和结构,编写S-函数;
(3)生成C语言代码
设置图形模块化的仿真模型,包括:(a)设定仿真模型的内部参数,包括积分项的初始条件等;(b)设定Simulink仿真参数,通过Simulation/Configuration Parameters菜单设置,设定开始时间、终止时间、求解器;(c)设定RTW代码,指定RTW系统目标文件、模板联编文件和联编命令文件;
将RTW生成文件设置为grt.tlc,模板联编文件和联编命令文件保持默认设置,各项参数设置完后,点击“Build”按钮,生成C语言代码,生成的C语言代码文件默认保存在MATLAB安装目录下的 work\model_grt_rtw 目录下,所述del为用户自定义的仿真模型名称;
用VC++6.0软件打开位于MATLAB安装目录下的 work\model_grt_rtw \model.mak 文件,创建一个Win32控制台(Win32 Console Application)类型的工程,此工程在安装目录MATLABROOT\rtw\c\libsrc\下,包括C源文件和头文件,这些C源文件提供了模型运行中的函数支持,此工程的主文件在MATLABROOT\rtw\c\grt目录下,文件名称为 grt_main.c;
步骤三:实时性改造和移植C语言程序代码:
(1)分析仿真模型转化的C语言程序代码结构
分析Simulink的图形模块化的仿真模型转化的C语言程序代码即grt_main.c和
model.c文件,仿真程序包括三部分:(a)初始化部分,由模型函数MODEL()、初始参数的个数函数MdlInitializeSizes()、 采样时间函数MdlInitializeSampleTimes()、启动函数MdlStart()函数组成;(b)循环部分,找到并实时处理帧循环部分单步仿真函数rt_OneStep(),及其包含的数据输出函数MdlOutputs()、更新状态函数MdlUpdate()函数;
(c)仿真结束处理部分,结束函数为dlTerminate(),对初始化部分和仿真结束处理部分的数据记录、清理都不作实时处理;
(2)构建实时仿真程序
RTX实时仿真程序采用Win32进程与RTSS进程相结合的方法,将全部仿真程序包括初始化、帧循环、仿真结束处理都放在RTSS进程运行,代码包括:
RtOpenSharedMemory()      //调用打开由Win32进程创建的共享内存,并映射指针变量
Initialize global memory:          //初始化全局变量
memset(&GBLbuf, 0, sizeof(GBLbuf));//设置内存变量
Initialize the model:              //初始化模型数据空间
rt_InitInfAndNaN();
S = MODEL();
MdlInitializeSizes();           //设置输入/输出/状态/参数的个数
MdlInitializeSampleTimes();     //设置采样时间
rt_SimInitTimingEngine();       //开始计时
rt_CreateIntegrationData();     //积分
MdlStart();                     //启动
RtCreateTimer();                //创建定时器
RtSetTimerRelative();         //设置定时周期,开始仿真帧循环
rt_OneStep(S);                //单步仿真
MdlTerminate();               //仿真结束
Win32进程仅负责共享内存的创建、RTSS进程的载入,负责RTSS仿真过程的控制及仿真结果的显示功能,并通过共享内存向RTSS进程发送控制命令、读RTSS仿真数据及状态信息,包括:
RtCreateSharedMemory();      //创建的共享内存,共享内存初始化,映射指针变量;
CreateProcess();             //运行RTSSRUN,载入并运行RTSS进程;
RtUnmapSharedMemory();       //释放共享内存;
return(EXIT_SUCCESS);        //反馈仿真过程完成状况;
将经过实时性改造的代码移植到基于RTX的仿真程序框架结构中;
(3)建立RTSS工程
用VC++6.0软件创建一个实时子系统(RTSS)应用(Application)类型的工程,在该工程中加入实时工作间(RTW)生成的代码文件,将主程序文件替换为MATLAB的grt_main.c文件,然后对该文件代码进行修改,修改的内容有:(a)在main()函数中加入创建共享内存函数RtOpenSharedMemory(),用于打开由Win32主程序建立的共享内存;(b)调用定时器函数RtCreateTimer()和 设置时间间隔函数RtSetTimerRelative(),创建定时器并设置时间间隔即帧周期;(c)编写定时器回调函数代码,将单步仿真程序rt_OneStep()移到该函数中;(d)去掉原代码中帧循环部分,改为检查共享内存中控制命令字节程序;(e)删除原程序中有关显示及数据记录的函数;(f)将该工程编译连接后生成可执行文件,扩展名为.rtss;
(4)建立Win32工程
用VC++6.0软件建立Win32中控制台或微软基础类(简写为MFC)类型的Win32工程,加入以下程序代码:(a)调用 RtCreateSharedMemory()函数创建共享内存,进行共享内存的初始化;(b)通过CreateProcess()函数运行RTSSrun程序,载入并运行由RTSS工程生成的.rtss程序;(c)查询共享内存的RTSS状态字节,等待RTSS进程的“就绪”状态,然后写“允许仿真”命令;(d)进入帧循环阶段,读共享内存,存储、显示仿真过程的有关数据;(e)设置“结束仿真”命令;(f)仿真结束,存储数据,调用RtUnmapSharedMemory()函数释放共享内存。
[0005] 有益效果:本发明的一种基于仿真软件Simulink实时扩展RTX的飞行器实时仿真程序的编程方法, Simulink可以在普通计算机上运行,避免了使用专用仿真计算机和专用编程工具所带来的价格昂贵和使用专用仿真计算机及其编程工具给编程工作带来的不便因素。Simulink利用图形模块化编程方法,内置共享的图形模块,用户根据需要直接调用库中的图形模块,插入到程序当中,快速编程。Simulink的RTX是一个直接面向硬件的功能模块,它绕开了视窗操作系统的进程,为程序提供了实时运行环境。本发明提供了在普通计算机上编制飞行器实时仿真程序的方法,提高效率,程序兼容性好,费用低,方便工作。附图说明
[0006] 图1 Win32与RTSS相结合的应用程序框架的方框图
[0007] 图2 回调函数在总仿真程序中所处的位置及功能示意图。
[0008] 图3 RTW生成C语言程序代码的仿真程序的流程图
[0009] 图4 基于RTX的实时仿真程序框架结构示意图。
[0010]

具体实施方式

[0011] 一种基于仿真软件Simulink实时扩展RTX的飞行器实时仿真程序的编程方法。几个定义:(1)仿真组件(Simulink)是数学计算软件(MATLAB)的一个重要组件,可以在普通计算机上运行;
(2)视窗操作系统(Windows)是面向对象的操作系统,没有实时性;
(3)实时扩展(Real Time Extension,简写为:RTX)属于视窗操作系统(Windows)内扩展的实时功能模块,是直接面向硬件系统的功能模块,为程序提供了实时环境,支持程序实时运行;
一种基于仿真软件Simulink实时扩展RTX的飞行器实时仿真程序的编程方法,包括步骤如下:
步骤一:开发基于RTX的程序:
RTX的应用程序编程接口(Application Programming Interface,简写为:API)是基于视窗操作系统(Windows)32位环境的应用程序接口,也称为Win32应用程序,使开发者能够利用Win32开发经验、现有代码、开发工具来编写实时运行的程序,Win32和实时子系统(Real Time Sub-system,简写为:RTSS)都支持RTX的应用程序编程接口API , RTX的应用程序编程接口API包含Win32 的应用程序编程接口API的部分函数,称为实时扩展应用程序编程接口(简称RTX API) 的函数集。
[0012] 如图1所示,采用Win32和RTSS相结合方式开发实时程序,将有实时性要求的事务放在RTSS中处理。将人机界面等对实时性要求不高的事务放在Win32进程中处理, RTSS进程与Win32进程通过共享内存的方式相互沟通。
[0013] RTX为程序开发人员提供了实时系统运行环境(RTX Runtime)和实时系统开发环境(Real Time Extension Software Development Kit,简写为:RTX SDK),用户可以像开发其他Windows应用程序一样,用Visual Studio开发RTX应用程序。
[0014] 安装RTX,在其可视化编程工具(Visual Studio)集成开发环境中,有开发RTX软件的实时扩展应用程序编程向导(RTX AppWizard),使用该向导,设置所需的应用程序框架,包括定时器、中断、事件管理、端口输入输出及RTX动态链接库,在该框架基础上添加程序代码,编译链接后生成RTX应用程序。
[0015]
[0016] 步骤二:基于MATLAB的Simulink的仿真建模:MATLAB的Simulink是国际上仿真领域常用的商业化计算机工具软件包,它提供了一个图形模块化、动态建模、仿真和综合分析的集成环境,无需用户手工编写大量的程序代码,只要通过简单的图形模块化鼠标操作,就可以构造出复杂的、可靠的、易读的仿真程序,显著提高了仿真程序的开发效率和质量,虽然MATLAB的Simulink没有硬件接口及实时仿真功能,但它的S-函数(System Function)机制和实时工作间(Real Time Workshop,简写为:
RTW)组件为开发实时仿真软件提供了有效的技术途径。
[0017] 首先用MATLAB的Simulink建立仿真模型,这期间需要编写S-函数,用以实现仿真程序与仿真设备硬件接口之间的联接,并将该S-函数加入到Simulink的仿真模型中,之后,完成仿真组件Simulink仿真模型设计,通过RTW将仿真模型编译成C语言代码,最后,对该C语言代码进行实时性改造,再移植到实时扩展RTX中,完成实时仿真程序设计。
[0018] (1)用Simulink仿真建模:Simulink是用图形模块化建模、分析和仿真各种动态系统的交互环境,包括连续系统、离散系统和连续离散混合系统,可以在普通计算机上运行,利用了图形模块化编程方法,具有独特功能的程序都制成了图形模块,置于库中,用于共享,用户可以根据需要直接调用库中的图形模块,插入到程序当中,完成编程,提高了编程效率;用户也可以将自己编写的程序制成图形模块,放入库中实现共享;
Simulink采用图形模块化、交互式操作方式,建模时使用鼠标拖放不同模块库中所需要的功能模块图标,并将它们连接起来,创建仿真模型,从而使复杂、繁琐的仿真模型设计问题简单化,还可以把若干功能块组合成子系统,建立起分层的、多级的复杂仿真模型,使仿真模型的组成结构清晰、明了,逻辑关系易读,提高了仿真建模的效率和质量。
[0019] (2)编写S-函数:仿真程序需要与仿真设备及实物部件之间进行通迅, Simulink本身不具备这个功能,用户可以通过编写S-函数来实现仿真程序与硬件接口的联接;
S-函数是采用计算机编程语言的方式描述的一个功能模块,它是Simulink建模的有扩充,它提供了增强和扩展Simulink功能的强大机制,同时也是使用RTW实现仿真的关键,在用户使用Simulink建模时,S-函数的编写方法同其它功能模块一样,可以采用MATLAB、C、C++、FORTRAN以及Ada等高级语言编写;
S-函数有两种类型,一种是M文件的S-函数, 用ATLAB语言来编写,所述M文件是TLAB中的命令文件、脚本文件;另一种是MEX文件的S-函数,用C、C++、Ada 或 Fortran 语言编写编译而成,所述MEX文件是MATLAB中用高级语言编写的衍生程序;用C语言编写MEX文件的S-函数是符合特定语法结构的回调函数:
mdlInitializeConditions();     //初始化状态变量;
mdlOutputs ();                 //数据输出;
mdlUpdate();                   //更新离散状态;
mdlDerivatives ();             //求导数;
mdlZeroCrossings ();           //过零检查;
每个回调函数都对应着一个预先指定的具体任务,各个回调函数在总仿真程序中所处的位置如图2所示。
[0020] MATLAB提供了用C语言编写MEX文件的S-函数的模板文件sfuntmpl_doc.c,该文件定义了各回调函数的结构,并有详细注释,参考各回调函数的注释,依据模板文件中的回调函数结构,用C语言编写MEX文件的S-函数。
[0021] (3)生成C语言代码RTW也是MATLAB的重要组成部分,是一个基于Simulink图形模块化的仿真模型转化成程序代码的工具,用户使用它可以直接从Simulink图形模块化的仿真模型生成优化的、可移植的、用户定制的C或Ada程序代码,并根据不同的目标配置生成可以在多种环境下运行的程序。
[0022] 在用RTW生成程序代码之前,需要对图形模块化的仿真模型进行设置,包括:(a)设定仿真模型的内部参数,包括积分项的初始条件等;(b)设定Simulink仿真参数,通过Simulation/Configuration Parameters菜单设置,设定开始时间、终止时间、求解器;(c)设定RTW代码,指定RTW系统目标文件、模板联编文件和联编命令文件。
[0023] RTW生成的程序代码不能直接用于RTX的实时环境中,还需要对该程序代码进行实时性改造,再移植到RTX的实时环境中,为此,先将RTW生成文件设置为grt.tlc,模板联编文件和联编命令文件保持默认设置,各项参数设置完后,点击“Build”按钮,生成C语言代码,生成的C语言代码文件默认保存在MATLAB安装目录下的 work\model_grt_rtw 目录下,所述del为用户自定义的仿真模型名称。
[0024] 用VC++6.0软件打开位于MATLAB安装目录下的 work\model_grt_rtw \model.mak 文件,创建一个Win32控制台(Win32 Console Application)类型的工程,此工程在安装目录MATLABROOT\rtw\c\libsrc\下,包括C源文件和头文件,这些C源文件提供了模型运行中的函数支持,工程的主文件在MATLABROOT\rtw\c\grt目录下,文件名称为 grt_main.c。
[0025] 步骤三:实时性改造和移植C语言程序代码:利用RTW将Simulink的图形模块化的仿真模型转化成了C语言程序代码,这是一种在Win32环境下运行的通用程序代码,还不具备实时性,没有仿真步长度量及推进功能,需要对其进行实时性改造和移植;
(1)分析仿真模型转化的C语言程序代码结构
分析Simulink的图形模块化的仿真模型转化的C语言程序代码即grt_main.c和
model.c文件,可以发现,仿真程序的流程如图3所示,仿真程序的流程包括三部分:(a)初始化部分,由模型函数MODEL()、初始参数的个数函数MdlInitializeSizes()、 采样时间函数MdlInitializeSampleTimes()、启动函数MdlStart()函数组成;(b)帧循环部分,是单步仿真函数rt_OneStep(),该函数包含了数据输出函数MdlOutputs()、更新状态函数MdlUpdate()函数;(c)仿真结束处理部分,结束函数为dlTerminate(),其中,需要实时处理的部分只有帧循环部分单步仿真函数rt_OneStep()及其包含数据输出函数MdlUpdate()、更新状态函数MdlOutput(),初始化部分和仿真结束处理部分的数据记录、清理工作都不需要实时处理。
[0026] (2)构建实时仿真程序RTX实时仿真程序采用Win32进程与RTSS进程相结合的方法,将全部仿真程序包括初始化、帧循环、仿真停止处理都放在RTSS进程运行,包括:
RtOpenSharedMemory()      //调用打开由Win32进程创建的共享内存,并映射指针变量;
Initialize global memory:          //初始化全局变量;
memset(&GBLbuf, 0, sizeof(GBLbuf));//设置内存变量;
Initialize the model:              //初始化模型数据空间;
rt_InitInfAndNaN();
S = MODEL();
MdlInitializeSizes();           //设置输入/输出/状态/参数的个数;
MdlInitializeSampleTimes();     //设置采样时间;
rt_SimInitTimingEngine();       //开始计时;
rt_CreateIntegrationData();     //积分;
MdlStart();                     //启动;
RtCreateTimer();                //创建定时器;
RtSetTimerRelative();         //设置定时周期,开始仿真帧循环;
rt_OneStep(S);                //单步仿真;
MdlTerminate();               //仿真结束;
RTSS进程独立运行全部仿真程序,并通过共享内存接收Win32进程的控制命令及参数,用定时器控制帧周期,在完成每一帧的计算后,将仿真结果存入共享内存,供Win32进程读取显示。
[0027] Win32进程仅负责共享内存的创建、RTSS进程的载入,负责RTSS仿真过程的控制及仿真结果的显示功能,并通过共享内存向RTSS进程发送控制命令、读RTSS仿真数据及状态信息,包括:RtCreateSharedMemory();      //创建的共享内存,共享内存初始化,映射指针变量;
CreateProcess();             //运行RTSSRUN,载入并运行RTSS进程;
RtUnmapSharedMemory();       //释放共享内存;
return(EXIT_SUCCESS);        //反馈仿真过程完成状况;
如图4所示,将经过实时性改造及代码移植后到基于RTX的仿真程序框架结构中。
[0028] (3)建立RTSS工程依据仿真程序结构编制仿真程序,用VC++6.0软件创建一个RTSS应用类型的工程,在该工程中加入RTW生成的代码文件,将主程序文件替换为MATLAB的grt_main.c文件,然后对该文件代码进行修改,修改的内容主要有:(a)在main()函数中加入创建共享内存函数RtOpenSharedMemory(),用于打开由Win32主程序建立的共享内存;(b)调用定时器函数RtCreateTimer()和 设置时间间隔函数RtSetTimerRelative(),创建定时器并设置时间间隔(即帧周期);(c)编写定时器回调函数代码,将单步仿真程序rt_OneStep()移到该函数中;(d)去掉原代码中帧循环部分,改为检查共享内存中控制命令字节程序;(e)删除原程序中有关显示及数据记录的函数,如打印函数printf()、开始环境清理函数rt_StartDataLogging()、更新指针变量函数rt_UpdateTXYLogVars()、结束环境清理函数rt_StopDataLogging();(f)将该工程编译连接后生成可执行文件,扩展名为.rtss。
[0029] (4)建立Win32工程用VC++6.0软件建立Win32中控制台或微软基础类(Microsoft Foundation Class,简写为:MFC)类型的Win32工程,加入以下程序代码:(a)调用 RtCreateSharedMemory()函数创建共享内存,并进行共享内存的初始化,如设置仿真帧周期等;(b)通过CreateProcess()函数运行RTSSrun程序,进而载入并运行由实时子系统(RTSS)工程生成的.rtss程序;
(c)查询共享内存的RTSS状态字节,等待RTSS进程的“就绪”状态,然后写“允许仿真”命令;
(d)进入帧循环阶段,读共享内存,存储、显示仿真过程的有关数据;(e)设置“结束仿真”命令;(f)仿真结束,存储数据,调用RtUnmapSharedMemory()函数释放共享内存。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈