CN110674590A - 一种基于仿真软件Simulink实时扩展RTX的飞行器实时仿真程序的编程方法 - Google Patents
一种基于仿真软件Simulink实时扩展RTX的飞行器实时仿真程序的编程方法 Download PDFInfo
- Publication number
- CN110674590A CN110674590A CN201910946781.6A CN201910946781A CN110674590A CN 110674590 A CN110674590 A CN 110674590A CN 201910946781 A CN201910946781 A CN 201910946781A CN 110674590 A CN110674590 A CN 110674590A
- Authority
- CN
- China
- Prior art keywords
- simulation
- function
- program
- real
- time
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 75
- 238000004088 simulation Methods 0.000 claims abstract description 110
- 230000008569 process Effects 0.000 claims abstract description 47
- 230000006870 function Effects 0.000 claims description 99
- 238000012545 processing Methods 0.000 claims description 11
- 238000009434 installation Methods 0.000 claims description 9
- 238000005094 computer simulation Methods 0.000 claims description 7
- 230000000007 visual effect Effects 0.000 claims description 7
- 238000006243 chemical reaction Methods 0.000 claims description 6
- 238000011161 development Methods 0.000 claims description 6
- 238000004140 cleaning Methods 0.000 claims description 5
- 230000002452 interceptive effect Effects 0.000 claims description 4
- 238000013507 mapping Methods 0.000 claims description 3
- 238000005070 sampling Methods 0.000 claims description 3
- 230000018109 developmental process Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 4
- 238000013461 design Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 230000033772 system development Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
- 238000002054 transplantation Methods 0.000 description 1
Images
Landscapes
- Debugging And Monitoring (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Stored Programmes (AREA)
Abstract
本发明的一种基于仿真软件Simulink实时扩展RTX的飞行器实时仿真程序的编程方法,Simulink可以在普通计算机上运行,避免了使用专用仿真计算机和专用编程工具所带来的价格昂贵和使用专用仿真计算机及其编程工具给编程工作带来的不便因素。Simulink利用图形模块化编程方法,内置共享的图形模块,用户根据需要直接调用库中的图形模块,插入到程序当中,快速编程。Simulink的RTX是一个直接面向硬件的功能模块,它绕开了视窗操作系统的进程,为程序提供了实时运行环境。本发明提供了在普通计算机上编制飞行器实时仿真程序的方法,提高效率,程序兼容性好,费用低,方便工作。
Description
技术领域
本发明属于仿真程序的编程方法领域,具体涉及一种基于仿真软件Simulink实时扩展RTX的飞行器实时仿真程序的编程方法。
背景技术
在实验室的专用仿真计算机上,例如“银河”大型仿真计算机,编制飞行器实时仿真程序是已有技术。但是,在实验室的专用仿真计算机造价昂贵,日常使用不方便;该专用仿真计算机的编程工具是“银河”计算机专用软件(“银河”Sim),它使用了传统的语句式编程方法,每一条语句代码都要用户自己编写,效率较低;另外,利用专用仿真计算机的编程工具编制的程序,难以移植到普通办公电脑、商用笔记本、家庭电脑上,兼容性不佳,日常办公、升级维护都不方便。这就造成了飞行器实时仿真程序的编程工作效率低、程序不通用。
发明内容
为了解决已有技术存在的问题,为了在普通计算机上高效率编制兼容性好的飞行器实时仿真程序, 本发明提供了一种基于仿真软件Simulink实时扩展RTX的飞行器实时仿真程序的编程方法。
几个定义:(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()函数释放共享内存。
有益效果:本发明的一种基于仿真软件Simulink实时扩展RTX的飞行器实时仿真程序的编程方法, Simulink可以在普通计算机上运行,避免了使用专用仿真计算机和专用编程工具所带来的价格昂贵和使用专用仿真计算机及其编程工具给编程工作带来的不便因素。Simulink利用图形模块化编程方法,内置共享的图形模块,用户根据需要直接调用库中的图形模块,插入到程序当中,快速编程。Simulink的RTX是一个直接面向硬件的功能模块,它绕开了视窗操作系统的进程,为程序提供了实时运行环境。本发明提供了在普通计算机上编制飞行器实时仿真程序的方法,提高效率,程序兼容性好,费用低,方便工作。
附图说明
图1 Win32与RTSS相结合的应用程序框架的方框图。
图2 回调函数在总仿真程序中所处的位置及功能示意图。
图3 RTW生成C语言程序代码的仿真程序的流程图。
图4 基于RTX的实时仿真程序框架结构示意图。
具体实施方式
一种基于仿真软件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) 的函数集。
如图1所示,采用Win32和RTSS相结合方式开发实时程序,将有实时性要求的事务放在RTSS中处理。将人机界面等对实时性要求不高的事务放在Win32进程中处理, RTSS进程与Win32进程通过共享内存的方式相互沟通。
RTX为程序开发人员提供了实时系统运行环境(RTX Runtime)和实时系统开发环境(Real Time Extension Software Development Kit,简写为:RTX SDK),用户可以像开发其他Windows应用程序一样,用Visual Studio开发RTX应用程序。
安装RTX,在其可视化编程工具(Visual Studio)集成开发环境中,有开发RTX软件的实时扩展应用程序编程向导(RTX AppWizard),使用该向导,设置所需的应用程序框架,包括定时器、中断、事件管理、端口输入输出及RTX动态链接库,在该框架基础上添加程序代码,编译链接后生成RTX应用程序。
步骤二:基于MATLAB的Simulink的仿真建模:
MATLAB的Simulink是国际上仿真领域常用的商业化计算机工具软件包,它提供了一个图形模块化、动态建模、仿真和综合分析的集成环境,无需用户手工编写大量的程序代码,只要通过简单的图形模块化鼠标操作,就可以构造出复杂的、可靠的、易读的仿真程序,显著提高了仿真程序的开发效率和质量,虽然MATLAB的Simulink没有硬件接口及实时仿真功能,但它的S-函数(System Function)机制和实时工作间(Real Time Workshop,简写为:RTW)组件为开发实时仿真软件提供了有效的技术途径。
首先用MATLAB的Simulink建立仿真模型,这期间需要编写S-函数,用以实现仿真程序与仿真设备硬件接口之间的联接,并将该S-函数加入到Simulink的仿真模型中,之后,完成仿真组件Simulink仿真模型设计,通过RTW将仿真模型编译成C语言代码,最后,对该C语言代码进行实时性改造,再移植到实时扩展RTX中,完成实时仿真程序设计。
(1)用Simulink仿真建模:
Simulink是用图形模块化建模、分析和仿真各种动态系统的交互环境,包括连续系统、离散系统和连续离散混合系统,可以在普通计算机上运行,利用了图形模块化编程方法,具有独特功能的程序都制成了图形模块,置于库中,用于共享,用户可以根据需要直接调用库中的图形模块,插入到程序当中,完成编程,提高了编程效率;用户也可以将自己编写的程序制成图形模块,放入库中实现共享;
Simulink采用图形模块化、交互式操作方式,建模时使用鼠标拖放不同模块库中所需要的功能模块图标,并将它们连接起来,创建仿真模型,从而使复杂、繁琐的仿真模型设计问题简单化,还可以把若干功能块组合成子系统,建立起分层的、多级的复杂仿真模型,使仿真模型的组成结构清晰、明了,逻辑关系易读,提高了仿真建模的效率和质量。
(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所示。
MATLAB提供了用C语言编写MEX文件的S-函数的模板文件sfuntmpl_doc.c,该文件定义了各回调函数的结构,并有详细注释,参考各回调函数的注释,依据模板文件中的回调函数结构,用C语言编写MEX文件的S-函数。
(3)生成C语言代码
RTW也是MATLAB的重要组成部分,是一个基于Simulink图形模块化的仿真模型转化成程序代码的工具,用户使用它可以直接从Simulink图形模块化的仿真模型生成优化的、可移植的、用户定制的C或Ada程序代码,并根据不同的目标配置生成可以在多种环境下运行的程序。
在用RTW生成程序代码之前,需要对图形模块化的仿真模型进行设置,包括:(a)设定仿真模型的内部参数,包括积分项的初始条件等;(b)设定Simulink仿真参数,通过Simulation/Configuration Parameters菜单设置,设定开始时间、终止时间、求解器;(c)设定RTW代码,指定RTW系统目标文件、模板联编文件和联编命令文件。
RTW生成的程序代码不能直接用于RTX的实时环境中,还需要对该程序代码进行实时性改造,再移植到RTX的实时环境中,为此,先将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语言程序代码:
利用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(),初始化部分和仿真结束处理部分的数据记录、清理工作都不需要实时处理。
(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进程读取显示。
Win32进程仅负责共享内存的创建、RTSS进程的载入,负责RTSS仿真过程的控制及仿真结果的显示功能,并通过共享内存向RTSS进程发送控制命令、读RTSS仿真数据及状态信息,包括:
RtCreateSharedMemory(); //创建的共享内存,共享内存初始化,映射指针变量;
CreateProcess(); //运行RTSSRUN,载入并运行RTSS进程;
RtUnmapSharedMemory(); //释放共享内存;
return(EXIT_SUCCESS); //反馈仿真过程完成状况;
如图4所示,将经过实时性改造及代码移植后到基于RTX的仿真程序框架结构中。
(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。
(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()函数释放共享内存。
Claims (1)
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()函数释放共享内存。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910946781.6A CN110674590A (zh) | 2019-10-07 | 2019-10-07 | 一种基于仿真软件Simulink实时扩展RTX的飞行器实时仿真程序的编程方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910946781.6A CN110674590A (zh) | 2019-10-07 | 2019-10-07 | 一种基于仿真软件Simulink实时扩展RTX的飞行器实时仿真程序的编程方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110674590A true CN110674590A (zh) | 2020-01-10 |
Family
ID=69080768
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910946781.6A Pending CN110674590A (zh) | 2019-10-07 | 2019-10-07 | 一种基于仿真软件Simulink实时扩展RTX的飞行器实时仿真程序的编程方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110674590A (zh) |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111880796A (zh) * | 2020-07-30 | 2020-11-03 | 西安微电子技术研究所 | 一种多核模型架构实现方法及系统 |
CN112036023A (zh) * | 2020-08-26 | 2020-12-04 | 南京国电南自维美德自动化有限公司 | 一种发电机变压器组保护装置软件一体化生成系统 |
CN112231383A (zh) * | 2020-10-23 | 2021-01-15 | 江苏科技大学 | 一种Simulink仿真模型与SQL Server数据库通信的方法 |
CN112269579A (zh) * | 2020-11-02 | 2021-01-26 | 中电凯杰科技有限公司 | 一种基于stm32处理器的编译型plc控制器系统及实现方法 |
CN112613200A (zh) * | 2020-09-12 | 2021-04-06 | 山东科技大学 | 一种基于FPGA的Petri网模拟仿真平台 |
CN113110108A (zh) * | 2021-04-28 | 2021-07-13 | 北京星途探索科技有限公司 | 一种三层结构保障半实物仿真实时性的实现方法 |
CN113569333A (zh) * | 2021-06-24 | 2021-10-29 | 中国人民解放军63620部队 | 基于预编译指令的多种飞行器仿真模型并行开发维护方法 |
CN113705004A (zh) * | 2021-08-30 | 2021-11-26 | 中国电子科技集团公司第三十八研究所 | 一种适合dsp的实时系统行为级软件仿真方法 |
CN114201165A (zh) * | 2021-12-17 | 2022-03-18 | 北京世冠金洋科技发展有限公司 | 一种构建仿真模型的方法及装置 |
CN114859386A (zh) * | 2022-07-07 | 2022-08-05 | 中国人民解放军国防科技大学 | 一种基于rtx的实时卫星导航信号模拟器通用架构 |
CN116302080A (zh) * | 2023-05-24 | 2023-06-23 | 北京云道智造科技有限公司 | 一种仿真软件的零件单元的开发方法、装置及电子设备 |
CN116431317A (zh) * | 2023-06-12 | 2023-07-14 | 西安羚控电子科技有限公司 | 一种基于Vxworks仿真接口调度方法 |
CN116541131A (zh) * | 2023-06-29 | 2023-08-04 | 西安羚控电子科技有限公司 | 一种基于VxWorks实时系统的多模型运行方法及系统 |
CN117193782A (zh) * | 2023-08-04 | 2023-12-08 | 中国科学院软件研究所 | 一种从simscript语言到c语言的语法映射方法和装置 |
CN113032963B (zh) * | 2021-02-26 | 2024-04-09 | 北京经纬恒润科技股份有限公司 | 一种Simulink模型仿真加速方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107341010A (zh) * | 2017-06-26 | 2017-11-10 | 华中科技大学 | 一种C/C++与COStream混合编程方法和可视化编译系统 |
CN110221828A (zh) * | 2019-05-20 | 2019-09-10 | 一汽轿车股份有限公司 | 一种汽车电子控制单元通讯程序的可视化编程方法 |
-
2019
- 2019-10-07 CN CN201910946781.6A patent/CN110674590A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107341010A (zh) * | 2017-06-26 | 2017-11-10 | 华中科技大学 | 一种C/C++与COStream混合编程方法和可视化编译系统 |
CN110221828A (zh) * | 2019-05-20 | 2019-09-10 | 一汽轿车股份有限公司 | 一种汽车电子控制单元通讯程序的可视化编程方法 |
Non-Patent Citations (1)
Title |
---|
张培忠 等: "基于Simulink的RTX实时环境导弹半实物仿真编程技术研究" * |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111880796A (zh) * | 2020-07-30 | 2020-11-03 | 西安微电子技术研究所 | 一种多核模型架构实现方法及系统 |
CN112036023A (zh) * | 2020-08-26 | 2020-12-04 | 南京国电南自维美德自动化有限公司 | 一种发电机变压器组保护装置软件一体化生成系统 |
CN112036023B (zh) * | 2020-08-26 | 2023-06-27 | 南京国电南自维美德自动化有限公司 | 一种发电机变压器组保护装置软件一体化生成系统 |
CN112613200A (zh) * | 2020-09-12 | 2021-04-06 | 山东科技大学 | 一种基于FPGA的Petri网模拟仿真平台 |
CN112231383A (zh) * | 2020-10-23 | 2021-01-15 | 江苏科技大学 | 一种Simulink仿真模型与SQL Server数据库通信的方法 |
CN112231383B (zh) * | 2020-10-23 | 2024-01-26 | 江苏科技大学 | 一种Simulink仿真模型与SQL Server数据库通信的方法 |
CN112269579A (zh) * | 2020-11-02 | 2021-01-26 | 中电凯杰科技有限公司 | 一种基于stm32处理器的编译型plc控制器系统及实现方法 |
CN113032963B (zh) * | 2021-02-26 | 2024-04-09 | 北京经纬恒润科技股份有限公司 | 一种Simulink模型仿真加速方法及装置 |
CN113110108A (zh) * | 2021-04-28 | 2021-07-13 | 北京星途探索科技有限公司 | 一种三层结构保障半实物仿真实时性的实现方法 |
CN113569333A (zh) * | 2021-06-24 | 2021-10-29 | 中国人民解放军63620部队 | 基于预编译指令的多种飞行器仿真模型并行开发维护方法 |
CN113705004B (zh) * | 2021-08-30 | 2023-06-13 | 中国电子科技集团公司第三十八研究所 | 一种适合dsp的实时系统行为级软件仿真方法 |
CN113705004A (zh) * | 2021-08-30 | 2021-11-26 | 中国电子科技集团公司第三十八研究所 | 一种适合dsp的实时系统行为级软件仿真方法 |
CN114201165A (zh) * | 2021-12-17 | 2022-03-18 | 北京世冠金洋科技发展有限公司 | 一种构建仿真模型的方法及装置 |
CN114859386A (zh) * | 2022-07-07 | 2022-08-05 | 中国人民解放军国防科技大学 | 一种基于rtx的实时卫星导航信号模拟器通用架构 |
CN116302080A (zh) * | 2023-05-24 | 2023-06-23 | 北京云道智造科技有限公司 | 一种仿真软件的零件单元的开发方法、装置及电子设备 |
CN116431317A (zh) * | 2023-06-12 | 2023-07-14 | 西安羚控电子科技有限公司 | 一种基于Vxworks仿真接口调度方法 |
CN116431317B (zh) * | 2023-06-12 | 2023-09-01 | 西安羚控电子科技有限公司 | 一种基于Vxworks仿真接口调度方法 |
CN116541131A (zh) * | 2023-06-29 | 2023-08-04 | 西安羚控电子科技有限公司 | 一种基于VxWorks实时系统的多模型运行方法及系统 |
CN116541131B (zh) * | 2023-06-29 | 2023-09-22 | 西安羚控电子科技有限公司 | 一种基于VxWorks实时系统的多模型运行方法及系统 |
CN117193782A (zh) * | 2023-08-04 | 2023-12-08 | 中国科学院软件研究所 | 一种从simscript语言到c语言的语法映射方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110674590A (zh) | 一种基于仿真软件Simulink实时扩展RTX的飞行器实时仿真程序的编程方法 | |
CN111367511B (zh) | 一种仿真模型接口适配开发系统及其工作方法 | |
US7865350B1 (en) | Partitioning a model in modeling environments | |
US7954059B2 (en) | Automatic conversion of text-based code having function overloading and dynamic types into a graphical program for compiled execution | |
US7975233B2 (en) | Automatic conversion of a textual language into a graphical program representation | |
Fritzson | Modelica—A cyber-physical modeling language and the OpenModelica environment | |
Hong et al. | The application guide of mixed programming between MATLAB and other programming languages | |
US9952837B1 (en) | Reusable component in a modeling environment | |
US20110088019A1 (en) | Asynchronous Preemptive Edit Time Semantic Analysis of a Graphical Program | |
US6467082B1 (en) | Methods and apparatus for simulating external linkage points and control transfers in source translation systems | |
US20050155015A1 (en) | Static binding of nodes to virtual instruments in a graphical program | |
CN111309292B (zh) | 一种基于MATLAB/Simulink的全模型可执行程序构建方法 | |
CN111650847A (zh) | 执行机构模型在航空发动机硬件在回路平台的集成方法 | |
US6874148B1 (en) | System and method for exporting a graphical program to a shared library | |
US20040230944A1 (en) | Programmatic creation and management of tasks in a graphical program | |
CN115390809A (zh) | 一种仿真调度方法及系统 | |
US7490032B1 (en) | Framework for hardware co-simulation by on-demand invocations from a block model diagram design environment | |
CN111367579B (zh) | 一种基于v-rep插件的处理器在环仿真方法 | |
Luo et al. | Embedded C code generation and embedded target development based on RTW-EC | |
Nghiem | MLE+: a Matlab-EnergyPlus co-simulation interface | |
JPH08314760A (ja) | プログラム開発支援装置 | |
Eklund et al. | Optimizing life-cycle costs for pumps and powertrains using FMI co-simulation | |
CN112613200A (zh) | 一种基于FPGA的Petri网模拟仿真平台 | |
Rask et al. | Advanced VDM Support in Visual Studio Code | |
Fritzson | The Modelica object-oriented equation-based language and its OpenModelica environment with metamodeling, interoperability, and parallel execution |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20200110 |