-
1 文档
-
2 视频
-
3 PPT
应用Simulink进行仿真时,首先在仿真模型编辑窗口中搭建仿真模型,之后设置模块参数与属性,设置模型仿真参数,最后完成模型搭建执行Simulink仿真。下面通过一个实例说明Simulink建模与仿真的工作过程。
[例5-1]搭建仿真模型,实现两路正弦信号(频率分别为1Hz、10Hz)相乘,显示输出信号。
1. 建立空白的仿真模型
单击菜单条“新建”菜单下的“Simulink”选项,或者在Simulink主窗口下按“Ctrl+N”的快捷键可以建立一个空白的仿真模型文档,默认文件名“Untitled”,如图5-2所示。

图5-2 Simulink空白模型文件窗口
2. 选择模块添加到新建模型文件
在Simulink模块库中,选择模块添加到新建模型文件中的方法主要有两种,一是找到所需模块并选中,单击鼠标右键,在弹出的快捷菜单中选择“Add block to model untitled”菜单项进行添加,二是直接将这个模块拖入模型窗口中,完成该模块的添加。
本例从Simulink下的Sources子模块库中添加Sine wave模块,从Math opetations子模块库中添加Product模块,从Sinks子模块库中添加Scope模块,结果如图5-3所示。

图5-3 添加了模块的模型窗口
3. 模块参数设置
Simulink中几乎所有模块的参数(Parameters)都允许用户进行设置,双击要设置的模块就可以打开模块参数设置对话框,不同模块参数设置对话框的项目会不同。
Sine Wave模块参数设置对话框如图5-4所示,在参数设置中,生成方式(Sine type)有两种:Time based方式与Sample based方式。
• Time based方式,需要设置幅度(Amplitude)、偏移(Bias)、频率(Frequency)、初相(Phase)。
• Sample based方式,需要设置幅度(Amplitude)、每周期采样数(Samples per period)、偏移采样数(Number of offset samples)、采样时间(Sample Time)。
本例设置选择Time based方式,其中一个Sine Wave模块参数设置见图5-4,将产生频率为1Hz的正弦连续时间信号。
Product模块参数设置对话框如图5-5所示。“Number ofinputs”设置为2,表示将有两路信号进行相乘运算,采样时间(Sample time)设置为-1,表示继承,即与输入信号一致。

图5-4 Sine Wave模块参数设置对话框

图5-5 Product模块参数设置对话框
双击Scope模块,弹出如图5-6所示窗口。单击“Parameters”按钮,将弹出参数设置窗口“Genetal”属性页,如图5-7所示,其中“Number of axes”项设置输入端口数量;“Time range”项设置示波器时间轴的显示范围。“History”属性页如图5-8所示,“Limit data points to last”项设置限制输出数据点的数值,不选中该选项,即去除对号,使信号能够完全显示出来。选中“Save data to workspace”表示将示波器中的数据保存到工作空间,需要输入变量名称及数据类型。

图5-6 Scope模块窗口
-fareast-language:ZH-CN;mso-bidi-language:AR-SA'>模块参数设置对话框

图5-7 Scope参数设置Genetal属性页 5-8Scope参数设置History属性页
4.模块属性的设置
当模块已经位于模型窗口中,只要用鼠标在模块上单击就可以选中该模块,这时模块四周会出现淡蓝边框,四角上会出现灰色小方块,拖动这些小方块可以改变模块的大小。
模块可以改变模块名、隐藏模块名、改变模块名的位置、复制或删除模块。与参数设置对话框不同,所有模块的属性(Properties)设置对话框都是一样的。选定要设置属性的模块,单击鼠标右键在弹出的菜单中选择“Properties…”选项。在其弹出的对话框窗口中进行设置。对话框含有三个标签:General(通用)、Block Annotation(模块注解)和Callbacks(回调函数)。
5. 连接模块
从一个模块的输出端连线到另一个模块的输入端是Simulink搭建模型最基本的操作。方法是先移动鼠标指向模块的输出端,鼠标的箭头会变成十字形光标,这时按住鼠标左键,拖动鼠标到另一个模块的输入端,当连接的红虚线变成黑实线时,释放鼠标即完成了连接。
仿真时经常需要把信号输送到不同的接收端的情况,这时就需要分支结构的连线。可以先连接好一条线,然后把鼠标移到分支线的起点位置,先按下Ctrl键,按住鼠标,将连线拖到目标模块,松开鼠标和Ctrl键即可。
如果想要删除某条连线,可单击选中要删除的连线,直接按键盘上的Delete键或者执行菜单中Edit\Delete命令。
搭建完成的仿真模型如图5-9所示。

图5-9搭建完成的仿真模型
6. 进行模型参数设置并仿真
单击模型窗口菜单“Simulation”下的“Model Configuration Parameters”选项,在弹出的对话窗口中进行模型参数设置后仿真,并观察仿真结果,如果发现有不正确或不完善的地方,再对参数进行调整,直到满意。本例将模型参数中的“max step size”的值改为0.001,“stop time”改为2,点击菜单“Simulation”下的“run”或直接单击“run”按钮进行仿真,结果如图5-10所示。

图5-10仿真结果
如前所述,在仿真系统设计过程中,事先必须对仿真算法、输出模式等各种模型参数进行设置。点击菜单“Simulation”下的“Model Configuration Parameters”,将出现仿真参数配置窗口,如图5-11所示。

图5-11仿真参数设置对话窗
在模型参数设置窗中,左侧树状列表的内容有:解算器(Solver)、数据输入/输出(Data Import/Export)、优化(Optimization)、诊断方式(Diagnostics)、硬件工具(Hardware Implemention)、模型引用(Model Referencing)、仿真输出文件的格式(Simulation Target)、代码生成(Code Generation)和硬件描述语言编码生成(HDL Coder Generation),其中最重要的是解算器。
1. 解算器(Solver)
(1)仿真时间(Simulink time)
设置仿真起始时间和停止时间。
(2)解算器选项(Solver options)
仿真解算器的操作类型(Type)分为:Variable-step(变步长算法)和Fixed-step(固定步长算法)两种。变步长模式可以在仿真的过程中改变步长,提供误差控制和过零检测;固定步长在仿真过程中按固定的步长运算。用户选择适用系统的算法进行仿真分析,离散系统采用定步长算法进行仿真。
采用变步长时,Simulink会在保证仿真精度的前提下,从尽可能节约仿真时间的目的出发对仿真步长进行相应的改变。
Max step size:最大步长,它决定了解算器能够使用的最大时间步长,默认值为“仿真时间/50”,但对于仿真时间较长的系统可能带来取样点过于稀疏的问题。Relative tolerance:相对误差,默认值1e-3,该值在实际仿真中显得偏大。Initialstep size:初始步长,Absolutiontolerance:绝对误差。
(3)任务模式(Tasking and sample timeoptions)
采用固定步长解法时,用户需要设定任务模式(Taking mode)。其中,模式包括多任务(Multi Tasking)模式和单任务(Single Tasking)模式。当选择“Multi Tasking”时,Simulink会对不同模块间是否存在速率转换进行检查,当不同采样速率的模块直接相连时会给出错误提示;当选择“Single Tasking”时,Simulink则不会。选择“Auto”时,Simulink会根据模型中各模块速率是否一致决定使用“Multi Tasking”模式还是“Single Tasking”模式工作。
2. 数据导入/导出(Data Import/Export)
模型参数设置窗口中选择“Data Import/Export”,窗口界面如图5-12.

