Simulink模型的运行顺序详解
Simulink模型的运行顺序详解
Simulink是MATLAB中的一个重要工具箱,广泛应用于工程和科研领域。了解Simulink模型的运行顺序对于提高建模仿真效率和准确性至关重要。本文将详细介绍Simulink模型的时间采样、信号流向以及模块计算顺序等内容。
Simulink模型的计算顺序
Simulink模型的计算顺序主要基于时间采样和信号流向。在每个采样点时间,模型中所有模块的状态和输入/输出值都需要计算并更新。每个模块的输出值通过信号连接传递给下一个模块的输入。
系统采样时间由解算器类型和步长共同决定,并作为Simulink模型仿真的最小粒度。当系统采样时刻到来时,每个模块会根据自身设定的采样时间方式决定是否在当前时刻进行计算。
模块采样时间属性
允许用户设定采样时间的模块在其参数对话框中都提供Sample Time
这个属性。常用的值有以下几组:
-1
:继承输入信号采样时间,若没有输入信号,继承父层模型采样时间;如果模块无输入信号且本身处于顶层模型中,则继承系统解算器的步长。0
:连续采样时间。- 非零正数:离散采样时间。
Inf
:无穷大采样时间,即不采样,如常数模块。
此外,还可以通过填入一个包含两个元素的数组[sampletime, offset]
来实现采样时刻的偏移。例如[0.2, 0.01]
表示采样类型是离散的,其周期为0.2s,但是采样时刻相对解算器的时钟有一个偏移量,具有此种采样时间向量的模块采样时间序列为0.01s、0.21s、0.41s等时刻进行计算。
子系统内部模块的计算顺序
当一个子系统内部包含多个模块时,模块的计算顺序是怎样的?了解这一点有助于增强我们在模型仿真出错时的分析能力和纠错能力。
Simulink的执行顺序是按照信号的流向进行的。子系统的入口采用Inport模块,同其输出连接的模块(非虚拟模块)往往是第一个需要计算的。当存在多个输入端口时,按照输入端口的编号从小到大顺序执行,再顺次更新这个模块的输出信号所连接的模块。
如果这个模块的输入端口有多个,那么需要所有输入端口的数据全部准备完毕之后,再计算多输入模块的状态量和输出量。具有多个输入分支的模块,其输入端口决定了输入到其分支上的模块执行顺序。
对于Simulink模型,可以通过菜单栏Display→Blocks-Sorted Executed Order
将模块的执行顺序显示出来,如下图所示。
上图中,除In1外每个模块都有红色的时序文字标注,格式为m:n
。其中m
表示模块在模型中执行的优先度,n
表示在同一个采样时刻,模块所处的执行次序号,二者都从0号开始计数,0表示最高优先度。
例如,首先必须要将输入In1数据传递给Gain模块,作为Add模块的第一个输入口连接的Gain模块先进行计算以得到输出值,接着与Add模块另一个输入口连接的Constant模块进行计算,两个模块都计算后,Add模块的两个输入端口数据便均准备完毕,可以进行Add模块的计算。待Add模块根据两个输入信号计算完毕之后,再将其输出值通过Out输出。