《Simulink建模与仿真》由会员分享,可在线阅读,更多相关《Simulink建模与仿真(127页珍藏版)》请在金锄头文库上搜索。
1、第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真n n在计算机技术飞速发展的今天,许多科学研究、工程设计由在计算机技术飞速发展的今天,许多科学研究、工程设计由于其复杂性越来越高,因此与计算机的接合日趋紧密。也正于其复杂性越来越高,因此与计算机的接合日趋紧密。也正是计算机技术的介入,改变了许多学科的结构、研究内容和是计算机技术的介入,改变了许多学科的结构、研究内容和研究方向。例如,计算流体力学、计算物理学、计算声学等研究方向。例如,计算流体力学、计算物理学、计算声学等新兴学科的兴起,均与计算机技术的发展分不开。控制
2、理论、新兴学科的兴起,均与计算机技术的发展分不开。控制理论、仿真技术本身与计算机的接合就十分紧密,而随着专业领域仿真技术本身与计算机的接合就十分紧密,而随着专业领域的研究深入和计算机软硬件技术的发展,这种联系呈现更加的研究深入和计算机软硬件技术的发展,这种联系呈现更加紧密。计算控制论的建立,足以说明这个问题。而这种发展,紧密。计算控制论的建立,足以说明这个问题。而这种发展,又以系统仿真技术的发展分不开的。又以系统仿真技术的发展分不开的。n n为了满足用户对工程计算的要求,一些软件公司相继推出一为了满足用户对工程计算的要求,一些软件公司相继推出一批数学类科技应用软件,如批数学类科技应用软件,如M
3、atlabMatlab、XmathXmath、MathematicaMathematica、MapleMaple等。其中等。其中MathWorksMathWorks公司推出的公司推出的MatlabMatlab由于有强大的功由于有强大的功能和友好的用户界面受到越来越多的科技工作者的青睐,尤能和友好的用户界面受到越来越多的科技工作者的青睐,尤其是控制领域的专家和学者其是控制领域的专家和学者 . .第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真n nMatlabMatlab具有友好的工作平台和编程环境、简单易学的编程
4、语言、具有友好的工作平台和编程环境、简单易学的编程语言、强大的科学计算和数据处理能力、出色的图形和图像处理功能、强大的科学计算和数据处理能力、出色的图形和图像处理功能、能适应多领域应用的工具葙、适应多种语言的程序接口、模块化能适应多领域应用的工具葙、适应多种语言的程序接口、模块化的设计和系统级的仿真功能等,诸多的优点和特点。的设计和系统级的仿真功能等,诸多的优点和特点。n n支持支持MatlabMatlab仿真是仿真是SimulinkSimulink工具箱,工具箱,SimulinkSimulink一般可以附在一般可以附在MatlabMatlab上同时安装,也有独立版本来单独使用。但大多数用户都
5、上同时安装,也有独立版本来单独使用。但大多数用户都是附在是附在MatlabMatlab上,以便能更好地发挥上,以便能更好地发挥MatlabMatlab在科学计算上的优势,在科学计算上的优势,进一步扩展进一步扩展SimulinkSimulink的使用领域和功能。的使用领域和功能。n n本章详细地向用户介绍本章详细地向用户介绍本章详细地向用户介绍本章详细地向用户介绍SimulinkSimulinkSimulinkSimulink地建模方法、使用操作、以及使地建模方法、使用操作、以及使地建模方法、使用操作、以及使地建模方法、使用操作、以及使用用用用SimulinkSimulinkSimulinkSi
6、mulink进行系统级的仿真和设计原理。进行系统级的仿真和设计原理。进行系统级的仿真和设计原理。进行系统级的仿真和设计原理。使读者通过本章地学使读者通过本章地学习,不但可以进一步掌握计算机仿真的基本概念和理论,也可以习,不但可以进一步掌握计算机仿真的基本概念和理论,也可以初步学会使用初步学会使用SimulinkSimulink去真正地运用仿真技术解决科研和工程中去真正地运用仿真技术解决科研和工程中地实际问题。地实际问题。第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.1 Simulink7.1 Simuli
7、nk的概述和基本操作的概述和基本操作的概述和基本操作的概述和基本操作n n近几年来,在学术界和工业领域,近几年来,在学术界和工业领域,SimulinkSimulink已经成为动态系已经成为动态系统建模和仿真领域中应用最为广泛的软件之一。统建模和仿真领域中应用最为广泛的软件之一。SimulinkSimulink可可以很方便地创建和维护一个完整地模块,评估不同地算法和以很方便地创建和维护一个完整地模块,评估不同地算法和结构,并验证系统的性能。由于结构,并验证系统的性能。由于SimulinkSimulink是采用模块组合方是采用模块组合方式来建模,从而可以使得用户能够快速、准确地创建动态系式来建模,
8、从而可以使得用户能够快速、准确地创建动态系统的计算机仿真模型,特别是对复杂的不确定非线性系统,统的计算机仿真模型,特别是对复杂的不确定非线性系统,更为方便。更为方便。n nSimulinkSimulink模型可以用来模拟线性和非线性、连续和离散或者模型可以用来模拟线性和非线性、连续和离散或者两者的混合系统两者的混合系统,也就是说它可以用来模拟几乎所有可能遇,也就是说它可以用来模拟几乎所有可能遇到动态系统。另外到动态系统。另外SimulinkSimulink还提供一套图形动画的处理方法,还提供一套图形动画的处理方法,使用户可以方便的观察到仿真的整个过程。使用户可以方便的观察到仿真的整个过程。n
9、nSimulinkSimulink没有单独的语言,但是它提供了没有单独的语言,但是它提供了S S函数规则。函数规则。所谓所谓的的S S函数可以是一个函数可以是一个M M函数文件、函数文件、FORTRANFORTRAN程序、程序、C C或或C+C+语言语言程序等程序等, ,通过特殊的语法规则使之能够被通过特殊的语法规则使之能够被SimulinkSimulink模型或模模型或模块调用。块调用。S S函数使函数使SimulinkSimulink更加充实、完备,具有更强的处更加充实、完备,具有更强的处理能力。理能力。第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimuli
10、nk建模和仿真建模和仿真建模和仿真建模和仿真 7.1 Simulink7.1 Simulink的概述和基本操作的概述和基本操作的概述和基本操作的概述和基本操作n n同同MatlabMatlab一样,一样,SimulinkSimulinkSimulinkSimulink也不是封闭的也不是封闭的也不是封闭的也不是封闭的, , , ,他允许用户可他允许用户可他允许用户可他允许用户可以很方便的定制自己的模块和模块库。以很方便的定制自己的模块和模块库。以很方便的定制自己的模块和模块库。以很方便的定制自己的模块和模块库。同时同时SimulinkSimulink也也同样有比较完整的帮助系统,使用户可以随时找
11、到对应同样有比较完整的帮助系统,使用户可以随时找到对应模块的说明,便于应用。模块的说明,便于应用。n n综上所述,综上所述,SimulinkSimulinkSimulinkSimulink就是一种开放性的,用来模拟线性就是一种开放性的,用来模拟线性就是一种开放性的,用来模拟线性就是一种开放性的,用来模拟线性或非线性的以及连续或离散的或者两者混合的动态系统或非线性的以及连续或离散的或者两者混合的动态系统或非线性的以及连续或离散的或者两者混合的动态系统或非线性的以及连续或离散的或者两者混合的动态系统的强有力的系统级仿真工具。的强有力的系统级仿真工具。的强有力的系统级仿真工具。的强有力的系统级仿真工
12、具。n n目前,随着软件的升级换代,在软硬件的接口方面有了目前,随着软件的升级换代,在软硬件的接口方面有了长足的进步,使用长足的进步,使用SimulinkSimulink可以很方便地进行实时的信可以很方便地进行实时的信号控制和处理、信息通信以及号控制和处理、信息通信以及DSPDSP的处理。世界上许多的处理。世界上许多知名的大公司已经使用知名的大公司已经使用SimulinkSimulink作为他们产品设计和开作为他们产品设计和开发的强有力工具。发的强有力工具。第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.1
13、 Simulink7.1 Simulink的概述和基本操作的概述和基本操作的概述和基本操作的概述和基本操作图7.1.1 Simulink模型元素关联图 7.1.2 7.1.2 基本操作基本操作基本操作基本操作 一、模型基本结构一、模型基本结构一、模型基本结构一、模型基本结构 一个典型的一个典型的SimulinkSimulink模型包括如下三种类型的元素:模型包括如下三种类型的元素: 信号源模块信号源模块 被模拟的系统模块被模拟的系统模块 输出显示模块输出显示模块 如图如图7.1.17.1.1所示说明了这三种元素之间的典型关系。系统所示说明了这三种元素之间的典型关系。系统模块作为中心模块是模块作
14、为中心模块是SimulinkSimulink仿真建模所要解决的主要部分;仿真建模所要解决的主要部分;信号源为系统的输入,它包括常数信号源函数信号发生器信号源为系统的输入,它包括常数信号源函数信号发生器(如正弦和阶跃函数波等)和用户自己在(如正弦和阶跃函数波等)和用户自己在MatlabMatlab中创建的自中创建的自定义信号或定义信号或MatlabMatlab工作间中三种。输出模块主要在工作间中三种。输出模块主要在SinksSinks库库中。中。第七章第七章第七章第七章SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.1 Simulin
15、k7.1 Simulink的概述和基本操作的概述和基本操作的概述和基本操作的概述和基本操作n nSimulinkSimulink模型并不一定要包含全部的三种元素,在实际应用中模型并不一定要包含全部的三种元素,在实际应用中通常可以缺少其中的一个或两个。例如,若要模拟一个系统通常可以缺少其中的一个或两个。例如,若要模拟一个系统偏离平衡位置后的恢复行为,就可以建立一个没有输入而只偏离平衡位置后的恢复行为,就可以建立一个没有输入而只有系统模块加一个显示模块的模型。在某种情况下,也可以有系统模块加一个显示模块的模型。在某种情况下,也可以建立一个只有源模块和显示模块的系统。若需要一个由几个建立一个只有源模
16、块和显示模块的系统。若需要一个由几个函数复合的特殊信号,则可以使用源模块生成信号并将其送函数复合的特殊信号,则可以使用源模块生成信号并将其送入入MatlabMatlab工作间或文件中。工作间或文件中。二、仿真运行原理二、仿真运行原理二、仿真运行原理二、仿真运行原理 SimulinkSimulink仿真包括两个阶段;初始化阶段和模型执行阶段仿真包括两个阶段;初始化阶段和模型执行阶段 (1) (1) (1) (1) 模块初始化模块初始化模块初始化模块初始化 在初始化阶段主要完成以下工作在初始化阶段主要完成以下工作在初始化阶段主要完成以下工作在初始化阶段主要完成以下工作: 模型参数传给模型参数传给M
17、atlabMatlab进行估值,得到的数值结果将作为模进行估值,得到的数值结果将作为模型的实际参数;型的实际参数; 展开模型的各个层次,每一个非条件执行的子系统被它所展开模型的各个层次,每一个非条件执行的子系统被它所包含的模块所代替;包含的模块所代替; 第七章第七章第七章第七章SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.1 Simulink7.1 Simulink的概述和基本操作的概述和基本操作的概述和基本操作的概述和基本操作 模型中的模块按更新的次序进行排序。排序算法产生一个列表模型中的模块按更新的次序进行排序。排序算法产生一
18、个列表以确保具有代数环的模块在产生它的驱动输入的模块被更新后才以确保具有代数环的模块在产生它的驱动输入的模块被更新后才更新。当然,这一步要先检测出模型中存在的代数环。更新。当然,这一步要先检测出模型中存在的代数环。 决定模型中有无显示设定的信号属性,例如名称、数据类型、决定模型中有无显示设定的信号属性,例如名称、数据类型、数值类型以及大小等,并且检查每个模块是否能够接受连接到它数值类型以及大小等,并且检查每个模块是否能够接受连接到它输入端的信号。输入端的信号。SimulinkSimulink使用属性传递的过程来确定未被设定的使用属性传递的过程来确定未被设定的属性,这个过程将源信号的属性传递到它
19、所驱动的模块的输入信属性,这个过程将源信号的属性传递到它所驱动的模块的输入信号;号; 决定所有无显示设定采样时间的模块的采样时间;决定所有无显示设定采样时间的模块的采样时间; 分配和初始化用于存储每个模块的状态和输入当前值的存储空分配和初始化用于存储每个模块的状态和输入当前值的存储空间。间。 完成这些工作后就可以进行仿真了。完成这些工作后就可以进行仿真了。2) 2) 2) 2) 模型执行模型执行模型执行模型执行 一般模型是使用数值积分来进行仿真的。所运用的仿真解法器一般模型是使用数值积分来进行仿真的。所运用的仿真解法器(仿真算法)依赖于模型提供它的连续状态微分能力。计算微分(仿真算法)依赖于模
20、型提供它的连续状态微分能力。计算微分可以分两步进行:可以分两步进行:第七章第七章第七章第七章SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.1 Simulink7.1 Simulink的概述和基本操作的概述和基本操作的概述和基本操作的概述和基本操作 首先,按照排序所决定的次序计算每个模块的输出。首先,按照排序所决定的次序计算每个模块的输出。n n 然后,根据当前时刻的输入和状态来决定状态的微分;然后,根据当前时刻的输入和状态来决定状态的微分;得到微分向量后再把它返回给解法器;后者用来计算下一得到微分向量后再把它返回给解法器;后者用来
21、计算下一个采样点的状态向量。一旦新的状态向量计算完毕,被采个采样点的状态向量。一旦新的状态向量计算完毕,被采样的数据源模块和接受模块才被更新。样的数据源模块和接受模块才被更新。n n在仿真开始时模型设定待仿真系统的初始状态和输出。在在仿真开始时模型设定待仿真系统的初始状态和输出。在每一个时间步中,每一个时间步中,SimulinkSimulink计算系统的输入、状态和输出,计算系统的输入、状态和输出,并更新模型来反映计算出的值。在仿真结束时,模型得出并更新模型来反映计算出的值。在仿真结束时,模型得出系统的输入、状态和输出。系统的输入、状态和输出。n n在每个时间步中,在每个时间步中,Simuli
22、nkSimulink所采取的动作依次为:所采取的动作依次为:n n 按排列好的次序更新模型中模块的输出。按排列好的次序更新模型中模块的输出。SimulinkSimulink通过通过调用模块的输出函数计算模块的输出。调用模块的输出函数计算模块的输出。SimulinkSimulink只把当前只把当前值、模块的输入以及状态量传给这些函数计算模块的输出。值、模块的输入以及状态量传给这些函数计算模块的输出。对于离散系统,对于离散系统,SimulinkSimulink只有在当前时间是模块采样时间只有在当前时间是模块采样时间的整数倍时,才会更新模块的输出。的整数倍时,才会更新模块的输出。第七章第七章第七章第
23、七章SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.1 Simulink7.1 Simulink的概述和基本操作的概述和基本操作的概述和基本操作的概述和基本操作n n 按排列好的次序更新模型中模块的状态,按排列好的次序更新模型中模块的状态,SimulinkSimulink计算计算一个模块的离散状态的方法时调用模块的离散状态更新函数。一个模块的离散状态的方法时调用模块的离散状态更新函数。而对于连续状态,则对连续状态的微分(在模块可调用的函而对于连续状态,则对连续状态的微分(在模块可调用的函数里,有一个用于计算连续微分的函数)进行数值积
24、分来获数里,有一个用于计算连续微分的函数)进行数值积分来获得当前的连续状态。得当前的连续状态。n n 检查模块连续状态的不连续点。检查模块连续状态的不连续点。SimulinkSimulink使用过零检测使用过零检测来检测连续状态的不连续点。来检测连续状态的不连续点。n n 计算下一个仿真时间步的时间。这是通过调用模块获得计算下一个仿真时间步的时间。这是通过调用模块获得下一个采样时间函数来完成的。下一个采样时间函数来完成的。 n n(3) (3) (3) (3) 定模块更新次序定模块更新次序定模块更新次序定模块更新次序n n在仿真中,在仿真中,SimulinkSimulink更新状态和输出都要根
25、据事先确定的模更新状态和输出都要根据事先确定的模块更新次序,而更新次序对方针结果的有效性来说非常关键。块更新次序,而更新次序对方针结果的有效性来说非常关键。特别当模块的输出是当前输入值的函数时,这个模块必须在特别当模块的输出是当前输入值的函数时,这个模块必须在驱动它的模块被更新之后才能被更新,否则,模块的输出将驱动它的模块被更新之后才能被更新,否则,模块的输出将没有意义。没有意义。 第七章第七章第七章第七章SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.1 Simulink7.1 Simulink的概述和基本操作的概述和基本操作的概
26、述和基本操作的概述和基本操作n n注意:注意:注意:注意:不要把模块保存到模块文件的次序与仿真过程模块被更新不要把模块保存到模块文件的次序与仿真过程模块被更新的次序相混淆。的次序相混淆。SimulinkSimulink在模块初始化时以将模块排好正确的次在模块初始化时以将模块排好正确的次序。序。n n为了建立有效的更新次序,为了建立有效的更新次序,SimulinkSimulink根据输入和输出的关系将模根据输入和输出的关系将模块分类。其中,当前输出依赖于当前输入的模块称为直接馈入模块分类。其中,当前输出依赖于当前输入的模块称为直接馈入模块,所有其他的模块都称为非虚拟模块。直接馈入模块的例子有块,
27、所有其他的模块都称为非虚拟模块。直接馈入模块的例子有GainGain、ProductProduct和和SumSum模块;非直接馈入模块的例子有模块;非直接馈入模块的例子有IntegratorIntegrator模块模块( (它的输出只依赖于它的状态它的输出只依赖于它的状态) ),ConstantConstant模块模块( (没有输入没有输入) )和和MemoryMemory模块模块( (它的输出只依赖于前一个模块的输入它的输出只依赖于前一个模块的输入) )。n n基于上述分类,基于上述分类,SimulinkSimulink使用下面两个基本规则对模块进行排序:使用下面两个基本规则对模块进行排序:
28、n n 每个模块必须在它驱动的所有模块更新之前被更新。这条规每个模块必须在它驱动的所有模块更新之前被更新。这条规则确保了模块被更新时输入有效。则确保了模块被更新时输入有效。n n 若非直接馈入模块在直接馈入模块之前更新,则它们的更新若非直接馈入模块在直接馈入模块之前更新,则它们的更新次序可以是任意的。这条规则允许次序可以是任意的。这条规则允许SimulinkSimulink在排序过程中忽略非在排序过程中忽略非虚拟模块。虚拟模块。n n另外一个约束模块更新次序的因素是用户给模块设定优先级,另外一个约束模块更新次序的因素是用户给模块设定优先级,SimulinkSimulink在低优先级模块之前更新
29、高优先级模块。在低优先级模块之前更新高优先级模块。 第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.2 7.2 7.2 7.2 基本模块基本模块基本模块基本模块n n由于大多数物理系统都可以用微分方程组和代数方程组来描由于大多数物理系统都可以用微分方程组和代数方程组来描述,述,SimulinkSimulink也采用的是本教材第四章介绍的面向结构图的也采用的是本教材第四章介绍的面向结构图的数字仿真原理。但其功能块的类型、数值解法、功能快的描数字仿真原理。但其功能块的类型、数值解法、功能快的描述、以及建模方式和
30、方法远远超出述、以及建模方式和方法远远超出CSSCSS仿真程序包,其界面仿真程序包,其界面也更加友好。也更加友好。n nSimulink 4Simulink 4把功能块分成把功能块分成9 9类,分别放置在类,分别放置在9 9个库中,如图个库中,如图7.2.17.2.1所示:源模块库所示:源模块库(Sources)(Sources)、输出显示库、输出显示库(Sinks)(Sinks)、离、离散模块库散模块库(Discrete)(Discrete)、连续模块库、连续模块库(Continuous)(Continuous)、非线性模、非线性模块库块库(Nonlinear)(Nonlinear)、数学函
31、数库、数学函数库(Math)(Math)、通用函数及列表库、通用函数及列表库(Functions and Tables)(Functions and Tables)、信号处理及系统类模块库、信号处理及系统类模块库(Signal and Systems)(Signal and Systems)和子系统模块库和子系统模块库(Subsystems)(Subsystems)。n n表表7.2.17.2.1到表到表7.2.87.2.8列出了个库包含的主要模块及简单说明。列出了个库包含的主要模块及简单说明。图图7.2.27.2.2到图到图7.2.107.2.10列出了各库包含的主要模块种类图形。列出了各库
32、包含的主要模块种类图形。第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.2 7.2 7.2 7.2 基本模块基本模块基本模块基本模块表表表表7.2.1 7.2.1 7.2.1 7.2.1 SourceSourceSourceSource库库库库 模模模模 块块块块 名名名名说说说说 明明明明ClockClockClockClock显示或者提供仿真时间显示或者提供仿真时间显示或者提供仿真时间显示或者提供仿真时间ConstantConstantConstantConstant产生一个常数值信号产生一个常数值信号
33、产生一个常数值信号产生一个常数值信号Digital clockDigital clockDigital clockDigital clock产生数字采样时间信号产生数字采样时间信号产生数字采样时间信号产生数字采样时间信号Digital pulse generatorDigital pulse generatorDigital pulse generatorDigital pulse generator产生数字脉冲信号产生数字脉冲信号产生数字脉冲信号产生数字脉冲信号From fileFrom fileFrom fileFrom file从文件读取数据输入从文件读取数据输入从文件读取数据输入从文件
34、读取数据输入From work spaceFrom work spaceFrom work spaceFrom work space从工作间定义的矩阵读入数据从工作间定义的矩阵读入数据从工作间定义的矩阵读入数据从工作间定义的矩阵读入数据Pulse generatorPulse generatorPulse generatorPulse generator产生脉冲信号产生脉冲信号产生脉冲信号产生脉冲信号RampRampRampRamp产生产生产生产生“斜坡斜坡斜坡斜坡”信号信号信号信号Random numberRandom numberRandom numberRandom number产生正态
35、分布的随机信号产生正态分布的随机信号产生正态分布的随机信号产生正态分布的随机信号Repeating sequenceRepeating sequenceRepeating sequenceRepeating sequence产生周期序列信号产生周期序列信号产生周期序列信号产生周期序列信号Signal generatorSignal generatorSignal generatorSignal generator信号发生器信号发生器信号发生器信号发生器Sine waveSine waveSine waveSine wave正弦波信号正弦波信号正弦波信号正弦波信号StepStepStepStep
36、产生一个阶跃信号产生一个阶跃信号产生一个阶跃信号产生一个阶跃信号Uniform random numberUniform random numberUniform random numberUniform random number产生均匀分布的随机信号产生均匀分布的随机信号产生均匀分布的随机信号产生均匀分布的随机信号第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.2 7.2 基本模块基本模块基本模块基本模块 模模 块块 名名说说 明明DisplayDisplay显示输入信号的值显示输入信号的值ScopeS
37、cope显示信号的波形显示信号的波形Stop simulationStop simulation当输入信号为当输入信号为0 0时结束仿真时结束仿真To fileTo file向文件中写数据向文件中写数据To workspaceTo workspace向工作间定义的变量写数据到向工作间定义的变量写数据到XY graphXY graphMatlabMatlab图形窗口显示信号的二维图图形窗口显示信号的二维图表表7.2.2 Sinks7.2.2 Sinks库库第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.2 7
38、.2 基本模块基本模块基本模块基本模块 模模 块块 名名说说 明明Discrete filterDiscrete filter实现实现IIRIIR和和FIRFIR滤波器滤波器Discrete state-spaceDiscrete state-space实现离散状态空间系统实现离散状态空间系统Discrete-time integratorDiscrete-time integrator 离散时间积分器离散时间积分器Discrete transfer fcnDiscrete transfer fcn实现离散传递函数实现离散传递函数Discrete zero-polDiscrete zero-p
39、ol实现用零极点表达的离散传递函实现用零极点表达的离散传递函数数First-order holdFirst-order hold实现一阶采样保持系统实现一阶采样保持系统Unit delayUnit delay单位采样时间延迟器单位采样时间延迟器Zero-order holdZero-order hold实现采样的零阶保持实现采样的零阶保持表表7.2.3 Discrete7.2.3 Discrete库库第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.2 7.2 7.2 7.2 基本模块基本模块基本模块基本模块
40、 模模 块块 名名 说说 明明Derivative Derivative 信号的微分运算信号的微分运算IntegratorIntegrator信号的积分运算信号的积分运算MemoryMemory输出前一个时间步的输入值输出前一个时间步的输入值State-spaceState-space实现线性状态空间系统实现线性状态空间系统Transfer fcnTransfer fcn实现线性传递系统实现线性传递系统Transport delay Transport delay 对输入信号进行传输延时对输入信号进行传输延时Variable transport delayVariable transport
41、delay 对输入信号进行可变时间的传输对输入信号进行可变时间的传输延时延时Zero-poleZero-pole实现零极点表达式的传递函数实现零极点表达式的传递函数表表7.2.4 Continuous7.2.4 Continuous库库第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.2 7.2 基本模块基本模块基本模块基本模块 模模模模 块块块块 名名名名说说说说 明明明明AbsAbsAbsAbs信号的绝对值信号的绝对值信号的绝对值信号的绝对值Algebraic constraintAlgebraic co
42、nstraintAlgebraic constraintAlgebraic constraint将输入信号强制为零将输入信号强制为零将输入信号强制为零将输入信号强制为零Combinatorial logicCombinatorial logicCombinatorial logicCombinatorial logic实现一个真值表实现一个真值表实现一个真值表实现一个真值表Complex to magnitude-angleComplex to magnitude-angleComplex to magnitude-angleComplex to magnitude-angle输出一个复数输入
43、信号的幅角和输出一个复数输入信号的幅角和输出一个复数输入信号的幅角和输出一个复数输入信号的幅角和模模模模Complex to real-imagComplex to real-imagComplex to real-imagComplex to real-imag输出一个复数信号的实部和虚部输出一个复数信号的实部和虚部输出一个复数信号的实部和虚部输出一个复数信号的实部和虚部Dot productDot productDot productDot product向量信号的点积向量信号的点积向量信号的点积向量信号的点积GainGainGainGain将模块的输入信号乘上一个增益将模块的输入信号乘上
44、一个增益将模块的输入信号乘上一个增益将模块的输入信号乘上一个增益Logical operatorLogical operatorLogical operatorLogical operator输入信号的逻辑操作输入信号的逻辑操作输入信号的逻辑操作输入信号的逻辑操作Magnitude-angle to complexMagnitude-angle to complexMagnitude-angle to complexMagnitude-angle to complex将模和幅角的信号转换成为复数将模和幅角的信号转换成为复数将模和幅角的信号转换成为复数将模和幅角的信号转换成为复数信号信号信号信号
45、表表7.2.5 7.2.5 MathMath库库第七章第七章 SimulinkSimulink建模和仿真建模和仿真 7.2 基本模块基本模块Math functionMath functionMath functionMath function实现数学函数实现数学函数实现数学函数实现数学函数Matrix gain Matrix gain Matrix gain Matrix gain 将输入乘上一个矩阵增益将输入乘上一个矩阵增益将输入乘上一个矩阵增益将输入乘上一个矩阵增益MinmaxMinmaxMinmaxMinmax信号的最小值和最大值信号的最小值和最大值信号的最小值和最大值信号的最小值和最
46、大值ProductProductProductProduct信号的乘积或者商信号的乘积或者商信号的乘积或者商信号的乘积或者商Real-imag to complexReal-imag to complexReal-imag to complexReal-imag to complex将实部虚部的信号转换成为复将实部虚部的信号转换成为复将实部虚部的信号转换成为复将实部虚部的信号转换成为复数信号数信号数信号数信号Relational operator Relational operator Relational operator Relational operator 进行指定的关系运算进行指定的
47、关系运算进行指定的关系运算进行指定的关系运算Rounding functionRounding functionRounding functionRounding function实现舍入运算实现舍入运算实现舍入运算实现舍入运算SignSignSignSign符号函数符号函数符号函数符号函数Slider gainSlider gainSlider gainSlider gain滑块增益滑块增益滑块增益滑块增益SumSumSumSum输入信号的和输入信号的和输入信号的和输入信号的和Trigonometric functionTrigonometric functionTrigonometric
48、functionTrigonometric function实现三角函数运算实现三角函数运算实现三角函数运算实现三角函数运算第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.2 7.2 7.2 7.2 基本模块基本模块基本模块基本模块 模模模模 块块块块 名名名名说说说说 明明明明FcnFcnFcnFcn实现自定义表达式的输入信号实现自定义表达式的输入信号实现自定义表达式的输入信号实现自定义表达式的输入信号Look-up tableLook-up tableLook-up tableLook-up table
49、实现输入的线性查表实现输入的线性查表实现输入的线性查表实现输入的线性查表Look-up table(2-d)Look-up table(2-d)Look-up table(2-d)Look-up table(2-d)实现两维信号的线性查表实现两维信号的线性查表实现两维信号的线性查表实现两维信号的线性查表Matlab fcnMatlab fcnMatlab fcnMatlab fcn实现实现实现实现MatlabMatlabMatlabMatlab函数或表达式输入函数或表达式输入函数或表达式输入函数或表达式输入信号信号信号信号S-FunctionS-FunctionS-FunctionS-Func
50、tionS S S S函数模块函数模块函数模块函数模块表表7.2.6 Function and Tables7.2.6 Function and Tables函数函数 第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.2 7.2 7.2 7.2 基本模块基本模块基本模块基本模块 模模模模 块块块块 名名名名说说说说 明明明明BacklashBacklashBacklashBacklash偏移模块偏移模块偏移模块偏移模块Coulomb&viscous frictionCoulomb&viscous fricti
51、onCoulomb&viscous frictionCoulomb&viscous friction模拟原点不连续系统模拟原点不连续系统模拟原点不连续系统模拟原点不连续系统Dead zoneDead zoneDead zoneDead zone输出一个零输出的区域输出一个零输出的区域输出一个零输出的区域输出一个零输出的区域Manual switchManual switchManual switchManual switch在信号间手工切换在信号间手工切换在信号间手工切换在信号间手工切换Multiport switchMultiport switchMultiport switchMultip
52、ort switch多端口的切换(开关)器多端口的切换(开关)器多端口的切换(开关)器多端口的切换(开关)器QuantizerQuantizerQuantizerQuantizer按指定的间隔离散化输出信号按指定的间隔离散化输出信号按指定的间隔离散化输出信号按指定的间隔离散化输出信号Rate limiterRate limiterRate limiterRate limiter限制信号的改变速率限制信号的改变速率限制信号的改变速率限制信号的改变速率RelayRelayRelayRelay实现继电器功能实现继电器功能实现继电器功能实现继电器功能SaturationSaturationSatura
53、tionSaturation限制信号的饱和度限制信号的饱和度限制信号的饱和度限制信号的饱和度SwitchSwitchSwitchSwitch在两个信号间切换在两个信号间切换在两个信号间切换在两个信号间切换表表7.2.7 Nonlinear 7.2.7 Nonlinear 库库第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.2 7.2 7.2 7.2 基本模块基本模块基本模块基本模块 模模模模 块块块块 名名名名说说说说 明明明明Bus selectorBus selectorBus selectorBus
54、selector有选择的输出信号有选择的输出信号有选择的输出信号有选择的输出信号Configurable subsystemConfigurable subsystemConfigurable subsystemConfigurable subsystem代表任何一个从指定的库中选择的模块代表任何一个从指定的库中选择的模块代表任何一个从指定的库中选择的模块代表任何一个从指定的库中选择的模块Data store memoryData store memoryData store memoryData store memory定义共享数据存储空间定义共享数据存储空间定义共享数据存储空间定义共享数据
55、存储空间Date store readDate store readDate store readDate store read从共享数据空间读数据并输出从共享数据空间读数据并输出从共享数据空间读数据并输出从共享数据空间读数据并输出Date story writeDate story writeDate story writeDate story write写数据到共享数据存储空间写数据到共享数据存储空间写数据到共享数据存储空间写数据到共享数据存储空间Date type conversionDate type conversionDate type conversionDate type co
56、nversion将信号转换为其它数据类型将信号转换为其它数据类型将信号转换为其它数据类型将信号转换为其它数据类型DemuxDemuxDemuxDemux将一个向量信号分解输出将一个向量信号分解输出将一个向量信号分解输出将一个向量信号分解输出EnableEnableEnableEnable为子系统增加激活断口为子系统增加激活断口为子系统增加激活断口为子系统增加激活断口FromFromFromFrom从一个从一个从一个从一个GotoGotoGotoGoto模块接受信号模块接受信号模块接受信号模块接受信号GotoGotoGotoGoto传递信号到传递信号到传递信号到传递信号到FromFromFrom
57、From模块模块模块模块Goto tag visibilityGoto tag visibilityGoto tag visibilityGoto tag visibility定义定义定义定义GotoGotoGotoGoto模块标记的可视域模块标记的可视域模块标记的可视域模块标记的可视域GroundGroundGroundGround将末连接的输入端接地将末连接的输入端接地将末连接的输入端接地将末连接的输入端接地表表7.2.8 7.2.8 Signal Signal and and SystemsSystems库库第七章第七章第七章第七章 SimulinkSimulinkSimulinkSim
58、ulink建模和仿真建模和仿真建模和仿真建模和仿真 7.2 7.2 7.2 7.2 基本模块基本模块基本模块基本模块 模模模模 块块块块 名名名名说说说说 明明明明Hit crossingHit crossingHit crossingHit crossing检测过零点检测过零点检测过零点检测过零点ICICICIC设置一个信号的初始值设置一个信号的初始值设置一个信号的初始值设置一个信号的初始值InplInplInplInpl为子系统建立一个输入端口或建立一个外部入口为子系统建立一个输入端口或建立一个外部入口为子系统建立一个输入端口或建立一个外部入口为子系统建立一个输入端口或建立一个外部入口Me
59、rgeMergeMergeMerge将几个输入量合并为一个标量的输出串将几个输入量合并为一个标量的输出串将几个输入量合并为一个标量的输出串将几个输入量合并为一个标量的输出串ModelinfoModelinfoModelinfoModelinfo显示模型信息显示模型信息显示模型信息显示模型信息MuxMuxMuxMux将几个输入信号合成一个向量信号将几个输入信号合成一个向量信号将几个输入信号合成一个向量信号将几个输入信号合成一个向量信号Out 1Out 1Out 1Out 1为子系统建立一个输出端口或建立一个外部出口为子系统建立一个输出端口或建立一个外部出口为子系统建立一个输出端口或建立一个外部出
60、口为子系统建立一个输出端口或建立一个外部出口ProbeProbeProbeProbe信号的宽度,采样时间及信号类型信号的宽度,采样时间及信号类型信号的宽度,采样时间及信号类型信号的宽度,采样时间及信号类型SubsystemSubsystemSubsystemSubsystem子系统模块子系统模块子系统模块子系统模块TerminatorTerminatorTerminatorTerminator结束一个未连接的输出端口结束一个未连接的输出端口结束一个未连接的输出端口结束一个未连接的输出端口TriggerTriggerTriggerTrigger为子系统增加触发端口为子系统增加触发端口为子系统增加
61、触发端口为子系统增加触发端口WidthWidthWidthWidth输入向量的输出宽度输入向量的输出宽度输入向量的输出宽度输入向量的输出宽度SelectorSelectorSelectorSelector在输入信号中选择并输出在输入信号中选择并输出在输入信号中选择并输出在输入信号中选择并输出表表7.2.8 Signal and Systems7.2.8 Signal and Systems库库第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.2 7.2 7.2 7.2 基本模块基本模块基本模块基本模块 图图图
62、图7.2.1 7.2.1 7.2.1 7.2.1 库的类型库的类型库的类型库的类型 图图图图7.2.2 Sources7.2.2 Sources7.2.2 Sources7.2.2 Sources库库库库 第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.2 7.2 7.2 7.2 基本模块基本模块基本模块基本模块 图图7.2.3 Sinks7.2.3 Sinks库库 图图7.2.4 Discrete7.2.4 Discrete库库 图图7.2.5 Continuous7.2.5 Continuous库库 第
63、七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.2 7.2 7.2 7.2 基本模块基本模块基本模块基本模块 图图7.2.6 Math7.2.6 Math库库 图图7.2.7 Nonlinear7.2.7 Nonlinear库库 第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.2 7.2 7.2 7.2 基本模块基本模块基本模块基本模块 图图7.2.8 Signak & Systems7.2.8 Signak & Syst
64、ems库库 第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.2 7.2 7.2 7.2 基本模块基本模块基本模块基本模块 图图7.2.9 Subsystems7.2.9 Subsystems库库 第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.2 7.2 7.2 7.2 基本模块基本模块基本模块基本模块 图图7.2.10 Functions & Tables7.2.10 Functions & Tables库库 第七章第
65、七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.2 7.2 7.2 7.2 基本模块基本模块基本模块基本模块 在在SimulinkSimulink中,各功能模块的参数描述都可以由用户通过该中,各功能模块的参数描述都可以由用户通过该模块的模块属性对话框进行操作给出或修改。图模块的模块属性对话框进行操作给出或修改。图7.2.117.2.11是积是积分模块的属性对话框,从图可见,它有分模块的属性对话框,从图可见,它有9 9个可控参数。个可控参数。 (1) External reset (1) External reset
66、 为外部重置选项。它用在当重置信号为外部重置选项。它用在当重置信号中发生触发事件时,模块将照初始条件重置状态。中发生触发事件时,模块将照初始条件重置状态。 (2) initial condition source (2) initial condition source 此项用来从初始条件参数此项用来从初始条件参数或外部模块中获取初始条件。或外部模块中获取初始条件。 (3) initial condition (3) initial condition 此区域用来设置初始条件。此区域用来设置初始条件。 (4) Limit output (4) Limit output 如果此项被选中,则状态将
67、被限制在饱如果此项被选中,则状态将被限制在饱和度下限和上限之间。和度下限和上限之间。 (5) Upper saturation limit (5) Upper saturation limit 此参数用来设置饱和度上限。此参数用来设置饱和度上限。 (6) Lower saturation limit(6) Lower saturation limit此参数用来设置饱和度下限。此参数用来设置饱和度下限。 (7) Show saturation port (7) Show saturation port 若此项被选中,则模块上将增若此项被选中,则模块上将增加一个饱和度端口。加一个饱和度端口。 (8
68、) Show state port (8) Show state port 若此项被选中,则模块上将增加一个若此项被选中,则模块上将增加一个状态端口。状态端口。第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.2 7.2 7.2 7.2 基本模块基本模块基本模块基本模块 n n(9) Absolute tolerance (9) Absolute tolerance 此参数用来设置模块状态的绝对此参数用来设置模块状态的绝对误差。误差。 图图7.2.11 7.2.11 积分模块属性对话框积分模块属性对话框 第七
69、章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.3 7.3 7.3 7.3 建模方法建模方法建模方法建模方法 利用利用SimulinkSimulink建立物理系统和数学系统的仿真模型,建立物理系统和数学系统的仿真模型,关键关键是对是对SimulinkSimulink提供的功能模块进行操作,即用适当提供的功能模块进行操作,即用适当的方式将各种模块连接在一起。的方式将各种模块连接在一起。本小节将介绍模块的本小节将介绍模块的基本操作。在介绍具体的操作之前先对建模过程提两点建议:基本操作。在介绍具体的操作之前先对建模过
70、程提两点建议: 在建模之前,应对模块和信号线有一个整体、清晰和仔在建模之前,应对模块和信号线有一个整体、清晰和仔细的安排,以便能减少建模时间;细的安排,以便能减少建模时间; 及时对模块和信号线命名、及时对模型加标注,以增强及时对模块和信号线命名、及时对模型加标注,以增强模型的可读性。模型的可读性。 本小节将详细介绍创建本小节将详细介绍创建SimulinkSimulink仿真模型的过程,包括模块仿真模型的过程,包括模块操作、编辑信号线及标注模型等。操作、编辑信号线及标注模型等。第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真
71、建模和仿真 7.3 7.3 7.3 7.3 建模方法建模方法建模方法建模方法 n n7.3.1 7.3.1 模块的操作模块的操作n n模块是建立模块是建立SimulinkSimulink模型的基本单元。用适当的方法把各种模型的基本单元。用适当的方法把各种模块连接在一起就能够建立任何动态系统的模型。模块连接在一起就能够建立任何动态系统的模型。n n一、选取模块一、选取模块一、选取模块一、选取模块n n当选取单个模块时,只要用鼠标在模块上单击即可,这是模当选取单个模块时,只要用鼠标在模块上单击即可,这是模块的角上出现黑色的小方块。选取多个模块时,在所有模块块的角上出现黑色的小方块。选取多个模块时,
72、在所有模块所占区域的一角按下鼠标左键不放,拖向该区域的对角,在所占区域的一角按下鼠标左键不放,拖向该区域的对角,在此过程中会出现虚框,当虚框包住了要选的所有模块后,放此过程中会出现虚框,当虚框包住了要选的所有模块后,放开鼠标左键,这时在所有被选模块的角上都会出现小黑方块,开鼠标左键,这时在所有被选模块的角上都会出现小黑方块,表示模块被选中了。此过程如图表示模块被选中了。此过程如图7.3.17.3.1所示。所示。 图图7.3.1 7.3.1 选取多个模块选取多个模块第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真
73、7.3 7.3 7.3 7.3 建模方法建模方法建模方法建模方法 n n二、复制、删除模块二、复制、删除模块二、复制、删除模块二、复制、删除模块n n(1) (1) (1) (1) 在不同的窗口之间复制在不同的窗口之间复制在不同的窗口之间复制在不同的窗口之间复制n n当我们建立模型时,需要从模块库窗口或者已经存在的窗口把需当我们建立模型时,需要从模块库窗口或者已经存在的窗口把需要的模块复制到新建模型文件的窗口。要对已经存在的模块进行要的模块复制到新建模型文件的窗口。要对已经存在的模块进行编辑时,有时也需要从模块库窗口或另一个已经存在的模型窗口编辑时,有时也需要从模块库窗口或另一个已经存在的模型
74、窗口复制模块。复制模块。n n最简单的办法是用鼠标左键点住要复制的模块(首先打开源模块最简单的办法是用鼠标左键点住要复制的模块(首先打开源模块和目标模块所在的窗口),按住左键移动鼠标到相应窗口(不用和目标模块所在的窗口),按住左键移动鼠标到相应窗口(不用按住按住CtrlCtrl键),然后释放,该模块就会被复制过来,而源模块不键),然后释放,该模块就会被复制过来,而源模块不会被删除。会被删除。n n当然还可以使用当然还可以使用EditEdit菜单的菜单的CopyCopy和和PastePaste命令来完成复制:先选命令来完成复制:先选定要复制的模块,选择定要复制的模块,选择EditEdit菜单下的
75、菜单下的CopyCopy命令,到目标窗口的命令,到目标窗口的EditEdit菜单下选择菜单下选择PastePaste命令。命令。n n(2) (2) (2) (2) 在同一个模型窗口内复制在同一个模型窗口内复制在同一个模型窗口内复制在同一个模型窗口内复制n n有时一个模型需要多个相同的模块,这时的复制方法如下:有时一个模型需要多个相同的模块,这时的复制方法如下:n n用鼠标左键点住要复制的模块,按住左键移动鼠标,同时按下用鼠标左键点住要复制的模块,按住左键移动鼠标,同时按下CtrlCtrl键,到适当位置释放鼠标,该模块就被复制到当前位置。更键,到适当位置释放鼠标,该模块就被复制到当前位置。更简
76、单的方法是按住鼠标右键(不按简单的方法是按住鼠标右键(不按CtrlCtrl键)移动鼠标。键)移动鼠标。第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.3 7.3 7.3 7.3 建模方法建模方法建模方法建模方法 n n另一种方法是先选定要复制的模块,选择另一种方法是先选定要复制的模块,选择EditEdit下的下的CopyCopy命令,然命令,然后选择后选择PastePaste命令。命令。n n在图在图7.3.27.3.2的复制结果中我们会发现复制出的模块名称在原名称的复制结果中我们会发现复制出的模块名称在原
77、名称的基础上又加了编号,这是的基础上又加了编号,这是SimulinkSimulink的约定:每个模型中的模块的约定:每个模型中的模块和名称是一一对应的,相同的模块或不同的模块都不能用同一个和名称是一一对应的,相同的模块或不同的模块都不能用同一个名字。名字。 图图7.3.2 7.3.2 在同一模在同一模型窗口内型窗口内复制模块复制模块第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.3 7.3 7.3 7.3 建模方法建模方法建模方法建模方法 n n(3) (3) (3) (3) 删除模块删除模块删除模块删除模
78、块n n选定模块,选择选定模块,选择EditEdit菜单下的菜单下的CutCut(删除到剪贴板)(删除到剪贴板)或或ClearClear(彻底删除)命令。或者在模块上单击鼠(彻底删除)命令。或者在模块上单击鼠标右键,在弹出菜单上选择标右键,在弹出菜单上选择CutCut或或ClearClear命令。命令。n n三、模块的参数和特性设置三、模块的参数和特性设置n nSimulinkSimulink中几乎所有模块的参数(中几乎所有模块的参数(ParameterParameter)都)都允许用户进行设置。只要双击要设置参数的模块就允许用户进行设置。只要双击要设置参数的模块就会弹出设置对话框,如图会弹出
79、设置对话框,如图7.3.37.3.3所示。这是正弦波所示。这是正弦波模块的参数设置对话框,您可以设置它的幅值、频模块的参数设置对话框,您可以设置它的幅值、频率、相位、采样时间等参数。模块参数还可以用率、相位、采样时间等参数。模块参数还可以用set-paramset-param命令修改,这在后面将会讲到。命令修改,这在后面将会讲到。第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.3 7.3 7.3 7.3 建模方法建模方法建模方法建模方法 n n每个模块都有一个内容相同的特性(每个模块都有一个内容相同的特性(
80、PropertiesProperties)设置对话)设置对话框,如图框,如图7.3.47.3.4所示。它包括如下几项:所示。它包括如下几项:n n( (1) 1) 说明(说明(DescriptionDescription)n n是对该模块在模型中用法的注释。是对该模块在模型中用法的注释。n n(2) (2) 优先级(优先级(PriorityPriority)n n规定该模块在模型中相对于其他模块执行的有限顺序。优先规定该模块在模型中相对于其他模块执行的有限顺序。优先级的数值必须是整数或不输入数值,这时系统会自动选取合级的数值必须是整数或不输入数值,这时系统会自动选取合适的优先级。优先级的数值越
81、小(可以是负整数),优先级适的优先级。优先级的数值越小(可以是负整数),优先级越高。越高。n n(3) (3) 标记标记(Tag(Tag)n n用户为模块添加的文本格式的标记。用户为模块添加的文本格式的标记。n n(4) (4) 调用函数(调用函数(Open functionOpen function)n n当用户双击该模块时调用的当用户双击该模块时调用的MatlabMatlab函数。函数。n n(5) (5) 属性格式字符串(属性格式字符串(Attributes format stringAttributes format string) 第七章第七章第七章第七章 SimulinkSimul
82、inkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.3 7.3 7.3 7.3 建模方法建模方法建模方法建模方法 图图7.3.3 7.3.3 模块参数设置对话模块参数设置对话 图图7.3.4 7.3.4 模块特性设置对话框模块特性设置对话框 第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.3 7.3 7.3 7.3 建模方法建模方法建模方法建模方法 n n指定在该模块的图标下显示模块的那个参数,以什么格式显示。指定在该模块的图标下显示模块的那个参数,以什么格式显示。属性格式字
83、符串由任意的文本字符串加嵌入式参数名组成。例属性格式字符串由任意的文本字符串加嵌入式参数名组成。例如,对一个传递函数模块指定如下的属性格式字符串:如,对一个传递函数模块指定如下的属性格式字符串:n n优先级优先级nn传函分母传函分母n n该模块显示如图该模块显示如图7.3.57.3.5的内容:的内容: 如果参数的值不是字符串或数字,参数值的位置会显示N/S(not supported)。如果参数名无效,参数值的位置将显示“?”。 图图7.3.5 7.3.5 设置属性格式字符串后的效果设置属性格式字符串后的效果第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimuli
84、nk建模和仿真建模和仿真建模和仿真建模和仿真 7.3 7.3 7.3 7.3 建模方法建模方法建模方法建模方法 n n四、模块外形的调整四、模块外形的调整四、模块外形的调整四、模块外形的调整(1) (1) (1) (1) 改变模块的大小改变模块的大小改变模块的大小改变模块的大小n n选定模块,用鼠标点住其周围的四个黑方块中的任意一个拖选定模块,用鼠标点住其周围的四个黑方块中的任意一个拖动,这时会出现虚线的矩形表示新模块的位置,到需要的位动,这时会出现虚线的矩形表示新模块的位置,到需要的位置后释放鼠标即可。置后释放鼠标即可。n n(2) (2) (2) (2) 调整模块的方向调整模块的方向调整模
85、块的方向调整模块的方向n n选定模块,选取菜单选定模块,选取菜单FormatFormat下的下的Rotate BlockRotate Block使模块旋转使模块旋转9090,Flip BlockFlip Block使模块旋转使模块旋转180180。效果如图。效果如图7.3.67.3.6所示。所示。n n(3) (3) (3) (3) 给模块加阴影给模块加阴影给模块加阴影给模块加阴影n n选定模块,选取菜单选定模块,选取菜单FormatFormat下的下的Show Drop ShadowShow Drop Shadow使模块产使模块产生阴影效果。如图生阴影效果。如图7.3.77.3.7所示。所示
86、。图图7.3.7 7.3.7 模块的阴影效果模块的阴影效果 图图7.3.6 7.3.6 调整模块的方向调整模块的方向 第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.3 7.3 7.3 7.3 建模方法建模方法建模方法建模方法 n n五、模块名的处理五、模块名的处理五、模块名的处理五、模块名的处理n n(1) (1) 模块名的显示与否选定模块,选取菜单模块名的显示与否选定模块,选取菜单FormatFormat下的下的Hide Hide NameName,模块名就会被隐藏,同时,模块名就会被隐藏,同时Hide
87、 NameHide Name改为改为Show NameShow Name。选。选取取Show NameShow Name就会使模块隐藏的名字显示出来就会使模块隐藏的名字显示出来. .n n(2) (2) 修改模块名修改模块名n n用鼠标左键单击模块名的区域,这时会在此处出现编辑状态的用鼠标左键单击模块名的区域,这时会在此处出现编辑状态的光标,在这种状态下能够对模块名随意修改。光标,在这种状态下能够对模块名随意修改。n n模块名和模块图标中的字体也可以更改,方法是选定模块,在模块名和模块图标中的字体也可以更改,方法是选定模块,在菜单菜单FormatFormat下选取下选取FontFont,这时会
88、弹出,这时会弹出Set FontSet Font的对话框,在对的对话框,在对话框中选取想要的字体。话框中选取想要的字体。n n(3) (3) 改变模块名的位置改变模块名的位置n n模块名的位置有一定的规律,当模块的接口在左右两侧时,模模块名的位置有一定的规律,当模块的接口在左右两侧时,模块名只能位于模块的上下两侧,缺省在下侧:当模块的接口在块名只能位于模块的上下两侧,缺省在下侧:当模块的接口在上下两侧时,模块名只能位于模块的左右两侧,缺省在左侧。上下两侧时,模块名只能位于模块的左右两侧,缺省在左侧。n n因此模块名只能从原位置移到相对的位置。可以用鼠标拖动模因此模块名只能从原位置移到相对的位置
89、。可以用鼠标拖动模块名到其相对的位置;也可以选定模块,用菜单块名到其相对的位置;也可以选定模块,用菜单FormatFormat下的下的Flip NameFlip Name实现相同的移动。实现相同的移动。第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.3 7.3 7.3 7.3 建模方法建模方法建模方法建模方法 n n7.3.2 7.3.2 模块的连接模块的连接n n上面我们介绍了对模块本身的各种操作。当我们设置好了各个模上面我们介绍了对模块本身的各种操作。当我们设置好了各个模块后,还需要把它们按照一定的顺序
90、连接起来采能组成一个完整块后,还需要把它们按照一定的顺序连接起来采能组成一个完整的系统模型。一下我们将讨论模块连接的相关问题。的系统模型。一下我们将讨论模块连接的相关问题。n n一、在模块间连线一、在模块间连线一、在模块间连线一、在模块间连线n n(1) (1) 连接两个模块连接两个模块n n这是最基本的情况:从一个模块的输出端连到另一个模块的输入这是最基本的情况:从一个模块的输出端连到另一个模块的输入端。方法是在移动鼠标到输出端,鼠标的箭头会变成十字形光标,端。方法是在移动鼠标到输出端,鼠标的箭头会变成十字形光标,这是点住鼠标左键,移动鼠标到另一个模块的输入端,当十字光这是点住鼠标左键,移动
91、鼠标到另一个模块的输入端,当十字光标出现标出现“重影重影”时,释放鼠标左键就完成了连接。时,释放鼠标左键就完成了连接。n n如果两个模块不在同一水平线上,连线是一条折线。要用斜线表如果两个模块不在同一水平线上,连线是一条折线。要用斜线表示,需要在连接时按住示,需要在连接时按住ShiftShift键。两种连接的结果见图键。两种连接的结果见图7.3.87.3.8。图图7.3.8 7.3.8 两模块不在同一水平线上两模块不在同一水平线上 第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.3 7.3 7.3 7.3
92、建模方法建模方法建模方法建模方法 n n(2) (2) 模块间连线的调整模块间连线的调整n n如图如图7.3.97.3.9,这种调整模块间连线位置的情况采用鼠标简单,这种调整模块间连线位置的情况采用鼠标简单拖动的办法实现。即先把鼠标移到需要移动的线段的位置,拖动的办法实现。即先把鼠标移到需要移动的线段的位置,按住鼠标左键,移动鼠标到目标位置,释放鼠标左键。按住鼠标左键,移动鼠标到目标位置,释放鼠标左键。n n还有一种情况如图还有一种情况如图7.3.107.3.10所示,要把一条直线分成斜线段。所示,要把一条直线分成斜线段。调整方法和前一种情况类似,不同之处在于按住鼠标之前要调整方法和前一种情况
93、类似,不同之处在于按住鼠标之前要先按下先按下ShiftShift键,出现小黑方框之后,鼠标点住小黑方框移键,出现小黑方框之后,鼠标点住小黑方框移动,移动好后释放动,移动好后释放ShiftShift键和鼠标。键和鼠标。 图图7.3.9 7.3.9 调整连线的位置(一)调整连线的位置(一) 图图7.3.10 7.3.10 调整连线的位置(二)调整连线的位置(二) 第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.3 7.3 7.3 7.3 建模方法建模方法建模方法建模方法 n n(3) (3) 在连线之间插入模块
94、在连线之间插入模块n n把该模块用鼠标拖到连线上,然后释放鼠标即可。把该模块用鼠标拖到连线上,然后释放鼠标即可。n n(4)(4)连线的分支连线的分支n n我们经常会碰到一些情况,需要把一个信号输送到不同的模我们经常会碰到一些情况,需要把一个信号输送到不同的模块,这时就需要分支结构的连线。如图块,这时就需要分支结构的连线。如图7.3.117.3.11所示,要把正所示,要把正弦波信号实时显示出来,同时还要到存到文件。这种情况地弦波信号实时显示出来,同时还要到存到文件。这种情况地步骤是:在先连好一条线以后,把鼠标移到支线的起点位置,步骤是:在先连好一条线以后,把鼠标移到支线的起点位置,先按下键,然
95、后按住先按下键,然后按住CtrlCtrl鼠标拖到目标模块的输入端,释放鼠标拖到目标模块的输入端,释放鼠标和鼠标和CtrlCtrl键。键。图图7.3.11 7.3.11 连线的连线的分支分支 第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真 7.3 7.3 建模方法建模方法 n n二、在连线上反映信息二、在连线上反映信息二、在连线上反映信息二、在连线上反映信息n n(1) (1) 用粗线表示向量用粗线表示向量n n为了能比较直观地区别各个模块之间传输的数据是数据还是为了能比较直观地区别各个模块之间传输的数据是数据还是矩阵(向量),可以选择模型文件
96、菜单矩阵(向量),可以选择模型文件菜单FormatFormat下的下的Wide Wide vector Linesvector Lines选项,这样传输向量的连线就会变粗。如果再选项,这样传输向量的连线就会变粗。如果再选择选择Format Format 下的下的Vector Lines WidthsVector Lines Widths选项,在传输矩阵的选项,在传输矩阵的连线上方会显示出通过该连线的矩阵维数。如图连线上方会显示出通过该连线的矩阵维数。如图7.3.127.3.12,模,模块块State SpaceState Space的输入为二维矩阵,在加粗的输入输出线的的输入为二维矩阵,在加粗
97、的输入输出线的上方分别标出了相应矩阵的维数。上方分别标出了相应矩阵的维数。图图7.3.12 7.3.12 用粗线表示用粗线表示向量向量 第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.3 7.3 7.3 7.3 建模方法建模方法建模方法建模方法 n n(2) (2) (2) (2) 显示数据类型显示数据类型显示数据类型显示数据类型n n在连线上可以显示一个模块输出的数据类型:选择菜单在连线上可以显示一个模块输出的数据类型:选择菜单FormatFormat下的下的Port Data TypesPort Dat
98、a Types选项。结果如图选项。结果如图7.3.137.3.13所示。所示。 图图7.3.13 7.3.13 在连线上显示数据类型在连线上显示数据类型 (3) (3) 信号标记信号标记 为了使模型更加直观、可读性更强,我们可以为传输的信号 作标记。 建立信号标记的办法是:双击要做标记的线段,出现一个小 文本编辑框,在里面输入标记的文本,这样就建立了一个信 号标记。信号标记可以随信号的传输从一些模块中进行传递。 支持这种传递的模块有Mux、Demux、Inport、From、 Selector、Subsystem和Enable。 第七章第七章第七章第七章 SimulinkSimulinkSim
99、ulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.3 7.3 7.3 7.3 建模方法建模方法建模方法建模方法 n n要实现信号标记的传递,需要在上面列出的某个模块的输出端要实现信号标记的传递,需要在上面列出的某个模块的输出端建立一个以建立一个以“” Creat Subsystem】,Simulink将会用一个子系统模块代替被选中的模块组,如图7.5.5所示。图图7.5.5 7.5.5 压缩后的模型图压缩后的模型图 第七章第七章第七章第七章SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.57.57.57.5子系
100、统和子系统的封装子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装步骤三:步骤三:子系统模块将有一个默认输入端口和输出端口。输入端口和输出端口的默认名分别为In1和Out1。调整子系统和模型窗口的大小使之美观,如图7.5.6所示。图图7.5.6 压缩后的模型图压缩后的模型图 第七章第七章第七章第七章SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.57.57.57.5子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装若想查看子系统内容或对子系统进行再编辑,可以双击子系统模块,则会出现一个显示子系
101、统内容的新窗口。在窗口内,除了原始的模块外,Simulink自动添加了输入模块和输出模块,分别代表子系统的输入端口和输出端口。改变它们的标签会使子系统的输入输出端口的标签也随着变化。特别注意:特别注意:菜单命令【Edit/Creat Subsystem】没有相反的操作命令。也就是说一旦将一组模块压缩成子系统,就没有直接还原的处理方法了(UNDO除外)。因此一个理想的处理方法是在压缩子系统之前先把模型保存一下,作为备份。二、子系统模块二、子系统模块在创建模型的时候,如果需要一个子系统,也可以直接在子系统窗口中创建。这样就省去了上面的压缩子系统和重新安排窗口的步骤。n n要使用子系统模块创建新的子
102、系统,先从要使用子系统模块创建新的子系统,先从Signals & Signals & SystemsSystems模块库中拖一个子系统模块到模型窗口中。双击子模块库中拖一个子系统模块到模型窗口中。双击子系统模块,就会出现一个子系统编辑窗口。系统模块,就会出现一个子系统编辑窗口。n n注意:注意:注意:注意:在信号输入端口要使用一个输入模块,在信号输出端在信号输入端口要使用一个输入模块,在信号输出端口要使用一个输出模块。口要使用一个输出模块。n n子系统创建完毕后,关闭子系统窗口。关闭子系统窗口之前子系统创建完毕后,关闭子系统窗口。关闭子系统窗口之前不需要做任何保存操作。子系统作为模型的一部分,
103、当模型不需要做任何保存操作。子系统作为模型的一部分,当模型被保存时,子系统会自动保存。被保存时,子系统会自动保存。第七章第七章第七章第七章SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.57.57.57.5子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装第七章第七章第七章第七章SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.57.57.57.5子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装例7.5.1 模拟
104、如图7.5.7所示的弹簧质量系统的运动状态。单个小车系统的运动方程如下:图图7.5.7 弹簧质量系统弹簧质量系统 先建立如图7.5.8所示的单个小车系统的子系统 图图7.5.8 单个小车系统单个小车系统 第七章第七章第七章第七章SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.57.57.57.5子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装使用子系统模块创建如图7.5.9所示的子系统,此子系统用来模拟一个小车的运动。子系统的输入为小车的左距x(n-1)和右距x(n+1),输出为小车的当前位置x(n)
105、.子系统完成之后,关闭 子系统窗口。复制两次此子系统模块,并如图7.5.10所示链接起来。图图7.5.9 7.5.9 小车小车1 1的子系统模型的子系统模型 图图7.5.10 使用子系统的三小车模型使用子系统的三小车模型第七章第七章第七章第七章SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.57.57.57.5子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装为了可以对每个小车的参数进行赋值,要做以下设置: 对小车1,将标签为LeftSpring的增益模块的增益系数设置为k1,标签为RightSprin
106、g 的增益模块的增益系数设置为k2,标签为1/mass的增益模块的增益系数设置为1/m1。设置速度积分模块的初始值为0,位置积分模块的初始值为1。 对小车2,将标签为LeftSpring 的增益模块的增益系数设置为k2,标签为RightSpring 的增益模块的增益系数设置为k3,标签为1/mass的增益模块的增益系数设置为1/m2。设置速度积分模块的初始值为0,位置积分模块的初始值为1。 对小车3,将标签为LeftSpring的增益模块的增益系数设置为k3,标签为RightSpring 的增益模块的增益系数设置为k4,标签为1/mass的增益模块的增益系数设置为1/m3。设置速度积分模块的初
107、始值为0,位置积分模块的初始值为1。第七章第七章第七章第七章SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.57.57.57.5子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装n n此时就可以很方便地此时就可以很方便地 使用使用MatlabMatlab变量对弹簧常数变量对弹簧常数k1,k2,k3k1,k2,k3和和小车质量小车质量m1,m2,m3m1,m2,m3进行赋值。这里使用了一个名为进行赋值。这里使用了一个名为set_k_m set_k_m 的的M M文件对它进行赋值,如下所示:文件对它进行赋值
108、,如下所示:n n&set the spring constants and block mass values&set the spring constants and block mass valuesn nk1=1;k1=1;n nk2=2;k2=2;n nk3=4;k3=4;n nm1=1;m1=1;n nm2=3;m2=3;n nm3=2;m3=2;n n仿真开始之前在仿真开始之前在MatlabMatlab命令窗口中运行此命令窗口中运行此M M文件。文件。n n然后,指定示波器模块把显示数据保存到工作间中,并设置仿然后,指定示波器模块把显示数据保存到工作间中,并设置仿真的起始时间(真
109、的起始时间(StartTimeStartTime)为)为0 0,终止时间(,终止时间(StopTimeStopTime)为)为100100。n n仿真结束后,在仿真结束后,在MatlabMatlab窗口中把所得到的小车窗口中把所得到的小车3 3的显示数据绘的显示数据绘制成图。制成图。第七章第七章第七章第七章SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.57.57.57.5子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装7.5.2 子系统的封装子系统的封装封装技术是将Simulink子系统“包装”成一
110、个模块,并可以如同使用Simulink内部模块一样使用的技术。每个封装模块都可以有一个自定义的图标用来设定参数的对话框,参数设定方法也与Simulink模块库中的内部模块完全相同。为了更好的理解封装的含义,见图7.5.10所示的模型。此模型与例7.5.1中的模型完全等价,但它要更容易使用。双击Spring-mass1模块可以打开该模块属性的对话框。与例7.5.1中打开每个模块去修改参数不同,这里可以直接在此对话框中输入参数。对话框的结构与形式都和“原装”的模型毫无两样。本节将主要以此弹簧质量系统为例来详细介绍创建一个封装模块的步骤。第七章第七章第七章第七章SimulinkSimulinkSim
111、ulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.57.57.57.5子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装创建一个封装模块的主要步骤分为三步: 创建一个子系统; 选中子系统,选择模型窗口菜单中的【EditMask subsystem】选项生成封装模块; 使用封装编辑器设置封装文本、对话框和图标。一、子系统到封装模块的转换一、子系统到封装模块的转换当按照上节中介绍的方法创建以弹簧质量子系统模块之后(如图7.5.10所示),将其复制到一个新的窗口中,如图7.5.11所示。选中此模块,在窗口的菜单中执行【EditMask subsys
112、tem】指令,弹出如图7.5.12所示的一个封装编辑对话框。该对话框有三个选项卡。下面分别讨论这三个选项卡的功能和使用。第七章第七章第七章第七章SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.57.57.57.5子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装图图7.5.11 将子系统复制到新窗口将子系统复制到新窗口 图图7.5.12 封装编辑对话框封装编辑对话框第七章第七章第七章第七章SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.57.
113、57.57.5子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装(1) 文本页文本页 Documentation图7.5.13是编辑器的文本页。它也包括三个区域,每个区域都为一个自由区,既可填写也可以不填写。 Mask type:该区内容将作为模块的类型显示在封装模块的对话框中。 Block description:此区中的内容将显示在封装模块对话框的上部,它的位置在后面的图中可能看得更清楚。其内容脑壳描述模块的功用的简短语句或其它关于使用此模块的注意事项等。 Block help:当对话框中的【help】按钮按下时,MATLAB的帮助系统将显示此区中的内容,其内
114、容应当包括使用此模块的详细说明。第七章第七章第七章第七章SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.57.57.57.5子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装(2) 初始化页初始化页 Initialization初始化页是用来设置封装模块参数项的,如图7.5.14所示。此页也包括三个区域。 上区为Mask type区。此封装类型区与文本页中的封装类型区是等同的,可以在任意一页中定义或改变封装类型。 中区是用来设置封装模块对话框中的输入变量项目,如输入变量或操作选择等等。此区包括一个滚动项
115、目列表、一套“加入”、“删除”和“移动”按钮,以及5个设置项目属性的编辑区。 底区为Initialization commands,在此区中可以输入MATLAB语句,如定义变量、初始变量值等等。第七章第七章第七章第七章SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.57.57.57.5子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装 封装子系统与非封装子系统的一个重要的区别在于模块对话框中变量的作用范围。非封装子系统模块中的变量可以直接在MATLAB工作间中赋值。而封装子系统的模块则不能。封装子系统有
116、一个独立于MATLAB工作间及其它子系统的内部存储空间、这个特点可以防止模块变量与其它工作间中无关变量的冲突。因此,在封装模块中用到的变量要在封因此,在封装模块中用到的变量要在封装编辑器对话区或初始命令区中设置。装编辑器对话区或初始命令区中设置。第七章第七章第七章第七章SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.57.57.57.5子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装图图7.5.13 封装编辑器的文本页封装编辑器的文本页 图图7.5.14 封装编辑器的初始化页封装编辑器的初始化页第七章
117、第七章第七章第七章SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.57.57.57.5子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装(3) 图标页图标页 Icon编辑器的图标页如图7.5.12所示,它是用来给封装模块设计自定义图标的。此页分6个区。顶区的【Mask type】同其它两页中的【Mask type】是等同的。【Deawing commands】区是以MATLAB语句来绘制图标的编辑区。其余的4个区是用来指定图标的属性,理解了图标的这些属性再来分析图标的绘制命令是很容易的。 Icon fr
118、am: 第一个属性为图标框选项,他由一个下拉菜单组成,分别有可见、不可见选项。所谓的图标框即图标的边界线。 Icon transparency:第二个属性为图标的透明度选项,也是由一个下拉菜单组成,有两个选项,透明和不透明。第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 Icon rotation:第三个选项为图标旋转选项,其下拉菜单选项为固定和旋转。这个选项决定了当执行【FormatFlip block】或【FormalRotate Block】指令时的图标形状。 Drawing cooedenates:最后
119、一个区是图形坐标区,用来设置绘图的比例。它有三个选项: Pixed:用来设置绘图系为绝对坐标系,其效果为当模块图调整大小时,图标不随其大小的改变而改变。此参数下的坐标系应为象素点坐标,图标的左下角为坐标系的原点。 Autoscale:该选项使得图标图形恰好充满整个模块。 Normalized:该选项是设置绘图比例在0河1之间的选项。图标的左下角的坐标定义为(0,0),模块的右上角坐标定义为(1,1)。当模块调整大小的时候,坐标系同样被调整。 第七章第七章第七章第七章SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.57.57.57.5
120、子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装子系统和子系统的封装二、查看封装和解封装二、查看封装和解封装对于一个已封装的子系统要想查看其封装前子系统的具体内容,可以选着菜单命令【EditLook Under mask】。若要对已经封装的模块进行解封装操作,要先选中此模块,打开封装编辑器,按下Unmask按钮,则封装就被解开。若要再次封装此子系统,选着【EditMask subsystem】即可。第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.6 7.6 7.6 7.6 回调回调回调回调回调是
121、一种回调是一种MATLAB命令,他在某种事件,如打开模块或双命令,他在某种事件,如打开模块或双击模块等情况发生时执行。击模块等情况发生时执行。例如,通常双击一个模块时,屏幕上将会显示出此模4块的对话框。而对示波器模块,双击它将会执行一个显示示波器的回调函数。回调与回调与MATLAB的图形处理有着很紧密的联系。的图形处理有着很紧密的联系。例如,当使用图形处理工具创建一个菜单时,每个菜单选项通常是与同一个回调相对应的,它会在选项被选中时自动执行。回调可以是一句非常简单的MATLAB命令。例如,若菜单选项为【Close Figure】,比较合适的回调语句是MATLAB命令close。回调回调在更多的
122、情况下是一个可以完成指定操作的在更多的情况下是一个可以完成指定操作的M文件。文件。第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.6 7.6 7.6 7.6 回调回调回调回调7.6.1 回调函数的介绍回调函数的介绍使用MATLAB的set_param命令可以加载回调,具体格式为set_param(object,parameter,value)其中: object为包含模型名或模块路径的MATLAB字符串。如果回调是关于模型动作的,则object为模型名。例如,一模型以car_mod.mdl为名保存,则obj
123、ect应当为car_mod。如果回调是关于模块的,则此模块的Simulink路径将成为object。例如,对于car_mod模型中的子系统Controller中的Gain_1模块,object应为字符串car_mod/Controller/Gain_1。 parameter是一个包含回调参数的MATLAB字符串。 value是包含回调函数名的字符串。例如,回调一名为set_gain.m的M文件,则value应为字符串set_gain。第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.6 7.6 7.6 7.6
124、 回调回调回调回调例7.6.1 考虑图7.6.1所示的Simulink模型。若模型以callb_1.mdl为名保存,其中常数块的值设置为In_val。希望在用户打开模型的时候,模型会自动提示要求输入In_val的值。图图7.6.1 使用回调初始化的模型图使用回调初始化的模型图用下面名为initm_1.m的简单M文件来实现回调,此M文件只有一个一条语句: In_val=input(Enter the valuv:);第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.6 7.6 7.6 7.6 回调回调回调回调为
125、了在模型打开的时候自动加载此回调,打开模型,并在MATLAB命令窗口中输入: set_param(callb_1,PreloadFcn,inetm_1)保存此模型并关闭。下一次打开模型的时候,MATLAB会自动提示: Enter the value:并将输入值赋给In_val变量。若希望当仿真开始之前而不是模型打开时再输入参数值,则需要下面的命令来加载回调: set_param(callb_1,InitFcn,inetm_1)第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.6 7.6 7.6 7.6 回调回
126、调回调回调7.6.2 基于回调的图形用户界面基于回调的图形用户界面使用回调可以很容易地为使用回调可以很容易地为Simulink模型创建一个图形用户界模型创建一个图形用户界面。面。线性模块库中的滑块增益模块就是一个很好的例子。此模块是一个带有回调所产生的用户界面的增益模块,其界面如图7.6.2所示。本小节介绍这种图形界面的创建过程和相关的程序问题。图图7.6.2 滑块增益模块的用户界面窗口滑块增益模块的用户界面窗口 第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.6 7.6 7.6 7.6 回调回调回调回调在
127、Simulink模型中,带有基于回调的图形界面的模块可以通过双击使回调函数加载。打开后应响应如下事件: 双击模块打开用户界面(OpenFcn)。此回调应包括创建界面图形并对其初始化的程序,而且程序还要确认在打开之前没有其它同一模块的图形界面打开。 删除该模块(DeleteFcn),则关闭相应的界面图形。 包含该模块的模型被关闭(ModelCloseFcn),则关闭界面。 包含该模块的子系统被关闭(ParentCloseFcn),则关闭界面。 界面窗口的控制按钮操作。经验表明在回调M文件中加入加载回调的语句是非常有用的。一旦程序被执行,则回调将会成为模型的一个参数部分,运行速度大大提高。第七章第
128、七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.6 7.6 7.6 7.6 回调回调回调回调如下所示的一段程序代码可以作为回调函数M文件的一个样板,读者可以从中看出此类文件的一般规律,稍作修改,即可应用于其它情况。function clbktplt(varargin)% Callback function template% Install this callback by invoking it with the command% clbktplt(init_block)% at the MATLAB promp
129、t with the appropriate model file open and selected.% To use the template, save a copy under a new name. Then replace % clbktplt with the new name everywhere it appears.第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.6 7.6 7.6 7.6 回调回调回调回调action = varargin1 ;switch action, case i
130、nit_block, init_fcn ; % Block initialization function, % located in this M-file case create_fig, if(findobj(UserData,gcb) % Dont open two for same block disp(Only open one instance per block can be opened) else % Here, put all commands needed to set up the figure and its % callbacks.第七章第七章第七章第七章 Sim
131、ulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.6 7.6 7.6 7.6 回调回调回调回调 left = 100 ; % Figure position values bottom = 100 ; width = 100 ; height = 100 ; h_fig = figure(Position,left bottom width height, . MenuBar,none) ; set(h_fig,UserData,gcb) ; % Save name of current block in % the figures Use
132、rData. This is % used to detect that a clbktplt fig % is already open for the current block,第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.6 7.6 7.6 7.6 回调回调回调回调 % so that only one instance of the figure % is open at a time. end case close_fig, % Close if open when model is clos
133、ed. h_fig = findobj(UserData,gcb) ; if(h_fig) % Is the figure for current block open? close(h_fig) ; % If so, close it. end第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.6 7.6 7.6 7.6 回调回调回调回调 case rename_block, % Change the name in the figure UserData. h_fig = findobj(UserData,
134、gcb) ; if(h_fig) % Is the figure open? set(h_fig,UserData,gcb) ; % If so, change the name. end 第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.6 7.6 7.6 7.6 回调回调回调回调%*%* init_fcn * %* case UserAction1, % Place cases for various user actions % here. These callbacks should be defin
135、ed % when the figure is created.end第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.6 7.6 7.6 7.6 回调回调回调回调function init_fcn()% Configure the block callbacks% This function should be executed once when the block is created% to define the callbacks. After it is executed, save the mo
136、del% and the callback definitions will be saved with the model. There is no need% to reinstall the callbacks when the block is copied; they are part of the% block once the model is saved.sys = gcs ;第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.6 7.6 7.6 7.6 回调回调回调回调block = sys,
137、/InitialBlockName ; % Replace InitialBlockName with the % name of the block when it is % created and initialized. This does % not need to be changed when the block % is copied, as the callbacks wont be % reinstalled.set_param(block,OpenFcn, clbktplt create_fig,. ModelCloseFcn,clbktplt close_fig, . D
138、eleteFcn, clbktplt close_fig, . NameChangeFcn,clbktplt rename_block) ;第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.7 S7.7 S7.7 S7.7 S函数函数函数函数S函数函数是扩展Simulink功能的强有力工具,它使用户可以利用MATLAB、C语言、C+语言等程序创建自己定义的Simulink模块。例如,对一个工程的几个不同的控制系统进行设计,而此时已经用M文件建立了一个动态模型,在这种情况下,可以将模型加入到S函数中,然后使用独
139、立的Simulink模型来模拟这些控制系统。S函数还可以改善仿真的效率,尤其是在带有代数环的模型中。S函数使用一种特殊的调用规则来使得用户可以与Simulink的内部解法器进行交互,这种交互通Simulink内部解法器与内置的模块之间的交互非常相似。而且可以适用于不同性质的系统,例如连续系统、离散系统以及混合系统。第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.7 S7.7 S7.7 S7.7 S函数函数函数函数7.7.1 S7.7.1 S7.7.1 S7.7.1 S函数模块函数模块函数模块函数模块 S S
140、函数模块在函数模块在functions & Tablesfunctions & Tablesfunctions & Tablesfunctions & Tables模块库模块库模块库模块库中,用此模块可以中,用此模块可以创建包含创建包含S S函数的函数的SimulinkSimulink模型。图模型。图7.7.17.7.1显示了一个含有显示了一个含有S S函函数的简单模型。数的简单模型。S S函数模块的对话框如图函数模块的对话框如图7.7.27.7.2所示,它有两所示,它有两个区:个区:S S S S函数文件名区函数文件名区函数文件名区函数文件名区和和S S S S函数的参数区函数的参数区函数的
141、参数区函数的参数区。S S函数文件名区要填函数文件名区要填写写S S函数的文件名。函数的文件名。S S函数参数区要填写函数参数区要填写S S函数所需要的参数。函数所需要的参数。参数并列给出,各参数间以逗号分隔。如图参数并列给出,各参数间以逗号分隔。如图7.7.27.7.2所示。表示所示。表示了了S S函数的参数为:函数的参数为:1.5,1.5,矩阵矩阵1 2;3 41 2;3 4和字符串和字符串milesmiles。 图图7.7.1 包含包含S函数的模型函数的模型第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真
142、7.7 S7.7 S7.7 S7.7 S函数函数函数函数 图图7.7.2 S函数模块的对话框函数模块的对话框 第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.7 S7.7 S7.7 S7.7 S函数函数函数函数7.7.2 S函数的工作原理函数的工作原理S函数具有一套不同的调用方法,可以在仿真的不同阶段完成不同的调用任务。在模型仿真的不同阶段,Simulink会对模型中S函数模块选择适当的方法来完成调用。S函数可以完成的任务大体分为以下几种。(1) 初始化初始化。在进入仿真循环之间,Simulink首先初始化
143、S函数,主要完成任务: 初始化包含S函数信息的仿真结构SimStruct。 设置输入输出端口的数目和维数。 设置模块的采样时间。分派内存区和sizes数组。(2) 计算下一个采样点计算下一个采样点。若用户使用了可变采样时间的模块,在这一阶段需要计算下一个采样点时间,也就是说要计算下一个时间步长。第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.7 S7.7 S7.7 S7.7 S函数函数函数函数(3) 计算主时间步的输出量。计算主时间步的输出量。此调用结束后,所有模块的输出端口对当前的时间步都是有效的。(4)
144、 更新主时间步的离散状态。更新主时间步的离散状态。(5) 积分计算积分计算。这一步只有当模型带有连续状态或带有非采样过零点时才有效。若S函数带有连续状态,则Simulink以较小的时间步长来调用S函数的输出和微分方法;若S函数具有非采样过零点,Simulink将以较小的时间步来计算S函数的输出和过零点部分。第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.7 S7.7 S7.7 S7.7 S函数函数函数函数7.7.3 S函数中的几个概念函数中的几个概念S函数中有几个关键的概念需要详细解释,对这几个概念的深入理
145、解对正确使用S函数是非常重要的。(1) 直接馈入直接馈入所谓的直接馈入是指模块的输出或采样时间是由它的一个输入端口的值直接控制。判断S函数地输入端口是否有直接馈入的判据有: 输出函数(mdlOutpits或者flag=3)是一个参数包含u的函数。 若改S函数是一个可变采样时间的S函数,且下一个采样时间点的计算中要用到输入参数u时,也可以判断此S函数为直接馈入型。第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.7 S7.7 S7.7 S7.7 S函数函数函数函数(2) 动态尺寸的输入动态尺寸的输入S函数可以支
146、持任意维的输入,此时,输入的维数是由输入变量的维数动态确定的。同时,输入变量的维数也决定了连续和离散状态量的个数以及输出变量的维数。M文件S函数只能有一个输入端口,并且输入端口只能接收一维信号。然而,信号可以是变宽度的。在一个M文件S函数里,为了指定输入的宽度是动态的,可以指定sizes结构的适当区域的值为1。也可以在S函数调用的时候使用length(u)来确定实际输入的宽度。若指定宽度值为0,则输入端口会从S函数模块中去掉。第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.7 S7.7 S7.7 S7.7
147、S函数函数函数函数例如,图7.7.3所示表示了在同一个模型中使用同一个S函数模块的两种情况,前者的S函数模块是由一个三元素向量驱动,后者则是由一个标量输出模块信号驱动,为了表明S函数函数模块的输入是动态的,两个S函数模块是完全相同的Simulink自适应地使用合适的尺寸来调用函数。类似地,若其它模块属性如输出变量数和状态数也被指定为动态尺寸的,Simulink将会定义这些变量与输入变量同维。图图7.7.3 同一个模型中使用同一个同一个模型中使用同一个S函数模块的两种情况函数模块的两种情况 第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和
148、仿真建模和仿真建模和仿真 7.7 S7.7 S7.7 S7.7 S函数函数函数函数(3) 采样时间的设置与采样延迟采样时间的设置与采样延迟M文件S函数和C语言S函数都在指定S函数的运行时间上有高度的自适应度。Simulink为采样时间提供了下面的几种选着。 连续采样时间连续采样时间:适用于具有连续状态和非采样过零点的S函数。这种S函数的输出按最小时间步改变。 连续但固定最小步长的采样时间连续但固定最小步长的采样时间:适用于需要在每一个主仿真时间步执行,但在最小仿真步内值不改变的。 离散采样时间离散采样时间:若S函数得行为发生具有离散时间间隔的函数,用户可以定义一个采样时间来规定Simulink
149、何时调用函数。而且用户还可以定义一个延迟时间offset来延迟采样点,但offset的值不能超过采样周期。第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.7 S7.7 S7.7 S7.7 S函数函数函数函数若用户定义了一个离散采样时间,则Simulink就会在所定义的每个采样点调用S函数的mdlOutpit和mdlUpdate方法。 可变采样时间可变采样时间:相邻采样点的时间间隔可变得离散采样时间。在这种采样时间的情况下,S函数要在每一步仿真的开始,计算下一个采样点的时刻。 继承采样时间继承采样时间:在有些
150、情况下,S函数模块自身没有特定的采样时间,它本身的状态是连续的还是离散的完全取决于系统中的其它模块。此时,该S函数模块的采样时间属性可以设为继承。例如gain模块就是一个继承输入信号采样时间的例子。一般,一个模块可以从以下几个方式来继承采样时间: 继承驱动模块的采样时间; 继承目标模块的采样时间; 继承系统中最快的采样时间。第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.7 S7.7 S7.7 S7.7 S函数函数函数函数7.7.4 S函数动画函数动画基于S函数地动画就是一个由没有状态函数、没有输出变量的S
151、函数生成的动画。因此它们只能作常规显示。这种S函数有两个主要部分:初始化部分初始化部分和更新部分更新部分。 在初始化过程中要创建图形窗口及动画对象; 在更新过程中,动画对象的属性将作为S函数模块的输入函数,且它的变化导致动画对象的运动可能会以其它形式变化。(1) 动画的初始化S函数动画的初始化语句包括S函数的初始化和图形的初始化。采样时间应设置为较小的数值以便动画可以看起来更加连续。但同时也不能太小,因为那会使得仿真过程运行起来太慢。第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.7 S7.7 S7.7 S
152、7.7 S函数函数函数函数首先需要检验与当前S函数模块相联系的动画图形是否已打开。这里使用的方法是将当前模块的路径保存到图形的UserData参数中。此时使用gcd函数是一种比较安全的方法,因为在S函数的执行过程中,gcd总会返回S函数模块的路径。完成此任务的MATLAB命令可为如下形式: if(findobj(UserData,gcb) % 若模型已经打开,则不作任何事 else % 初始化图形 end其中的初始化图形语句可由figure命令实现,例如 h_fig=figure(Position,x_pos,y_pos,width,height然后,将当前S函数模块的路径保存到图形UserD
153、ata中,这样对图形的存在性检验才会正常工作。下面的语句可以用来设置UserData: set(h_fig,UserData,gcb);第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.7 S7.7 S7.7 S7.7 S函数函数函数函数使用MATLAB绘图命令绘制动画图形。接着保存这些图形元素的句柄。例如,要绘制由向量x_array和y_array定义的曲线,使用下面的语句: hdl=plot(x_array,y_array);图形初始化的最后一步是保存这些仿真元素的句柄。这里使用的方法是将这些元素成组地保
154、存到一个MATLAB变量中,并把此变量保存到S函数模块的UserData中。UserData中可以保存MATLAB的任何变量,包括单元数组合结构。假设要绘制两个图形元素的动画,而它们的句柄名分别为hd1和hd2,下面的语句会把它们保存到一个结构中。 t_data.hd1=hd1; t_data.hd2=hd2; set_param(gcd,UserData,t_data);第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.7 S7.7 S7.7 S7.7 S函数函数函数函数(2) 动画的更新动画的更新由于设置
155、采样时间为正数,所以动画S函数可以被看成是离散模块。Simulink将以flag=2在采样时间执行S函数。更新函数会从S函数模块UserData中读取即将改变得图形对象的句柄。例如,如果句柄以结构变量的形式储存,则它们可以写成如下形式。 T_data=get_param(gcd,UserData); hd1=t_data.hd1; hd2=t_data.hd2;然后计算改变得对象属性的新值,并使用set命令更新属性。 Set(handle,propertyName,propertyValue);其中handle为对象的句柄,propertyName为有即将改变得对象属性的对象名构成的MATLA
156、B字符串。propertyValue为新的属性值。第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.7 S7.7 S7.7 S7.7 S函数函数函数函数例7.7.1 在本例中,将创建一个在半球形槽内往复滚动的圆盘的动画。分析:假设圆盘在槽内做无滑动的滚动,则系统的运动方程为其中:,为重力加速度,和的动力学关系为图7.7.4为此系统运动方程的Simulink模型,它用一个动画S函数模块来显示圆盘运动。第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建
157、模和仿真建模和仿真 7.7 S7.7 S7.7 S7.7 S函数函数函数函数 S函数为一个M文件,其程序代码如下,function sys,x0,str,ts = s_anm81s(t,x,u,flag)% S-file animation example 1% This example demonstrates buidling an animation % using a single S-file with no callbacks.% Based on sfuntmpl.m, supplied with SIMULINK% Copyright (c) 1990-96 by The Ma
158、thWorks, Inc.% 第七章第七章 SimulinkSimulink建模和仿真建模和仿真 7.7 S7.7 S函数函数switch flag, case 0, % Initialization sys,x0,str,ts=mdlInitializeSizes; case 1, % Derivatives sys=mdlDerivatives(t,x,u); case 2, sys=mdlUpdate(t,x,u); case 3, sys=mdlOutputs(t,x,u); % Compute output vector case 4, % Compute time of next
159、sample sys=mdlGetTimeOfNextVarHit(t,x,u); case 9, % Finished. Do any needed sys=mdlTerminate(t,x,u); otherwise % Invalid input error(Unhandled flag = ,num2str(flag);end第七章第七章 SimulinkSimulink建模和仿真建模和仿真 7.7 S7.7 S函数函数%*%* mdlInitializeSizes * %*function sys,x0,str,ts=mdlInitializeSizes()% Return the
160、sizes of the system vectors, initial % conditions, and the sample times and offets.sizes = simsizes; % Create the sizes structuresizes.NumContStates = 0;sizes.NumDiscStates = 0;sizes.NumOutputs = 0;sizes.NumInputs = 1;sizes.DirFeedthrough = 0; sizes.NumSampleTimes = 1;第七章第七章 SimulinkSimulink建模和仿真建模和
161、仿真 7.7 S7.7 S函数函数sys = simsizes(sizes); x0 = ; % There are no statesstr = ; % str is always an empty matrix % Update the figure every 0.25 sects = 0.25 0; %initialize the array of sample times. % Initialize the figure% The handles of the disk and index mark are stored % in the blocks UserData. if(fi
162、ndobj(UserData,gcb) % Figure is open, do nothingelse h_fig = figure(Position,200 200 400 300, . MenuBar,none,NumberTitle,off, . Resize,off, . 第七章第七章 SimulinkSimulink建模和仿真建模和仿真 7.7 S7.7 S函数函数 Name,gcs, Rolling Disk) ; set(h_fig,UserData,gcb) ; % Save name of current block % in the figures UserData. %
163、 This is used to detect % that a rolling disk figure % is already open for the % current block, so that % only one instance of the % figure is open at a time % for a given instance of the % block. r = 2 ; R = 12 ; q = r ;第七章第七章 SimulinkSimulink建模和仿真建模和仿真 7.7 S7.7 S函数函数 thp = 0:0.2:pi ; xp = R*cos(th
164、p); yp = -R*sin(thp) ; xp = xp,-R,-(R+q),-(R+q),(R+q), (R+q),R ; yp = yp,0,0,-(R+q),-(R+q),0,0 ; cl_x = 0,0 ; cl_y = 0,-R ; % Make the disk thp = 0:0.3:2.3*pi ; xd = r*cos(thp); yd = r*sin(thp) ; hd = fill(xp,yp,0.85,0.85,0.85); % Draw trough hold on ; % So it wont get erased第七章第七章 SimulinkSimulink建
165、模和仿真建模和仿真 7.7 S7.7 S函数函数 set(hd,erasemode,none); axis(equal);axis(off); hd0 = plot(cl_x,cl_y,k-); % Draw the centerline set(hd0,erasemode,none); % During this initialization pass, create the disk % (hd2) and the index mark (hd3). theta = 0 ; xc = (R-r)*sin(theta); % Find center of disk yc = - (R-r)*
166、cos(theta) ; psi = theta*(R-r)/r ; xm_c = r*sin(psi) ; % Relative position of index mark ym_c = r*cos(psi) ; xm = xc + xm_c ; % Translate mark ym = yc + ym_c ;第七章第七章 SimulinkSimulink建模和仿真建模和仿真 7.7 S7.7 S函数函数hd2 = fill(xd+xc, yd+yc, . 0.85,0.85,0.85) ; % Draw disk and markhd3 = plot(xc,xm,yc,ym,k-);
167、set_param(gcb,UserData,hd2,hd3) ;End%*%* mdlDerivatives *%*function sys=mdlDerivatives(t,x,u)% Compute derivatives of continuous statessys = ; % Empty since no continuous states%*%* mdlUpdate *%*第七章第七章 SimulinkSimulink建模和仿真建模和仿真 7.7 S7.7 S函数函数function sys=mdlUpdate(t,x,u)% Compute update for discret
168、e states.sys = ; % Empty since this model has no states.% Update the figurer = 2 ; R = 12 ;q = r ;userdat = get_param(gcb,UserData) ;hd2 = userdat(1) ;hd3 = userdat(2) ;theta = u(1) ; % The sole input is thetaxc = (R-r)*sin(theta); % Find center of diskyc = - (R-r)*cos(theta) ;psi = theta*(R-r)/r ;x
169、m_c = r*sin(psi) ; % Find relative position of index第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.7 S7.7 S函数函数ym_c = r*cos(psi) ;xm = xc + xm_c ; % Translate markym = yc + ym_c ;thp = 0:0.3:2*pi ;xd = r*cos(thp);yd = r*sin(thp) ;% Move the disk and index marks to new positionss
170、et(hd2,XData,xd+xc); set(hd2,YData,yd+yc);set(hd3,XData,xc,xm);set(hd3,YData,yc,ym);第七章第七章第七章第七章 SimulinkSimulinkSimulinkSimulink建模和仿真建模和仿真建模和仿真建模和仿真 7.7 S7.7 S函数函数%*%* mdlOutputs *%*function sys=mdlOutputs(t,x,u)% Compute output vector sys = ;%*%* mdlGetTimeOfNextVarHit *%*第七章第七章 SimulinkSimulink建模
171、和仿真建模和仿真 7.7 S7.7 S函数函数function sys=mdlGetTimeOfNextVarHit(t,x,u)sys = ;%*%* mdlTerminate *%*function sys=mdlTerminate(t,x,u)% Perform any necessary tasks at the end of the simulationsys = ;第七章第七章 SimulinkSimulink建模和仿真建模和仿真 本章小结本章小结高性能、低成本以及短周期的更新换代是当今科学研究和工业生产企业一大特点,而研究对象的模型化、模型的模块化是满足这些要求的基本条件之一。M
172、atlab和Simulink为用户提供了一个强大的、并具有友好界面的建模和动态仿真的环境。并且Simulink借助Matlab在科学计算、图形和图像的处理、甚至各类建模和仿真的代码生成这些优势,可以非常方便地为用户创建和维护一个研究对象的模型、评估各类设计原理和方法,大大加快科学研究的时间、加快企业产品的开发过程。第七章第七章 SimulinkSimulink建模和仿真建模和仿真 本章小结本章小结本章向读者介绍了Simulink的部分基本知识和操作,包括建模方法建模方法、子系统和子系统的封装子系统和子系统的封装、回调回调和S函函数数,同时还向读者介绍了一些具体的应用实例。使读者通过本章的学习和
173、实际使用Simulink演算本章给出的算例,不但可以进一步掌握计算机仿真的基本概念和理论,也可以初步学会使用Simulink去真正地运用仿真技术解决科研和工程中的实际问题。但是限于篇幅和Simulink本身内容的丰富,本章所介绍的仅仅是Matlab和Simulink的部分入门知识。但目前许多出版社都有大量的Matlab和Simulink的书籍,所以感兴趣的读者可以参考这些资料。第七章第七章 SimulinkSimulink建模和仿真建模和仿真 习习 题题1 利用Matlab求的状态空间描述2 一个生长在罐中的细菌简单模型。假设细菌的出生率和当前细菌的总数成正比,死亡率和当前的总数的平方成正比。
174、若以代表当前细菌的总数,则细菌的出生率可以表示为:细菌的死亡率可表示为:细菌数量的变化率可以表示为出生率与死亡率之差。于是该系统可以表示为如下微分方程:假设,当前细菌的总数为100,计算时候罐中的细菌总数。 第七章第七章 SimulinkSimulink建模和仿真建模和仿真 习习 题题3 模拟如图7.5.7所示的弹簧-质量系统的运动状态,其动态方程表示为式(7.5.1)。试先建立单个小车的子系统,然后封装模块。4 在例7.7.1中,首先创建一个在半球形槽内往复滚动的圆盘的simulink模型,然后利用动画S函数模块来显示圆盘的运动。5 什么是代数环,当仿真系统中出现代数环时,通常有那些方法来消除代数环。利用Simulink仿真例4.4.4,利用几种不同的方法消除代数环,并比较。6 在Simulink中,有那些微分方程的解法,试总结它们的算法,并按单步法、多步法、定步长、变步长进行分类。第七章第七章 SimulinkSimulink建模和仿真建模和仿真 习习 题题7 建立下面各个框图给定的控制系统Simulink模型,并在适当的时间范围内,选着合适的算法对它们进行仿真分析,并绘制出不同阶跃输入幅值下的输出曲线。第七章第七章 SimulinkSimulink建模和仿真建模和仿真 习习 题题8 用Simulink建立下面的时变系统模型,并对数值进行仿真分析。