Stateflow指南(6)

2018-12-01 16:22

的仿真参数使用默认的参数值进行仿真。默认的参数值由系统模型框图所决定。用户可以使用sim命令的options参数对可选参数进行设置,这样设置的仿真参数将覆盖模型默认的参数。

如果用户对连续系统进行仿真,必须设置合适的仿真求解器,因为默认的仿真求解器为变步长离散求解器(Variable Step Discrete Solver)。可以使用simset命令进行设置。

例子:

然后在MATLAB工作空间中定义输入变量sim_input如下: >> t=0:0.1:10; % 表示输入信号的时间范围 >> u=sin(t); % 产生输入正弦信号

>> sim_input=[t',u']; % 传递至Simulink系统模型的变量 ‘表示转置

接下来,采用默认的系统仿真参数并运行系统仿真。最后使用MATLAB命令绘制出原始输入信号与系统运算结果,如下所示:

>> plot(t,u,tout,yout,?--‘)%绘制系统输入信号与仿真结果,如图8.3所示. 注意: subplot(2,2,1) %设置在一个figure中显示2*2个图,当前显示第一个 plot(t,u,tout1,yout1,'.');%绘制当前的图像

2.仿真时间设置

在前面已经对sim命令中的仿真时间参数timespan设置做了介绍。timespan具有三种使用形式,根据不同动态系统仿真的不同要求,用户可以选择使用如下所示的不同形式进行系统仿真:

>>[t,x,y]=sim(model,tFinal)

>>[t,x,y]=sim(model,[tStart tFinal])

>>[t,x,y]=sim(model,[tStart outputTimes tFinal])

[tout1, x1, yout1]=sim('文件名',5); % 系统仿真时间范围为0至5 s,输出时间向量tout1由Simulink的求解器步长变化决定

>> [tout2, x2, yout2]=sim('文件名',[1 8]); % 系统仿真时间范围为1至8 s,输出时间向量tout1同样由Simulink的求解器步长变化决定

>> [tout3, x3, yout3]=sim('文件名',1:8);% 系统仿真时间范围为1至8 s,并且每隔1 s输出一次,即输出时间变量为% [1 2 3 4 5 6 7 8]

>> [tout4, x4, yout4]=sim('command_in_out',1:0.2:8);% 系统仿真时间范围为1至8 s,并且每隔0.2 s输出一次

3.外部输入变量设置

前面对动态系统command_in_out进行仿真时,通过设置Simulink仿真参数设置对话框中Workspace I/O中的外部变量输入,以使系统在仿真过程中从MATLAB的工作空间中获取输入信号sim_input。除了使用这种方法从MATLAB工作空间中获得系统输入信号之外,用户还可以通过使用sim命令中的ut参数来设置系统的外部输入信号。下面介绍如何使用ut参数设置外部输入信号。

1. ut参数的生成

用户可以使用命令[t,x,y]=sim(model,timespan, options,ut) 对动态系统进行仿真并且从MATLAB工作空间中输入变量。其中ut为一个具有两列的矩阵,第一列表示外部输入信号的时刻,第二列表示与给定时刻相应的信号取值。使用矩阵ut能够为系统模型最顶层的Inport模块提供外部输入,并将自动覆盖Simulink仿真参数设置对话框中Workspace I/O中的设置。此外,当输入信号中存在着陡沿边缘时,必须在同一时刻处定义不同的信号取值。例如,对于图8.7所示的一个类似于方波的信号。

产生此输入信号的MATLAB命令为

>>ut=[0 1;10 1;10 -1;20 -1;20 1;30 1;30 -1;40 -1;40 1;50 1]

2. 应用举例

仍以动态系统command_in_out为例说明如何使用sim命令的参数ut从MATLAB工作空间中获得输入信号。在MATLAB命令窗口中键入如下的命令: >> t=0:0.1:10; >> u=sin(t);

>>sim_input=[t',u'];

>> [tout1, x1, yout1]=sim('command_in_out',10);% 使用Simulink仿真参数对话框中的Workspace I/O从MATLAB工作空间中获得输入信号 >>u=cos(t);

