Simulink基础教程Simulink是MATLAB系统建模与仿真的图形扩展。simulink的主要有优点之一,就是能够建立不能用转换方程表示的非线性系统的模型。simulink的另外一个有点就是能够设定初始值。当建立转换方程的时候,初始值设定为零。目录启动simulink模型文件基本元素简单例子运行simulink建立系统在simulink里面,系统是绘制在屏幕上的方块图。这其中有很多可用的功能方块,比如如传递函数,求和结点,还有一些虚拟的输入跟输出的方块,比如函数生成器或是示波器。simulink是跟matlab相关联的,数据可以在程序之间相互传递,在本教程中,我们将会把simulink应用在MATLAB教程的建模实例中,并对模型进行仿真,Simulink的支持在Unix,Macintosh和Windows环境下运行,并包含在学生版MATLAB中供个人电脑使用。对于Simulink的更多信息,请访问该页面顶部的Mathworks公司链接。这些教程背后的想法是,你可以在一个窗口中运行的Simulink同时在另一个窗口中查看它们。系统模型文件可以从教程下载,并在Simulink中打开。您可以对这些系统进行建模和扩展,同时学习使用Simulink进行系统建模,控制和仿真。不要将教程中的窗口图标和菜单跟实际的Simulink的窗口弄混。大多数图像在这些教程都不能使用–他们只是显示你应该在你自己的Simulink窗口看到的。所有Simulink的操作应该在你的Simulink窗口来完成。启动simulink启动simulink在MATLAB中启动simulink遵循如下步骤:Simulink你也可以点击MATLAB最上面的图标启动simulink当它启动之后,你能看到下面一个带SimulinkLibraryBrowser标题的窗口模型文件在simulink里面,一个模型是由许多模块组成的,这些模块和在一起组成一个系统。另外,在一个空白模型窗口里面建立一个模型,以前保存的模型文件可以从文件菜单或从MATLAB命令提示符加载。作为范例,通过点击下面的链接下载模型文件并保存在MATLAB的启动目录里面。simple.mdl通过在MATLAB命令窗口输入以下指令,在Simulink中打开这个文件。(或者,您可以使用Open选项在Simulink中的文件菜单中加载该文件,或者通过点击Simulink中的Ctrl-O)。Simple应当出现如下的建模窗口可以通过在simulink窗口里面点击菜单栏里面的额新建选项新建一个新的文件(或是按Ctrl-N)基本元素在simulink里面主要有两大类:模块跟连线。模块用于生成、修改、合并、输出和显示信号。线是用来将信号从一个模块传递到另一个模块。模块在simulink里面有几类常见的模块•Sources:用来产生不同的信号•Sinks:用来输出和展示信号•Continuous:连续时间系统元素(转换方程,状态时间模型,PID控制等等)•Discrete:线性,离散时间系统元素(离散转换方程,离散状态时间模型等等)•MathOperations:包含许多基本的数学运算(增益,求和,乘积,绝对值等等)•Ports&Subsystems:包含建模用的许多有用模块模块有零个或多个输入端,也有零个或多个输出端,不用的输入端用小三角表示,不用的输出端用小三角点表示,如下所示的模块,左边是输入端,右边是输出端。连线连线能够根据箭头方向传递信号,连线只能够将信号从一个模块的输出端传递到另一个模块的额输入端,但是也有例外,一条连接线可以跟另外一条连接线连接上,可以将信号分开传给两个不同的模块,下面给出了一个例子(点击此处下载建模文件split.mdl)多条线的信号不能直接合并到一条线上,必须通过一个模块,比如说summing模块。信号可以是一个标量信号或也可以矢量信号,对于单输入单输出(SISO)系统,一般使用标量信号,用于多输入,多输出(MIMO)系统,一般使用矢量信号,包括两个或多个标量信号,用于传输标量和矢量信号线是相同的,同一条线传递信号的类型是由模块的任一端确定的。简单例子这个简单的例程包括三个模块:Step,TransferFunction,和Scope。Step是一个信号源,能够产生阶跃信号,信号沿着箭头的方向通过连接线传递给TransferFunction这个连续模块,TransferFunction这个模块能够将输入信号进行重新构造并且沿着线给scope输出一个新的信号,scope模块是一个显示模块能够跟示波器一样展示信号。在simulink里面还有更多的模块,一些后面我们陆续还会讲到,现在我们要测试一下我们在简单例程中用到的模块。修改模块双击模块可以对模块进行修改,例如,双击简单例程里面的TransferFunction模块,你可以看到如下的对话框:这个对话框包含了转换方程的分子跟分母。通过输入含有目标分子或分母多项式的系数向量,可以得到目标转换方程。例如,分母变为(1)将下面的向量输入到分母域[124]点击关闭窗口,可以得到如下的模型这反映了转换方程的分母变化。Step模块也可以双击得到如下对话框在该对话框中的默认参数在t=1秒产生一个阶跃函数,从初始值0到1(换言之,t=1单位阶跃函数)。每个参数可以被改变。在继续操作之前关闭该对话框。这三个模块里面最复杂的是scope模块,双击进去可以得到一个黑色的显示屏:当simulink在运行的时候,反馈到scope模块中的信号会再该窗口中显示出来,本教程也包含了scope模块的一些细节操作,我们将要使用的唯一一个功能是自动定量按钮,在窗口上部分看起来是一副双筒望远镜的按钮。运行simulink要运行simulink,我们可以参照下面的建模文件simple2.mdl下载并在simulink里面打开这个文件,你会看到如下的窗口在运行这个系统的simulink之前,首先先双击scope模块打开scope窗口,然后,既可以选择simulink菜单里面的start来运行simulink,也可以点击屏幕上方的play按钮或是Ctrl+T。Simulink将会快速运行,scope窗口将会做如下展示:注意到simulink的输出(黄色部分)相对于坐标轴来说非常平缓,我们可以点击autoscale按钮,坐标轴将会随之改变,如下所示:注意到阶跃响应并不是在t=1的时候开始的,这个可以通过双击step模块来进行修改,现在我们可以修改系统的参数重新进行仿真,双击transferfunction模块并将参数修改为[120400]运行simulink(Ctrl+L)在scope窗口里面你会看到一条扁平的线,点击autoscale按钮,你会得到如下的scope:请注意,自动缩放按钮仅改变纵坐标。由于新的传递函数有一个非常快的响应时,所以窗口会被压缩成很窄的一部分。这不是范围的问题,而与仿真本身有关。SIMULINK仿真时间一共是10秒但是1秒以后系统就达到了稳态。要纠正这一点,你需要改变simulink本身的参数。在模型窗口中,选择从模拟菜单配置参数。你会看到下面的对话框。要纠正这一点,你需要改变simulink本身的参数。在模型窗口中,选择从模拟菜单配置参数。你会看到下面的对话框。还有许多的仿真参数选项,我们只关注起始时间跟终止时间,这将会控制simulink在哪个时间段进行模拟,将起始时间从0.0改为0.8(因为阶跃在t=1的时候才开始),将终止时间从10.0改为2.0,这也是在系统刚稳定之后,关闭对话框并重新运行模拟。击中自动缩放按钮后,示波器窗口应该提供一个更好的显示阶跃响应的,如下图所示:建立系统在这一部分我们将学习如何利用simulink里面BlockLibraries里面的模块搭建一个系统,你将会搭建下面的系统。如果你想下载这个复杂的模型,点击这里首先,你需要从库里面收集所需要的模块。然后修改这些模块使之与所期望的模块相对应。最后,用连线使模块成为一个整体。然后,可以对系统进行模拟来验证它的工作原理。收集模块按照以下步骤来收集所需要的模块•建立一个新的模型(从菜单栏里面新建或是按Ctrl+L),建立一个空白的模型•在simulink窗口里面点击sources列单•这会得到sources的模块库,sources是用来产生信号的•将step模块从sources窗口里面拖入到模型窗口的右边•在simulink窗口里面点击mathoperation列表•在这个库里面,将sum和gain模块拖入到模型窗口里面,并按顺序放在step模块的右边•在simulink窗口里面点击continuous列表•首先,在这个库里面讲PIDController模块拖入到模型窗口里面并放在gain模块的右边•在同一个库里面,将transferfunction模块拖入到模型窗口并放在PIDController模块的右边更改模块按照下面的步骤在你的模型里面更改模块•双击sum模块,因为你想将第二个输入,将+-输入到符号栏里面去,关闭对话框•双击gain模块,将增益改为2.5,关闭对话框•双击PIDController模块,改变比例增益为1,积分增益为2,关闭对话框•双击transferfunction模块,分子保持为[1],分母改为[124],关闭对话框•双击PIDController这个单词将其更改为PIController。•同理,将transferfunction模块改为plant,现在,所有的模型都已经准备就绪,你的模型应该如下所示将模块用线连接起来现在所有的模块都已经放置妥当,你需要按照以下步骤将模块连接起来•拖动鼠标,将线从step模块的输出端跟sum模块输入端的加法端连接起来,另外一种方法是点击step模块然后在sum模块上按Ctrl+Click将二者连在一起,你能得到如下窗口•产生的线应该有一个箭头,如果箭头是一条红色的虚线,那表明这条线没有连接上任何东西•你可以按照先前的步骤继续连接没有连接完全的线,只需要把他们当做输出端即可。另外,如果你想重画线,或该线连接到错误的终端,你应该删除该行并重新绘制它。要删除一条线(或任何其他对象),只需点击它,选择它,并按下删除键。•画线将sum模块的输出端跟gain模块的输入端连接起来,然后将gain模块和PI模块连接起来,PI模块和Plant模块连接起来,Plant模块跟scope模块连接起来,你将会得到如下所示的窗口•剩下的一条线是将Plant模块输出端的信号反馈到sum模块的减法端,这条线有两个不同点,首先,这条线构成了一个回路并且不遵循最短路线,所以要分几步完成;其次,有没有输出端子,必须使用现有的线路。•从sum的减法端竖直向下脱出一条线,然后松开鼠标,使得这条线不完整。从这条线的端点,单击并拖动到Plant和Scope之间的线上。现在模型应该如下所示:•最后,需要用一些标签来区别信号,双击你想要放置标签的位置,你可以在模型里面的任意位置放置标签,在引导step模块的线的上方双击,你会得到一个带有编辑光标的黑色文本框,如下所示:•在这个对话框里面输入r,标注参考信号然后在外面点击出表完成编辑。•用同样的方式来标注(e),(u),(y)这三个信号,你会得到如下所示的窗口:在菜单栏里面选择另存为用适当的名称来存储你的建模文件,完整的模型可以在这里找到。仿真现在模型已经建立完毕,你可以对模型进行仿真,在simulink菜单里面点击start来开始仿真,双击scope模块来观察输出信号,点击autoscale按钮你会得到如下所示的窗口从MATLAB中获取参数在某些情况下,诸如增益之类的参数,可以在MATLAB中计算并且在simulink里面得到应用,在这种情况下,没有必要将MATLAB中的计算结果直接应用到simulink中,例如,假设我们计算在MATLAB中的变量K。通过在MATLAB中输入一下命令提示符来仿效这一个增益变量。K=2.5这个变量可以应用在simulink的gain模块里面。在你的simulink模型里