MATLAB/Simulink下实现实时一些方法总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MATLAB/Simulink下实现实时一些方法总结
总结了使用MATLAB/Simulink进行实时仿真时实现实时的几种方法,包括使用Real-time Workshop和编写S函数的方法,同时通过实验检验了C语言S 函数实时模块的功能。经仿真测试表明,在对时间精度要求不是很高的过程进行实时仿真和分析时,可以得到较好的效果。
标签:实时;MATLAB/Simulink;Real-time Workshop;S函数
1 概述
仿真技术由于能省去了实物系统实现过程中的繁琐步骤,对问题的解决有着良好的针对性,因此给科研和试验提供了很大的便利[1-3]。但另一方面,仿真由于对模型的依赖性,其结果并很难完全反映实际情况。因此,为了得到更接近实际情况的结果,可采用将数学模型与物理模型或实物相结合半实物仿真[1,2]。半实物仿真系统既包含虚拟对象,又包含实物对象,因此更真实地反映实际系统的动、静态特性和非线性因素。由于有实物的接入,半实物仿真对实时性有着较高的要求。
Matlab/Smulink在控制理论研究中是一个很优秀的仿真软件,可方便地对控制算法或控制对象进行建模和仿真实验[2-8]。在仿真情况下,仿真运行的时间取决于仿真机的运行速度和模型的复杂程度等因素,因此Matlab/Smulink模型运行的时间可能远小于实际过程的运行时间。但在半实物仿真中,实物对象的实际执行时间与模型仿真时间可能不一致,因此有必要使Simulink虚拟模型与外部连接的硬件运行同步,实现实时仿真,以获得接近实际情况的实验结果。要用Matlab/Smulink进行实时仿真,可以利用自带的Real-Time Workshop和Real-Time Windows Target、xPC Target等工具,也可编写能进行实时仿真的应用程序,灵活地实现实时[4-9]。本文将针对在Matlab/Smulink环境下的实时仿真、控制,探讨和总结一些实现实时的方法。
2 实现实时的方法
如前所述,用Matlab/Smulink进行实时仿真的方法主要有利用Matlab/Smulink自带的实时工具和自编实时程序两类。本文分别以Real-Time Workshop工具和自编S函数为例进行探讨。
2.1 用Real-Time Workshop实现实时
Real-Time Workshop(RTW)是一个和Simulink配套使用的工具[4,5]。RTW可以由Simulink框图生成优化的语言代码,再由生成的代码建立半实物仿真并产生实时控制与快速原型设计所需的应用程序,得到的应用程序可独立于MATLAB环境,因此能实现实时同步并可应用于实时的工业过程中。利用RTW 进行实时仿真的步骤大致如下:
首先,建立Simulink仿真模型;然后配置相关RTW参数,一般设置为定步长Fixed_Step,单任务single tasking,external模式;接着点击build按钮对目标进行编译,自动生成C代码文件,生成的C代码可用C或者C++编译器作适当修改,并编译连接。最后,点击connect按钮,与目标进行连接(connect to target),运行仿真模型,对系统过程进行分析。
值得指出的是RTW支持多种常用的I/O设备,例如模数转换器(A/D)、数模转换器(D/A)计数器(counter)等[6]。在Simulink模块库下双击xPC Target 模块组图标可相应显示出I/O设备的型号等。这样就可以将虚拟的Smulink模型与实际的受控对象或实际的控制器通过I/O设备和计算机连接起来,构成半实物仿真系统,进行仿真分析、过程控制等。
2.2 编写S函数实现实时
由于RTW只支持部分型号I/O设备的驱动,而且也不能直接和一些常用的控制软件进行实时通信,这给使用RTW进行实时仿真带来了一定的局限性。此时用户可根据需要,编写能实现特定功能的S函数(S-Function)。S函数可使用Matlab或者C语言编写。S函数编写灵活,只要在函数程序模板适当的位置加入自己的代码,然后编译,就生成实现相应功能的Simulink模块,并可以随时调用。而且,Matlab还给用户提供了开放性接口,可对系统的时钟和端口进行操作。这为用其他方法灵活实现实时仿真提供了可能。
根据S函数程序的执行流程,可以在计算离散状态更新值时设置一个空循环等待,原理如图1示,只有当模型实际运行时间current-start(即系统时间)达到设置的仿真时间t,仿真才结束,这样就可以使Simulink仿真时间与实际时间同步[6-9]。要注意的是,如果是C文件的S函数,还要用MATLAB的mex工具对其进行编译,生成.dll文件。在使用时,只要将生成的S函数模块添加到Simulink 模型中,便可使系统模型运行于实时时间。
为了验证这一实现实时的方法,根据图1所示的实现同步的原理,可把系统时间、仿真时间以及它们的时间差值作为系统的输出向量,编写名为“sfuntmpl_basic.c”的C文件,对其编译后生成sfuntmpl_basic.dll文件。然后建立控制过程半实物仿真平台[2],用上位机的控制软件对Matlab/Smulink虚拟对象进行实时控制。其中,adsoft S-函数模块是访问PCI-1710A/D的接口模块,把上位机的控制变量传递给虚拟对象;Dasoft S-函数模块实现虚拟对象与PCI-1710 D/A的对接,把被控变量输出给上位机;sfuntmpl_basic模块用于支持Simulink 模型进行实时运行。设置好仿真参数、仿真时间后,即可开始运行仿真。通过示波器Scope可观察到的sfuntmpl_basic实时功能模块输出响应曲线,从输出的结果分析中可知,仿真时间与系统时间基本重合,两者的时间差值也很微小[2]。另外,从控制软件实时监控界面可观测到控制效果,仿真过程也表明,控制软件能对Smulink虚拟对象进行实时控制[2]。并且,从仿真结果分析可知,利用这一方法对时间精度要求不是很高的过程仿真实现实时是可行的。