>>ut=[t',u'];% 改变系统输入信号

>>[tout2,x2,yout2]=sim('command_in_out',10,[],ut);% 使用sim命令的ut参数获得系统输入信号,ut的使用会覆盖由Workspace I/O的系统输入设置, % 这一点可以在下面的系统仿真结果图形中反映出来 >>subplot(1,2,1); plot(tout1,yout1); >>subplot(1,2,2);plot(tout2,yout2);

%绘制系统在不同输入信号下的响应曲线,如图8.8所示

4.模块参数设置

虽然Simulink提供了多种系统输入信号,但并不能完全满足需要。Simulink允许使用用户自定义的信号作为系统输入信号。在Load form workspace框中,用户可以设置Matlab中的变量作为系统输入信号或是系统状态初始值,如下所述:

(1)Input:用来设置系统输入信号。其格式为[t,u],其中t、u均为列向量,t为输入信号的时间向量,u为相应时刻的信号取值,可以使用多个信号输入,如[t,u1,u2]。输入信号与Simulink的接口由Inport模块(In1模块)实现。

(2)xInitialstate:用来设置系统状态变量初始值。初始值xInitial可为行向量。

注意,使用xInitialstate所设置状态变量初始值会自动覆盖系统模块中的设置。另外,输入信号与状态变量需要按照系统模型中Inport模块(即In1模块)的顺序进行正确设置。

2.数据保存设置(Save option)

(1)Limit data points to last:表示输出数据的长度(从信号的最后数据点记起)。

(2)Format:表示输出数据类型。共有三种形式:Structure with Time(带有仿真时间变量的结构体)、Structure(不带仿真时间变量的结构体)以及Array(信号数组)。

一般型:

? 第一列表示时间

? 接下来的各列表示信号的值

? Simulink 使用线性插值得到中间点的数据 时间函数:

>> t=0:time_step:final_time; u=func(t); >> sim_data=[t‘,u‘]; 分段线性:

>> t=0:10; u=[0 1 0 1 0 1 0 1 0 1 0]; >> sim_data=[t‘,u‘]; 陡沿:

同一时间点定义两次,每次的信号值不同。 t=[0 1 1 2 3 3 4 5]; >> u=[0 1 0 1 1 0 1 0]; >> sim_data=[t',u'];

>> plot(sim_data(:,1),sim_data(:,2))

将信号输出到MATLAB工作空间中

使用示波器模块Scope的输出信号,可以使用户对输出的信号进行简单的定性分析。 使用Sinks模块库中的To Workspace 模块,可以轻易地将信号输出到MATLAB工作空间中。信号输出的名称在To Workspace模块的对话框中设置,此对话框还可以设置输出数据的点数、输出的间隔,以及输出数据的类型等。其中输出类型有三种形式:数组、结构以及带有时间变量的结构。仿真结束或暂停时信号被输出到工作空间中,

MATLAB Function与Function模块

除了使用上述的方式进行Simulink与MATLAB之间的数据交互,用户还可以使用Functions and Tables 模块库中的Function模块(简称为Fcn模块)或Functions and Tables 模块库中的MATLAB Function模块(简称为MATLAB Fcn模块)进行彼此间的数据交互。

Fcn模块一般用来实现简单的函数关系,在Fcn模块中: (1) 输入总是表示成u,u可以是一个向量。

(2) 可以使用C 语言表达式,例如sin(u[1])+cos(u[2])。 (3) 输出永远为一个标量。

MATLAB Fcn一般用来调用MATLAB函数来实现一定的功能,在MATLAB Fcn模块中: (1) 所要调用的函数只能有一个输出(可以是一个向量)。

(2) 单输入函数只需使用函数名,多输入函数输入需要引用相应的元素,如mean、sqrt、myfunc(u(1),u(2))。

(3) 在每个仿真步长内都需要调用MATLAB解释器。

使用Fcn模块与MATLAB Fcn模块进行Simulink与MATLAB之间的数据交互如图4.39所

示。


Stateflow指南(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:绿色生态农产品深加工项目可行性研究报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: