Simulink仿真入门到精通(四) Simulink子系统

4.1 Simulink子系统详解

4.1.1 子系统概述

Simulink根据仿真特性将模块的属性分为两种:虚拟模块和非虚拟模块。

非虚拟模块在仿真过程中起到实际的作用,对其进行编辑或者增加删除操作会影响到模型运行和改变模型的结果。

虚拟模块在仿真过程中不起实际作用,主要是为了从图框上进行程序的层次性划分以保持模型的图形界面的整洁性。

4.1.2 Simulink模型的运行顺序

Simulink模型的计算顺序是基于时间采样和信号流向的,即按照时间的顺序执行。 每一个采样点时间,模型中所有模块的状态和输入/输出值都要计算并更新一下,每个模块的输出值都通过信号线连接并传递给下一个模块的输入。系统采样时间由解算器类型和步长共同决定,并且作为Simulink模型仿真的最小粒度。当系统采样时刻到来时,每个模块再根据自身所设定的采样时间方式决定是否在当前这个采样时刻进行计算。

允许用户设定采样时间的模块在其参数对话框中都提供Sample Time这个属性。对于模块的Sample Time,常用的值有:

  • -1:继承输入信号采样时间,若没有输入信号,则继承父层模型采样时间,如果模块无输入并且本身处于顶层模型中,则继承系统解算器的步长。
  • 0:连续采样时间。
  • 非零正数:离散采样时间。
  • Inf:无穷大采样时间,即不采样。
  • [Sampletime,offset]:Sampletime为上述一种,offset为相对于这个采样时刻的时间偏移量。如[0.2,0.01]表示在0.01s、0.21s、0.41s等时刻进行计算。

Display→Blocks→Sorted Executed Order可以显示模块的执行顺序。

标注格式为红色的m:n,m表示模块在模型中执行的优先度,n表示 在同一个采样时刻,模块所处的执行次序号。

4.1.3 各种子系统的特点与功能

1. 虚拟子系统

在执行仿真之前就展开子系统,实际上如同没有建立子系统一样。

2. 非虚拟/原子子系统

非虚拟原子子系统内的模块作为一个单元执行,右击虚拟子系统,在Block Parameter中勾选Treat as atomic unit,即可创建原子子系统。

(1)条件子系统

①使能子系统

 

在驱动子系统使能端口的输入信号大于零时执行使能子系统。

用户可以通过在虚拟子系统内放置Enable模块的方式来创建使能子系统,并通过Enable模块中的States when enabling参数配置子系统内的模块状态。

此外,如果子系统内部存在Out模块,利用Out输出模块的Output when disabled参数可以把使能子系统的输出端口配置成保持最后一个有效采样时刻的输出或复位为初始值。

②触发子系统

触发子系统只有在驱动子系统触发端口的信号上升沿或下降沿到来时才会执行,触发信号沿方向由Trigger端口模块中的Trigger type参数决定。

③触发使能子系统

同时放置Trigger和enable。

(2)动作子系统

Action子系统必须由If模块或Switch Case模块执行,与这些子系统模块连接的所有Action子系统必须具有相同的采样时间。

用户可以通过在子系统内部放置Action Port模块的方式来创建Action子系统。

(3)选择子系统

①可变子系统:内部包括多个子系统,当某条件成立时执行与之相应的子系统。每个子系统匹配一个变量的值,每次仿真时根据这个变量的值决定内部哪一个子系统处于激活状态。

②可配置子系统:用来代表用户自定义库中的任意模块,只能在用户自定义库中使用,动态表示自定义库中的某一模块。

4.2 Simulink子系统示例

4.2.1 虚拟和非虚拟子系统

4.2.2 使能子系统

仅在使能信号使能时执行一次。

simin=[0:10;[0 1 1 0 1 1 1 1 1 1 0]]';

4.2.3 函数调用子系统(条件子系统)

这种子系统只能被函数调用信号所触发。

猜你喜欢

转载自www.cnblogs.com/dingdangsunny/p/12242676.html
今日推荐