460 likes | 625 Views
图 4.24 系统模型框图注释. 4.4.2 信号标签与标签传递 1. 信号标签 在创建系统模型尤其是大型复杂系统模型时,信号标签对理解系统框图尤为重要。所谓的信号标签,也可以称为信号的“名称”或“标记”,它与特定的信号相联系,是信号的一个固有属性。这一点与系统框图注释不同,框图注释是对整个或局部系统模型进行说明的文字信息,它与系统模型相分离。. 生成信号标签的方法有如下两种:
E N D
4.4.2信号标签与标签传递 • 1. 信号标签 • 在创建系统模型尤其是大型复杂系统模型时,信号标签对理解系统框图尤为重要。所谓的信号标签,也可以称为信号的“名称”或“标记”,它与特定的信号相联系,是信号的一个固有属性。这一点与系统框图注释不同,框图注释是对整个或局部系统模型进行说明的文字信息,它与系统模型相分离。
生成信号标签的方法有如下两种: • (1) 使用鼠标左键双击需要加入标签的信号(即系统模型中与信号相对应的模块连线),这时便会出现标签编辑框,在其中键入标签文本即可。与框图注释类似,信号标签可以移动到希望的位置,但只能是在信号线的附近。如果强行将标签拖动离开信号线,标签会自动回到原处。当一个信号定义了标签后,从这条信号线引出的分支线会继承这个标签,如图4.25所示。
(2) 首先选择需要加入标签的信号,用鼠标左键单击信号连线;然后使用Edit菜单下的 Signal Properties项,在打开的界面中编辑信号的名称,而且还可以使用这个界面对信号作简单的描述并建立HTML文档链接,如图4.26所示。 • 注意,虽然信号标签的内容可以任意指定,但为了系统模型可读性,信号标签最好使用能够代表信号特征的名称(如信号类型、信号作用等)。
2. 信号标签的传递 • 在系统模型中,信号标签可以由某些称之为“虚块”的系统模块来进行传递。这些虚块主要用来完成对信号的选择、组合与传递,它不改变信号的任何属性。如Signals & Systems模块库中的Mux模块的功能是组合信号,但并不改变信号的值。 • 信号标签传递的方法有如下几种: • (1) 选择信号线并用鼠标左键双击,在信号标签编辑框中键入< >,在此尖括号中键入信号标签即可传递信号标签。
(2) 选择信号线,然后选择Edit菜单中的Signal Properties;或单击鼠标右键,选择弹出式菜单中的Signal Properties,将Show Propagated Signals设置为 on即可。 • 注意:只能在信号的前进方向上传递该信号标签。当一个带有标签的信号与Scope块连接时,信号标签将作为标题显示。信号标签的传递如图4.27所示。
4.4.3 Simulink子系统介绍 • 对于简单的动态系统而言,用户很容易建立系统模型并分析系统模型中各模块之间的相互关系,以及模块的输入输出关系。但是对于比较复杂的系统,系统模型中包含的模块数目较多,模块之间的输入输出关系比较复杂。这时对于分析与设计系统而言,都会给用户带来诸多的不便,而使用子系统技术则可以较好地解决这一问题
1. 子系统生成 • Simulink提供的子系统功能可以大大地增强Simulink系统模型框图的可读性。所谓的子系统可以理解为一种“容器”,此容器能够将一组相关的模块封装到一个单独的模块中,并且与原来系统模块组的功能一致。
子系统的建立方法有如下两种: • (1) 在已有的系统模型中建立子系统:首先框选待封装的区域,即在模型编辑器背景中单击鼠标左键并拖动,选中需要放置到子系统中的模块与信号(或在按下Shift键的同时,用鼠标左键单击所需模块);然后选择Edit菜单下的Create Subsystem,即可建立子系统。如图4.28所示。
(2) 建立空的子系统:使用Subsystems模块库中的模块建立子系统。这样建立的子系统内容为空,然后双击子系统对其进行编辑。如图4.29所示。
建立此系统模型所需要的系统模块如下所述:Subsystems模块库中的Subsystem模块、Sources模块库中的Sine Wave、Sinks模块库中的Scope模块、Sinks模块库中的Out1模块(Subsystem模块的缺省设置为单输入单输出,使用Out1模块可以产生多个输出)、Math模块库中的Gain模块以及Signals & Systems模块库中的Mux模块等。
2. 子系统操作 • 在生成子系统之后,用户可以对子系统进行各种与系统模块相类似的操作,这时子系统相当于具有一定功能的系统模块。例如,子系统的命名、子系统视图的修改、子系统的显示颜色等等。当然子系统也有其特有的操作,如子系统的显示(用鼠标左键双击子系统模块即可打开子系统)、子系统的封装(将在第7章中进行详细介绍)等等。
3. Inport输入模块与Outport输出模块 • 在系统模型中建立子系统时,Simulink会自动生成Inport模块(Sources模块库中的In1模块)与Outport模块(Sinks模块库中的Out1模块)。Inport模块作为子系统的输入端口,Outport作为子系统的输出端口,它们被用来完成子系统和主系统之间的通讯。 • Inport和Outport用来对信号进行传递,不改变信号的任何属性;另外,信号标签可以越过它们进行传递。如果需要建立多输入多输出的子系统,则需要使用多个Inport模块与Outport模块,而且最好使用合适的名称对Inport模块与Outport模块进行命名,如图4.30所示。
4.4.4建立复杂系统模型 • Simulink适合建立大型复杂系统的模型,它为仿真系统模型的界面组织与设计提供了强大的支持。一般而言,建立复杂系统模型有两种不同的思路: • (1) 自下向上的设计思路:如果用户从草图开始建立一个复杂的模型,可以先建底层模型,然后对已经建好的块生成子系统。 • (2) 自顶向下的设计思路:首先设计系统的总体模型,然后再进行细节设计。采用这种方法,可以在顶层使用空的子系统块,然后再实现具体的细节。
4.5 Simulink与MATLAB的接口设计 • 4.5.1 由MATLAB工作空间变量设置系统模块参数 • 如前所述,用户可以双击一个模块以打开模块参数设置对话框,然后直接输入数据以设置模块参数。其实,用户也可以使用MATLAB工作空间中的变量设置系统模块参数,这对于多个模块的参数均依赖于同一个变量时非常有用。由MATLAB工作空间中的变量设置模块参数的形式有如下两种:
(1) 直接使用MATLAB工作空间中的变量设置模块参数。 • (2) 使用变量的表达式设置模块参数。 • 例如,如果a是定义在MATLAB中的变量,则表达式a、a^2+5、exp(–a)等均可以作为系统模块的参数,如图4.32所示。
4.5.2 将信号输出到MATLAB工作空间中 • 使用示波器模块Scope的输出信号,可以使用户对输出的信号进行简单的定性分析。 • 使用Sinks模块库中的To Workspace 模块,可以轻易地将信号输出到MATLAB工作空间中。信号输出的名称在To Workspace模块的对话框中设置,此对话框还可以设置输出数据的点数、输出的间隔,以及输出数据的类型等。其中输出类型有三种形式:数组、结构以及带有时间变量的结构。仿真结束或暂停时信号被输出到工作空间中,如图4.33所示。
4.5.3 使用工作空间变量作为系统输入信号 • Simulink与MATLAB的数据交互是相互的,除了可以将信号输出到MATLAB工作空间中之外,用户还可以使用MATLAB工作空间中的变量作为系统模型的输入信号。使用Sources模块库中的From Workspace模块可以将MATLAB工作空间中的变量作为系统模型的输入信号。此变量的格式如下所示:
>>t=0:time_step:final_time; % 表示信号输入时间范围与时间步长 • >>x=func(t); % 表示在每一时刻的信号值 • >>input=[t',x']; • %表示信号的输入向量,输入变量第一列须为时间序列,接下来的各列代表信号的取值 • 例如,在MATLAB命令窗口中键入如下的语句并运行。 • >>t=0:0.1:10; • >>x=sin(t); • >>input=[t',x'];
运行此系统进行仿真,系统输入信号input的作用相当于Sources模块中的Sine Wave模块,其结果如图4.35所示(Scope1显示结果)。 图4.35 使用input信号作为输入的仿真结果
4.5.4 向量与矩阵 • 在前面的系统模型中,Simulink所使用的信号均是标量。其实,Simulink 也能够传递和使用向量信号。例如,向量增益可以作用在一个标量信号上,产生一个向量输出。在缺省情况下,模块对向量中的逐个元素进行操作,就像MATLAB中的数组运算一样,如图4.37所示。
Simulink 4最重要的特性就是支持矩阵形式的信号,它可以区分行和列向量并传递矩阵。通过对模块做适当的配置,可以使模块能够接受矩阵作为模块参数。在上面的例子中,如果Constant模块的参数为一矩阵,并且Gain增益模块被配置成按矩阵乘的定义从左边乘上输入向量,则Display 块能够感知到输入信号的尺寸,即1×2行向量,并对边框做适当调整,如图4.38所示。
4.5.5 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所示。
4.6 使用Simulink进行简单的仿真 • 【例4.1】 信号平方运算。系统的功能是对输入的信号进行平方运算。现要求建立系统的Simulink模型并进行简单的仿真分析。具体要求如下: • (1) 系统输入信号源:幅值为 2 的正弦波。 • (2) 使用Scope 显示原始信号和结果信号。 • (3) 生成系统运算部分的子系统
(4) 生成信号标签并传递。 • 解:首先选择系统所需的如下模块(组件): • (1) Sources 库中的Sine Wave块。 • (2) Math 库中的Product块。 • (3) Signals and Systems库中的Mux块。 • (4) Sinks 库中的Scope块。
然后进行如下的操作: • (1) 连接系统模块。 • (2) 选择一个包含Product和Mux块的区域,建立相应的子系统。 • (3) 在主系统中生成输入信号的标签,在子系统中生成输出信号的标签。 • (4) 传递信号的标签。 • (5) 改变输入和输出端口的名字。 • (6) 保存模型。
最后,进行模块参数设置并使用默认的仿真参数进行仿真。在本例中,只需要对系统输入信号源Sine Wave模块进行参数设置即可(双击Sine Wave模块),设置正弦信号的幅值为2,如图4.41所示。系统仿真结果如图4.42所示。
本章对Simulink的模型构建作了一个比较全面的介绍,对于不同领域的工程技术人员,都可以利用本章介绍的基本知识对大部分的系统进行建模与简单分析。至此,用户应该能够熟练快速地建立自己的系统模型。Simulink的功能非常强大,它可以大大提高系统设计、仿真与分析的效率。本章是Simulink最基础的知识。后面的章节将详细介绍使用Simulink进行系统仿真的高级技术,以及Simulink系统仿真的原理。本章对Simulink的模型构建作了一个比较全面的介绍,对于不同领域的工程技术人员,都可以利用本章介绍的基本知识对大部分的系统进行建模与简单分析。至此,用户应该能够熟练快速地建立自己的系统模型。Simulink的功能非常强大,它可以大大提高系统设计、仿真与分析的效率。本章是Simulink最基础的知识。后面的章节将详细介绍使用Simulink进行系统仿真的高级技术,以及Simulink系统仿真的原理。