对于连续模块,Simulink采用积分方式计算输出信号的数值,因此,连续模块主要涉及数值的计算及其积分。离散模块的输出信号在下一个采样到来之前保挣恒定,这时候,Simulink只需要以一定的间隔计算输出信号的数值。混合模块是根据输入信号的类型来确定信号类型的,它既能够产生连续输出信号,也能够产生离散输出信号。
如果一个仿真模型中只包含离散模块,这时候,Simulink采用固定步长的方式进行仿真(即每隔一定的间隔计算一次输出信号)。当所有的离散模块都有相同的采样间隔时,Simulink只需要按照这个间隔实施仿真;否则,Simulink采用多速率方式进行仿真。多速率仿真模式的一种方案是选取一个最大的可用间隔,使之适用于所有的离散模块。这个间隔一般是各个离散模块采样间隔的最大公约数。对于可变步长方式,多速率仿真模型按照各个模块的采样间隔列出系统可能的仿真时刻,在仿真时刻到来的时候,只对相应的离散模块实施仿真,从而在一定程度上提高了仿真的效率。
如果仿真模型中包含了连续模块,Simulink将采用连续方式对模块进行仿真。如果模块中既包括连续模块,又包含离散模块,Simulink采用两种仿真步长进行仿真。对于其中的离散模块,Simulink可以按照离散模块的方式进行仿真,这个仿真步长称为主步长。在每个步长仿真中,Simulink使用小步长间隔,通过积分运算得到连续状态的当前输出信号。
Simulink仿真包括两个阶段:初始化阶段和模型执行阶段。
1.初始化阶段
在初始化阶段,Simulink内部主要完成以下工作。
1)模型参数传给MATLAB进行估计,得到的数值结果将作为模型的实际参数。
2)展开模型的各个层次,每一个执行的子系统被它包含的模块代替。
3)模型中的模块按更新的次序进行排序。
排序算法产生一个列表,以确保具有代数环的模块在产生它的驱动输入的模块被更新后才更新。当然,这一步要先检测出模型中存在的代数环。
4)决定模型由无显式设定的信号属性。
例如名称、数据类型、数值类型以及大小等,并且检查每个模块是否能够接收连接到它们输入端的信号。Simulink使用属性传递来确定未被设定的属性,这个过程将源信号的属性传递到它所驱动的模块的输入信号。
5)决定所有无显示设定才采样的时间模块的采样时间。
6)分配和初始化用于存储每个模块的状态和输入当前值的存储空间。
完成以上工作后,就可以进行下一步工作了,也就是模型执行阶段。
2.模型执行阶段
一般模型是使用数值积分来进行仿真的,所运用的仿真解法器(仿真算法)依赖于模型提供它的连续积分能力。计算微分可分为以下两步来进行。
1)按照排列所确定的次序计算每个模块的输出。
2)根据当前时刻的输入和状态来决定状态的微分;得到微分向量后再把它返回给解法器;后者用它来计算下一个采样点的状态向量。一旦新的状态向量计算完毕,被采样的数据源模块和接收模块才被更新。
……
展开