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

摘要:
系统采样时间由求解器类型和步长共同确定,是Simulink模型仿真的最小粒度。
4.1 Simulink子系统详解

4.1.1 子系统概述

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

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

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

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

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等时刻进行计算。

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

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

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

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

1. 虚拟子系统

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

2. 非虚拟/原子子系统

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

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

(1)条件子系统

①使能子系统

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

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

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

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

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

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

②触发子系统

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

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

③触发使能子系统

同时放置Trigger和enable。

(2)动作子系统

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

Simulink仿真入门到精通(四) Simulink子系统第9张Simulink仿真入门到精通(四) Simulink子系统第10张

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

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

(3)选择子系统

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

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

4.2 Simulink子系统示例

4.2.1 虚拟和非虚拟子系统

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

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

右击子系统,选择Block parameters,勾选Treat as atomic unit,子系统即成为原子子系统,子系统图标黑色外框加宽,此时子系统可以整体设置采样时间。

4.2.2 使能子系统

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

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

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

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

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

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

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

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

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

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

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

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

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

函数调用子系统的执行不是由Simulink引擎直接控制的,而是由调用它的S函数通过mdlOutputs/mdlUpdates子方法来决定的。

S函数构成的模块具有两个函数调用类型的输出,根据输入信号的奇偶值分别调用两个函数调用子系统,两个函数调用子系统的执行时间不重合,被Merge模块合并到一个输出,输出为当前仿真时刻处于激活状态的子系统输出。

函数调用子系统1的内部为常数输出,函数调用子系统2的内部为正弦波输出。

4.2.4 While子系统(动作子系统)

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

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

(1)do-while

在这个模式下,While Iterator只有一个输入,即while条件输入,它必须在while子系统内。

在每个采样时间内,While Iterator模块会执行一次子系统内的所有模块,然后检查while条件输入是否为真,如果输入为真,则While Iterator模块再执行一次子系统内的所有模块,只要while条件输入为真,而且循环次数小于或等于While Iterator模块对话框中的Maximum number of iterations参数值时,这个循环过程会一直执行。

(2)while

在这个循环模式下,while Iterator模块有2个输入:while条件输入和初始条件输入(IC),初始条件信号必须在while子系统外提供。

在仿真开始时,如果IC输入为真,While Iterator模块会执行一次子系统内的所有模块,然后检查while条件输入是否为真,如果输入为真,则While Iterator模块再执行一次子系统内的所有模块,只要while条件输入为真,而且循环次数小于或等于While Iterator模块对话框中的Maximum number of iterations参数值时,这个循环过程会一直执行。如果在仿真时间开始时IC输入为假,那么在该采样时间内While Iterator模块不执行子系统中的内容。

注意:当把While Iterator模块放置到子系统中时,在给定条件为真的情况下,While子系统中所有模块会在当前采样时间反复执行子系统中的内容,即把多个迭代在一个采样步长内进行处理。如果子系统不是原子子系统,那么把While Iterator模块放置到子系统中会使该子系统自动成为原子子系统。

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

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

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

上面模型的效果等价于以下代码:

max_sum=100;
max_iterations=1000;
sum=0;
iteration_number=0;
cond=(max_sum>0);
while(cond~=0)
    iteration_number=iteration_number+1;
    sum=sum+iteration_number;
    if(sum>max_sum || iteration_number>max_iterations)
        cond=0;
    end
end

也等于以下简化的代码:

for i=1:1000
    sum_i=sum(1:i);
    if(sum_i>100)
        break;
    end
end

4.2.5 可变子系统(选择子系统)

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

可变子系统内装了多个child子系统,其输入/输出端口不需要连线,每个child子系统都有一个对应的变量或表达式,某个child子系统的变量或表达式值为真时此子系统就被激活。Simulink的采样时刻到来时最多只有一个child子系统被激活,可以通过变量方便地控制其中某一个child子系统的执行。

