146第十一章Simulink命令行仿真技术及回调函数概念前面的章节中,动态系统模型的建立、仿真及分析均是使用Simulink的图形建模和仿真方式实现的。虽然Simulink的图形建模方式能够给用户提供强大的功能与友好的使用界面,使用户可以完成大部分的动态系统的仿真分析工作。但在分析一些系统在不同的参数情况下的性能、在对系统进行调参以满足特定要求或分析系统在不同的输入信号的作用下的响应时,单纯使用Simulink的图形建模方式是非常不方便的。本章将介绍Simulink命令行仿真技术。所谓命令行仿真是指在进行动态系统设计、建模、仿真与分析中,使用MATLAB命令行的方式对系统的仿真分析进行控制和操作的方法。它允许用户可以从M文件来对动态系统进行仿真,这样用户就可以不断通过MATLAB工作空间改变系统仿真或模块的参数,循环地运行仿真。Simulink命令行仿真技术允许用户使用M文件对动态系统进行仿真分析,因而提出了如何在MATLAB命令中应用Simulink仿真计算的结果,对系统进行更深入的分析以及系统的Simulink仿真模型如何使用MATLAB的计算的参数等问题。为了是用户能够方便地使用命令行仿真技术,首先介绍Simulink与MATLAB的接口。11.1Simulink与MATLAB的接口Simulink是基于MATLAB的系统级仿真平台,它与MATLAB紧密地集成在一起。Simulink不仅能够采用MATLAB的求解器对动态系统进行求解,还可以与MATLAB进行数据交互(从MATLAB工作空间中读入数据或向MATLAB工作空间中写入数据)。11.1.1由MATLAB工作空间变量设置系统模块参数前面章节介绍的系统模块的参数均是采用模块参数设置对话框进行设置的。用户需要双击打开模块参数设置对话框,然后直接输入数据设置模块参数。这样需要调节参数大小时还需打开模块参数设置对话框设置模块参数,这样做就比较麻烦。解决这个问题的一个有效的方法是使用MATLAB工作空间中的变图11.1使用MATLAB工作空间变量设置模块参数147量设置系统模块参数。特别是当系统中有多个模块的参数依赖同一个变量时,使用这种方法非常便利。用户可以直接使用MATLAB工作空间中的变量设置模块参数;也可以使用变量表达式设置模块参数。例如,若k是定义在MATLAB中的变量,则表达式k、2kk+、()absk等均可以作为系统模块的参数。图11.1的仿真算例说明了如何利用MATLAB工作空间中的变量设置系统模块参数,仿真系统图中两个增益模块的增益值分别设置为k和k,在进行仿真时,这两个模块先从MATLAB工作空间读取k,然后确定出自己的增益。这里需要说明的一点是,如果系统模块参数设置中使用的变量在MATLAB工作空间中没有定义,仿真开始时SImulink会提示参数未定义信息。11.1.2将信号输出到MATLAB工作空间中前面章节在给出系统仿真结果时,都是使用示波器模块Scope输出需要观察的信号的。使用示波器模块可以使用户对输出信号进行简单的定性分析。但当需要对信号做进一步的定量分析或需要将多个信号绘制在一张图中,并分别对各信号进行标注时,用户就需要将系统模型中的相应信号输出到MATLAB工作空间中,然后再编写M文件进行定量分析。Simulink提供给用户多种将信号输出到MATLAB工作空间的方法,本小节我们一一做介绍。一、使用Sinks模型库中的ToWorkspace模块将信号输出至MATLAB工作空间这是一种昀直接昀方便的将信号输出到MATLAB工作空间的方法。图11.2给出了这种方法的使用说明。将需要输出的信号连至ToWorkspace模块的输入端。双击ToWorkspace模块打开该模块的参数对话框,见图11.2。此对话框中需要设置输出信号的名称、输出数据的点数、输出的间隔和输出数据的类型等。需要指出的是,数据输出类型有三种:数组、结构体及带时间变量的结构体。如果用户仅需进行数值分析,可以简单地设置数据输出类型为数组。见图11.2的示例。图11.2使用ToWorkspace模块向MATLAB工作空间输出信号148二、使用示波器Scope模块设置将信号输出至MATLAB工作空间只要用户选中Scope模块参数设置选项卡中包含的DataHistory选项卡中的选项Savedatatoworkspace,并进行适当的设置,就可以将Scope模块显示的信号输出到MATLAB工作空间。图11.3给出了如何设置Scope模块以便将信号输出至MATLAB工作空间的方法。同使用Toworkspace模块的方法相同,使用Scope模块将信号输出至MATLAB工作空间的数据保存类型也包含数组、结构体和带时间变量的结构体三种。三、使用SimulationConfigurationParameters仿真参数设置对话框中的DataImport/Export选项卡设置将信号输出至MATLAB工作空间除了上述的两种将信号从Simulink仿真中输出到MATLAB工作空间的方法以外,用户还可以使用SimulationConfigurationParameters仿真参数设置对话框中的DataImport/Export选项卡进行设置。具体的使用方法见例11.1。11.1.3使用MATLAB工作空间变量作为系统输入信号Simulink与MATLAB的信号、数据的交互是相互的,用户除了可以将信号输出到MATLAB工作空间以外,还可以使用MATLAB工作空间的变量作为系统仿真模型的输入信号。Simulink系统仿真模型从MATLAB工作空间输入信号的方法有两种:一、使用Sources模型库中的FromWorkspace模块使用Sources模型库中的FromWorkspace模块可以将MATLAB工作空间中的变量作为Simulink系统图11.3使用Scope模块向MATLAB工作空间输出信号149仿真模型的输入信号。可以输入到Simulink系统仿真模型中的变量的格式如下:t=0:time_step:final_time;%表示信号输入时间范围与时间步长x=func(t);%表示每一时刻的信号值input=[t’,x’]%表示信号的输入向量。输入变量的第一列必须是时间序列,后面的各列是信号序列例如:在MATLAB命令窗口中键入下列语句并运行。t=0:0.1:10;x=sin(t);input=[t',x'];在系统模型的FromWorkspace模块中使用该变量作为输入信号,如图11.4所示。读者可以运行此系统,观察仿真结果,如图11.5(a)。系统输入信号input的作用相当于Sources模型库中的SineWave模块。需要指出的是,FromWorkspace模块参数的默认设置是进行插值计算,即Simulink会对没有定义的时间点进行线性插值。如MATLAB命令窗口中键入语句t=[036910];x=[-11-111/3];input=[t',x'];将生成一个三角波。运行图11.4所示的系统仿真模型,仿真结果见图11.5(b)。可见,Simulink对MATLAB工作空间的输入信号input进行了线性插值。图11.4MATLAB工作空间变量作为系统输入信号150二、使用SimulationConfigurationParameters仿真参数设置对话框中的DataImport/Export选项卡设置使用SimulationConfigurationParameters仿真参数设置对话框中的DataImport/Export选项卡可以设置使用MATLAB工作空间中的变量作为Simulink系统仿真模型的输入信号。下面通过举例说明如何使用仿真参数设置SimulationConfigurationParameters对话框中的DataImport/Export选项卡将数据在MATLAB工作空间和Simulaton模型中之间进行交互。例11.1建立简单的仿真系统,要求:系统输入信号是单位幅值单位频率的正弦信号,由MATLAB工作空间中的变量提供;系统输出是输入的三倍,要求输出至MATLAB工作空间;使用MATLAB绘图命令绘制系统的输入和输出信号。解建立系统的Simulink仿真模型如图11.6。Sources模型库中的In1模块和Sinks模型库中的Out1模块都是虚模块,子系统中使用时,仅仅表示将信号传入或传出子系统。而在昀顶层的系统模型中使用时,可以通过它们从MATLAB工作空间中输入信号、将计算结果输出到MATLAB工作空间中。为了从MATLAB工作空间中输入信号并将计算结果输出到MATLAB工作空间中,打开SimulationConfigurationParameters仿真参数设置对话框中的DataImport/Export选项卡,见图11.6。如果MATLAB命令窗口中输入并运行命令:t=0:0.1:10;x=sin(t);采用默认的系统仿真参数运行系统仿真,使用MATLAB绘图命令:plot(t,x,tout,yout,'-.')可以绘制出系统的输入信号和输出信号,如图11.7所示。(a)正弦输入的仿真结果(b)三角波输入的仿真结果图11.5使用input信号做输入的仿真结果151图11.7系统输入和输出信号图11.6例11.1系统仿真模型及其DataImport/Export设置由工作空间输入信号存储数据类型输出仿真时间和信号至工作空间输出仿真时间输出状态量输出输出量状态量终值15211.2使用命令行方式对动态系统进行建模和仿真分析11.1节主要介绍了Simulink与MATLAB的接口,Simulink与MATLAB的数据交互是能够使用命令行进行数字仿真的前提。本节开始我们介绍如何使用命令行对动态系统进行建模和仿真分析。11.2.1使用命令行方式建立系统模型用户除了可以使用前面章节介绍的使用Simulink的图形建模方式建立动态系统的模型之外,也可以使用命令行方式建立系统的仿真模型。总的来说,使用命令行技术进行系统建模的方式使用的不多,这里我们仅仅给出命令行技术建模的命令,感兴趣的读者可以通过在线帮助了解各个命令的使用方法。Simulink中建立系统模型的命令如表11.1所示。表11.1系统模型建立命令命令功能new_system建立一个新的Simulink系统模型open_system打开一个已经存在的Simulink系统模型close_system,bdclose关闭一个Simulink系统模型save_system保存一个Simulink系统模型find_system查找Simulink系统模型、模块、连线即注释add_block在系统模型中加入指定模块delete_block从系统模型中删去指定模块replace_block替代系统模型中的指定模块add_line在系统模型中加入指定连线delete_line从系统模型中删去指定连线get_param获取系统模型中的参数set_param设置系统模型中的参数gcb获得当前模块的路径名gcs获得当前系统模型的路径名gcbh获得当前模块的操作句柄bdroot获得昀上层系统模型的名称simulink打开Simulink的模型库浏览器11.2.2使用命令行方式进行动态系统仿真使用命令行方式,用户可以编写并运行系统仿真的M文件来完成对动态系统的仿真,在M文件中,用户可以反复对同一系统在不同的仿真参数或不同的系统模块参数下进行仿真,这样就不需多次打开Simulink图形窗口,使用StartSimulation命令进行仿真。特别是当需要分析某个参数对系统仿真结果的影响时,用户可以很容易地使用for循环自动修改参数值。这样可以方便、快速地分析不同参数值对系统性能的影响。一、使用sim命令进行动态系统仿真1、调用格式sim命令是使用命令行技术进行动态系统仿真分析昀常用的命令。其完整的调用格式为[t,x,y]=sim(model,timespan,options,ut)[t,x