Matlab simulink建模与仿真 第十一章(端口及子系统库)【下】
参考视频:simulink1.1simulink简介_哔哩哔哩_bilibili
八、触发使能子系统
1、Enabled and Triggered Subsystem触发使能子系统概述
触发使能子系统其实是触发子系统和使能子系统二者的结合,当触发端口传来触发信号时,使能端口的输入需要大于1,触发使能子系统才能够工作。
2、示例——二阶离散传递函数
(1)将下面的二阶离散传递函数转换为差分方程形式,如下图所示。
(2)根据差分方程搭建数学模型(y(t)作为求和模块的输出,其输入不言而喻),并将其封装在触发使能子系统中,如下图所示。
(3)分别为使能端口和触发端口(上升沿触发)接入方波信号,触发信号的周期为1s,使能信号的周期为2s,由于当触发端口传来触发信号时,使能端口的输入需要大于1,触发使能子系统才能够工作,所以该触发使能子系统每隔2s才被触发一次。
九、函数调用子系统
Function-Call Subsystem函数调用子系统有一个函数端口,它链接一个S函数,当这个S函数被调用时,S函数决定是否调用函数调用子系统工作,鉴于S函数还未介绍,这里暂时不介绍函数调用子系统的功能。
函数调用子系统中带有function函数模块,函数模块只能搭配函数调用子系统模块使用,在普通子系统模块中添加函数模块后,该普通子系统将会变成函数子系统模块,相应地,其外部也会多出一个函数端口。
十、循环子系统
1、For Iterator Subsystem for循环子系统概述
(1)相比于普通的子系统,for循环子系统中多出一个for循环迭代器(For Iterator)。
(2)迭代器有一个迭代界限(Iteration limit),这个界限可以从外部输入,也可在模块内部配置,该界限决定一共执行几次循环(循环变量值超过迭代界限,循环结束);此外,循环变量默认来自模块内部,但也可以设置为来自外部输入(如果循环变量从外部递增,则下一个迭代值将通过外部输入端口读入,否则将递增1);不仅如此,还可选择输出循环变量, 如果显示输出端口,它将从0或1开始输出当前的迭代次数。
(3)当迭代开始时,子系统中的任何状态都可能被重置为初始值或保持为先前的值,这个也可以在迭代器中进行配置。
(4)for循环迭代器并没有延迟模块所拥有的性质,二者不能混为一谈,用示波器是观察不到循环变量等状态的变化的,另外在for循环子系统以外只能捕捉到循环结束时系统的状态,循环过程中系统的状态是没办法捕捉的。(或者换种说法,for循环可以转换成一长串重复率很高的语句,这些语句的执行几乎仅在一瞬之间,for循环也是如此,而不是每个采样时间循环变量自增一次)
2、While Iterator Subsystem while循环子系统概述
(1)相比于普通的子系统,while循环子系统中多出一个while循环迭代器(While Iterator)。
(2)迭代器有迭代条件(cond端口以逻辑值的形式输入迭代条件是否为真)和最大迭代次数(迭代器内部配置,Maximum number of iterations)的概念,运行while循环子系统中的程序块后,直到循环条件为假或达到最大迭代次数,循环结束。
(3)如果程序块处于do-while模式,while循环子系统中的所有程序块都将运行一次,然后再检查循环条件,否则必须向IC端口输入外部信号,以检查是否应在第一次迭代时运行程序块(IC的输入大于0,即可进行第一次迭代)。
(4)如果显示输出端口,迭代器将从1开始输出当前的迭代次数。
(5)当迭代开始时,子系统中的任何状态都可能被重置为初始值或保持为先前的值,这个也可以在迭代器中进行配置。
(6)while循环迭代器并没有延迟模块所拥有的性质,二者不能混为一谈,用示波器是观察不到while循环子系统状态的变化的,另外在while循环子系统以外只能捕捉到循环结束时系统的状态,循环过程中系统的状态是没办法捕捉的。(或者换种说法,while循环可以转换成一长串重复率很高的语句,这些语句的执行几乎仅在一瞬之间,而不是每个采样时间循环一次,while循环也是如此)
(7)前面提到过循环实际上可以等效为一大串高度重复的语句,这一大串语句的功能可以在模型文件中实现(不含延迟模块),这就意味着每个采样时刻循环子系统都会直接将最终循环结束时的状态输出到外部,而到下一采样时刻循环子系统就会重新进行第二轮循环,但这并不意味着循环子系统中的所有状态会被重置,如上例的Memory模块,这就导致第二轮循环可能不会达到预期的效果,这是需要注意的点(上例的仿真时长小于仿真步长,这才能将正确的结果输出到Display模块中,否则如果开始了第二轮循环,正确结果将会丢失)。
十一、If模块和If Action子系统
1、If模块
(1)If模块实现的功能和C语言(甚至是MATLAB)中的if语句一样,都是一个选择结构,它通常配合If Action子系统使用。
(2)If模块可以设置输入端口的数量(Number of inputs),它会根据输入的信号(依次为u1、u2...)判断是否满足条件,这个条件可以在下图所示的蓝色框中设置(写入条件表达式即可),不过该模块最多支持三个输出分支。
2、If Action子系统
相比于普通的子系统,If Action子系统中多出一个操作端口模块(Action Port),相应地,子系统外部也会多出一个选择输入端口,该端口连接If模块的输出,当If模块选择相应的分支后,连接该分支的If Action子系统将会工作,其它If Action子系统不工作。
十二、Switch模块和Switch Action子系统
1、Switch模块
(1)Switch模块实现的功能和C语言(甚至是MATLAB)中的switch语句一样,都是一个选择结构,它通常配合Switch Action子系统使用。
(2)Switch模块只有一个输入端口,它会根据输入的信号判断选择哪个分支,具体有多少分支,取决于Case conditions中列出了几个条件,条件用花括号括起,如下图所示,花括号中列出了两个分支的条件,其中第一个分支的条件为输入等于矩阵[1 2 3 4 5]中的某一元素,第二个分支的条件为输入等于矩阵[6 7]中的某一元素,如果勾选“Show default case”,那么还会提供一个不满足所有条件的分支。
2、Switch Action子系统
相比于普通的子系统,Switch Action子系统中多出一个操作端口模块(Action Port),相应地,子系统外部也会多出一个选择输入端口,该端口连接Switch模块的输出,当Switch模块选择相应的分支后,连接该分支的Switch Action子系统将会工作,其它Switch Action子系统不工作。