图5-12Data Import/Export对话窗
(1)从工作空间获取数据(Load from workspace)
从工作空间中载入数据,先选中“Input”复选框,在后面的编辑框内输入数据的变量名,一般时间变量定义为t,输入变量定义为u。Initial state:表示模块的初始状态,对模块进行初始化时,先选中“Initialstate”复选框。
外部载入数据变量必须是以下形式之一:
1)数组(array),一般是二维矩阵,第1列必须是升序排列的时间值,输入端将按端口号由低到高的顺序,依次逐列取值。例如,对输入变量[t,u]赋值如下:
t=(0:0.1:10)';
u=[sin(t),cos(t)];
2)带时间项的结构 (structure with time),该结构必须包含两个域:time和singals,time是一个列向量,指定仿真时间,singals是一个结构,包括values和dimensions。例如,输入变量改为a,对a赋值如下:
a.time=(0:0.1:10)';
a.signals(1).values=sin(a.time)
a.signals(1).dimensions=1
a.signals(2).values=cos(a.time)
a.signals(2).dimensions=1
3)结构(structure),结构型输入变量的time域是空的,即变量名a.time=[],simulink则会在每个仿真步长的时间内读入相应输入端口值。例如,对输入变量a赋值如下:
a.time=[];
t=(0:0.1:10)'
a.signals(1).values=sin(t);
a.signals(1).dimensions=1;
a.signals(2).values=cos(t);
a.signals(2).dimensions=1;
4)与端口相对应的结构,为每个端口填入一个结构变量。例如,输入变量[in1,in2]。
5)输入表达式,编辑框中可以直接输入有关时间的表达式。
(2)仿真数据存入工作空间(Save to workspace)
将输出保存到工作空间。在“Save to workspace”区域中,可以选择的输出选项有:Time(时间),States(状态),Output(输出端口)和Final state(最终状态)。Format用来说明返回数据的格式;Limitdata points to last:设定Simulation仿真结果存到工作空间的数据点数。Decimation:设定从仿真数据中抽取数据的采样因子,默认值1,若设n则每隔n-1个点保存一个值。
(3)保存选项(Save options)
用来设置工作空间的相关选项。“Output options”输出操作设置,变步长算法独有。有三种输出方式:细化输出(Refineoutput)、产生附加输出(Produceadditional output)和仅在指定的时刻产生输出(Producespecified output only)。
Refine output:根据设定的精细因子(Refine factor),在仿真采样时间点产生多个额外输出。这不会改变仿真的步长,通过改变精细因子来获得光滑的曲线是一个很好的办法;
Produce additional output:允许用户通过“Output times”指定额外的输出时间点,与Refune output不同的是,这个选项会改变步长;Produce specifiedoutput only:Simulation只在“Output times”指定的时间点上产生输出。
例如,假设某仿真在时间点0,2.5,5,7.5,10产生输出,当输出方式为:Refine output,精细因子设为2时,输出的时间点有:0,1.25,2.5,3.75,5,6.25,7.5,8.75,10。当输出方式为:Produceadditional output,Output times设为[1:10],输出的时间点有:0,1,2,2.5,3,4,5,6,7,7.5,8,9,10。当输出方式为:Produce specified outputonly,Output times设为[1:10],输出的时间点有:0,1,2,3,4,5,6,7,8,9,10。
[例5-2] 搭建模型,模型从工作空间获取输入数据,并输出数据到工作空间,执行后观察工作空间变量与模型的输出结果。
搭建完成的仿真模型如图5-13所示。

图5-13与工作空间输入输出数据
输入变量为[t,u],取值如前“Load from workspace”中举例值。对simin赋值如下:
t=(0:0.1:10)';
simin=[t,sin(t)];
示波器输出如图5-14所示。

图5-14scope输出结果
“Save toworkspace”默认设置时,在工作空间中,将产生tout,yout,simout变量。
3. 诊断方式(Diagnostics)
模型参数设置窗口中选择Diagnostics,窗口如图5-15所示。

图5-15Diagnostics对话窗
在“Diagnostics”选项卡中,主要是指定系统对一些事件或仿真过程中可能遇到的情况做出什么反应。反应的类型有以下几种:
(1)None:不做任何反应,不影响程序运行。
(2)Warning:显示警告信息,不影响程序的运行。
(3)Error:显示错误信息,终止运行的程序。
例如:“Blockpriority violation”项后面显示“warning”,表示当模块优先级指定错误时,将显示警告信息,不影响程序运行。