右击子系统,选择Block parameters(subsystem)。

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

左侧排列5个按钮,第一个用来在可变子系统内建立child子系统,第二个用来在可变子系统内建立模型选择框,第三个用来编辑激活child子系统的条件,第四个用来打开选中的child子系统,第五个用来更新信息列表。

右侧是一个列表框,第二列Variant control表示Condition的Simulink.Variant对象,其内部包含一个判断条件condition,即是第三列参数,由用户指定一个逻辑表达式,当条件满足时,此条件所对应的child子系统会被激活。

在工作区输入sel=2;则第二个child子系统被激活。第一个子系统设置增益2,第二个子系统设置增益3,仿真结果如下。

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

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

4.2.6 可配置子系统(选择子系统)

可配置子系统只能在用户自定义的模块库中使用,可配置子系统的优点在于设计者可以任意切换子系统的内部模块,快速比较出那种组合会满足系统设计需求。

免责声明:文章转载自《Simulink仿真入门到精通(四) Simulink子系统》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Cesium原理篇:3D Tiles(3)个人总结CAN信号值解析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Simulink仿真入门到精通(十) S函数

10.1 S函数概述 S函数也称为Simulink中的系统函数,是用来描述模块的Simulink宏函数,支持M、C等多种语言。当Simulink默认的模块不能满足用户的需求时,用户可以通过S函数自己打造一个模块,实现自定义的算法或期待的动作。 10.2 S函数的类型 S函数有多种类型,按照语言分类有M、C、C++、Fortran等编写的; 按照所支持功能...

Simulink仿真入门到精通(十四) Simulink自定义环境

14.1 Simulink环境自定义功能 sl_sustomization.m函数是Simulink提供给用户使用MATLAB语言自定义Simulink标准人机界面的函数机制。若sl_sustomization.m函数存在于MATLAB的搜索路径中,在当Simulink启动时就会读取此文件的内容进行Simulink的人机界面的初始化。Simulink本身就...

OFDM通信系统的MATLAB仿真(2)

关于OFDM系统的MATLAB仿真实现的第二篇随笔,在第一篇中,我们讨论的是信号经过AWGN信道的情况,只用添加固定噪声功率的高斯白噪声就好了。但在实际无线信道中,信道干扰常常是加性噪声、多径衰落的结合。今天我们准备再进一步,让信号经过多径瑞利衰落信道。在这种信道条件下,信号具体是怎么怎么变化的呢?下面将讲解系统仿真的各个部分以及实现多径衰落的方法。 注意...

Simulink仿真入门到精通(三) Simulink信号

3.1 Simulink信号概述 所谓信号,表示一种随着时间而变化的量,在时间轴上的采样时刻都对应有数值。 信号在Simulink中是相当重要的组成部分,有线(line)表示,在模型中穿针引线地将各模块联系起来,既能传递数据又可以明确表达模块的输入输出依赖关系,技能给自己命名以示自身的物理意义,又能绑定Simulink.Signal数据对象来表达生成代码中...

Simulink仿真入门到精通(十八) TLC语言

TLC(Target Language Compiler)是一种为转换为目标语言而存在的额解释性语言,其目的就是将模型中编译出来的rtw文件转换为目标代码(C/C++等)。与M语言类似,既可以写成脚本文件,也能够作为函数存在,都是解释性语言,更相似的是它们都提供具有强大功能的内建函数库。 18.1 TLC的作用 支持模型针对通用或特定目标硬件的代码生成功...

Simulink仿真入门到精通(十九) 总结回顾&自我练习

从2019年12月27到2020年2月12日,学习了Simulink仿真及代码生成技术入门到精通,历时17天。 学习的比较粗糙,有一些地方还没理解透彻,全书梳理总结: Simulink的基础模块已基本掌握,对不熟悉的模块可以借助帮助文档了解其功能; Simulink信号基本掌握,了解了各种信号的外观及意义的不同; 对Simulink子系统的认识有待深入,...