Simulink入门学习笔记,欢迎批评指正! 资源:Simulink仿真及代码生成技术入门到精通(孙忠潇 编著)

9.1 Simulink流控制分类

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

9.2 While流控制

while

sigmoid函数能否模拟阶跃 simulink 阶跃_数据类型

sigmoid函数能否模拟阶跃 simulink 阶跃_数组_02

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

sigmoid函数能否模拟阶跃 simulink 阶跃_Simulink_03

参数标签

功能说明

Maximum number of iteration

最大循环次数

While loop type

循环类型:while/do while

States when starting

Held(保持上次状态)/reset(状态恢复默认值)

Show iteration number port

勾选则多出一个输出循环次数的输出端口

Output data type

结合上一个参数使用,为输出循环次数设置数据类型

sigmoid函数能否模拟阶跃 simulink 阶跃_Simulink_04

sigmoid函数能否模拟阶跃 simulink 阶跃_数据类型_05

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

sigmoid函数能否模拟阶跃 simulink 阶跃_数组_06

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

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

do-while

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

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

9.3 For循环控制

sigmoid函数能否模拟阶跃 simulink 阶跃_数据类型_07

sigmoid函数能否模拟阶跃 simulink 阶跃_sigmoid函数能否模拟阶跃_08

sigmoid函数能否模拟阶跃 simulink 阶跃_数据类型_09

参数标签

功能说明

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

循环变量输出时的数据类型

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

sigmoid函数能否模拟阶跃 simulink 阶跃_Simulink_10

sigmoid函数能否模拟阶跃 simulink 阶跃_Simulink_11

sigmoid函数能否模拟阶跃 simulink 阶跃_sigmoid函数能否模拟阶跃_12

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

sigmoid函数能否模拟阶跃 simulink 阶跃_Simulink_13

sigmoid函数能否模拟阶跃 simulink 阶跃_sigmoid函数能否模拟阶跃_14

sigmoid函数能否模拟阶跃 simulink 阶跃_Simulink_15

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

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

外部框图同上。

sigmoid函数能否模拟阶跃 simulink 阶跃_Simulink_16

sigmoid函数能否模拟阶跃 simulink 阶跃_Simulink_17

9.4 If else控制

sigmoid函数能否模拟阶跃 simulink 阶跃_Simulink_18

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

sigmoid函数能否模拟阶跃 simulink 阶跃_数据类型_19

参数标签

功能说明

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。

sigmoid函数能否模拟阶跃 simulink 阶跃_Simulink_20

sigmoid函数能否模拟阶跃 simulink 阶跃_Simulink_21

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

sigmoid函数能否模拟阶跃 simulink 阶跃_sigmoid函数能否模拟阶跃_22

9.5 Switch Case控制

sigmoid函数能否模拟阶跃 simulink 阶跃_sigmoid函数能否模拟阶跃_23

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

sigmoid函数能否模拟阶跃 simulink 阶跃_sigmoid函数能否模拟阶跃_24

参数标签

功能说明

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为整数范围之内,不支持小数的输入判断。