天天看点

Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制

本系列教程是根据孙忠潇编著的<<Simulink仿真及代码生成技术入门到精通>>学习笔记。

目录

Simulink仿真入门到精通(一) Simulink界面介绍

Simulink仿真入门到精通(二) Simulink模块

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

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

Simulink仿真入门到精通(五) Simulink模型的仿真

Simulink仿真入门到精通(六) Simulink模型保存为图片

Simulink仿真入门到精通(七) Simulink的回调函数

Simulink仿真入门到精通(八) M语言对Simulink模型的自动化操作及配置

Simulink仿真入门到精通(九) Simulink的流控制

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

Simulink仿真入门到精通(十一) 模块的封装

Simulink仿真入门到精通(十二) Publish发布M文件

Simulink仿真入门到精通(十三) Simulink创建自定义库

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

Simulink仿真入门到精通(十五) Simulink在流程工业中的仿真应用

Simulink仿真入门到精通(十六) Simulink基于模型设计的工业应用概述

Simulink仿真入门到精通(十七) Simulink代码生成技术详解

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

Simulink仿真入门到精通(十九) 总结回顾

9.1 Simulink流控制分类

simulink中流控制时通过自带的模块实现的,包括If else、Switch、For和While4个种类。

9.2 While流控制

while

Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制
Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制

如果条件为真,那么子系统在当前的步长内反复执行,直到达到最大循环次数或者判断条件为假。

Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制
参数标签 功能说明
Maximum number of iteration 最大循环次数
While loop type 循环类型:while/do while
States when starting Held(保持上次状态)/reset(状态恢复默认值)
Show iteration number port 勾选则多出一个输出循环次数的输出端口
Output data type 结合上一个参数使用,为输出循环次数设置数据类型
Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制
Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制

阶跃信号1s阶跃,最大循环次数保持默认值5。

Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制

第一个步长计数器输出结果为4,因为在第一个循环时,模块执行一次(初始化)输出Unit Delya的初始值为0,然后再执行4次。

在计数达到99时,再执行2次不满足小于等于100的条件,退出循环。

do-while

仿真进行时,子系统内模块首先要执行一次,然后再去检查cond输入条件是否为真,如果为真则继续循环,直到cond条件不满足时退出当前步长的仿真,进入下一个步长。

没有IC输入,仅需要cond条件即可反复循环。

9.3 For循环控制

Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制
Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制
Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制
参数标签 功能说明
States when starting 每次循环时保持子系统内的状态或恢复默认
Iteration limit source 循环次数选择从内部限制或外部输入限制
Iteration limit 内部限制时输入的循环次数
Set next i(iteration variable) externally 通过外部输入当前循环的循环变量值
Show iteration variable 选择是否输出循环变量值
Index mode 循环变量的初始值从0/1开始
Iteration variable data type 循环变量输出时的数据类型

示例:循环次数由内部决定,不输出循环变量的值。

Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制
Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制
Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制

示例:循环次数由外部输入,且输出循环变量的值。

Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制
Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制
Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制

虽然Sine Wave模块本身输出的时double信号,但接入For Iterator之后被强制转化为整形数据,并取不超过其值的非负整数值。

示例:外部设定Next_i,即下一个循环例循环变量的初始值。

外部框图同上。

Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制
Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制

9.4 If else控制

Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制

 根据输入u1判断,如果满足条件则从上支输出信号,不满足则从下支输出信号,这2个信号再分别使能一个Action Subsystem,使用Merge模块将所有If Action Subsystem的输出集总,得到一个完整的逻辑输出。If模块的输出/输出端口可由用户设定。

Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制
参数标签 功能说明
Number of inputs 输入端口的数目
If expression If分支的判断条件
Elseif expression

Else分支的判断条件,

如果期望多个elseif,之间用逗号分隔

Show else condition 是否显示Else分支的输出Action信号
Enable zero-crossing detection 使能过零检测与否

If expression的条件表达式收到的限制比较大:

  • 不支持+-*/和^等数学运算符号;
  • 不支持逻辑关系运算符&&和||;
  • 不支持数据类型函数,如int8,uint16。

If expression也好,Elseif experssion也好,后面都要跟着一个If Action Subsystem。

Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制
Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制

模型中Merge模块的作用是将多个Action子系统的输出合并到一个信号中,这些被合并的子系统需要具备一个条件:在某一个时刻,最多有一个子系统被使能计算,其他子系统是不计算的。

Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制

9.5 Switch Case控制

Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制

输入u1如匹配case分支值得要求,则可以触发次分支后所连接的Switch Case Action Subsystem。

Simulink仿真入门到精通(九) Simulink的流控制9.1 Simulink流控制分类9.2 While流控制9.3 For循环控制9.4 If else控制9.5 Switch Case控制
参数标签 功能说明
Case conditions 通过元胞数组形式输入分支判断的值
Show default case 勾选后会出现default分支
Enable zero-crossing detection 勾选后使能过零检测算法

参数Case condition要求必须使用元胞数组形式输入,每个分支的case值以单独的元胞数组形式输入,并且数据类型必须是int32或者枚举型。

每条case分支可以对应一个或多个数值,混合使用时,此参数最外层使用{ },内部使用[ ]将参数分组,如{3, [5 8]}表示当输入为3时触发case[3]所对应的子系统,当输入为5或8时触发case[5 8]所对应的子系统。

Switch Case模块所能判断的分支是离散的数据点,与if else区间连续的判断不同。并且要求输入数据、参数Case conditions等数据类型保持一致,长度保持在有符号32为整数范围之内,不支持小数的输入判断。

继续阅读