选择子系统执行
当由控制模块启用时,逻辑执行子系统模块会在当前时间步运行一次或多次。控制模块实现与编程语言语句(例如,if-then、switch、while、for)表达的控制逻辑类似的控制逻辑。
选择器子系统是一种逻辑执行的子系统,它响应位于子系统外部的控制模块的动作信号,在一个时间步骤内执行一次。Simulink® 支持两种选择器子系统结构,if-else 和 switch-case。
具有 If-Else 结构的模型
If Action Subsystem 模块是预先配置的 Subsystem 模块,作为创建子系统的起点,该子系统的执行由 If 模块启用。
外部 If 模块控制执行。If 模块评估逻辑表达式,然后根据评估结果向 If Action Subsystem 模块输出动作信号。
合并来自 If Action Subsystem 模块的信号
示例模型 ex_if_block
展示了如何合并由 If 模块控制的信号。
If 模块从一组子系统中选择一个 If Action Subsystem 模块的执行。无论 If 模块选择哪个子系统,您都可以使用 Merge模块创建一个输出信号。
If Action Subsystem 模块中的所有模块必须以与驱动 If 模块相同的速率执行。为满足此要求,请将每个模块的采样时间参数设置为继承 (-1) 或与 If 模块采样时间相同的值。
If 模块的输入为表示为输出端口的逻辑表达式提供操作值。每个输出端口都连接到一个 If Action Subsystem 模块。If 模块中的表达式从 if
表达式开始自上而下进行评估。当表达式计算结果为真时,将执行其对应的 If Action Subsystem,并且不会计算其余表达式。
模型中的 if-else 结构可以用这段伪代码来表示。
IF u1 > 0 THEN Subsystem 1 ELSEIF u2 > 0 Subsystem 2 ELSE Subsystem 3 END IF
使用 If-Else 结构创建模型
要创建示例模型,请使用此过程。
在 Simulink 编辑器中放置一个 If 模块。双击该模块以打开模块参数对话框。
在输入数量框中,输入
2
。该模块中添加了两个输入端口。输入端口用于包含操作值的信号,不一定是操作数的数量。输入信号可以是向量。例如,您可以在表达式中将向量 u 的第五个元素指定为
u(5) > 0
。在 If 表达式文本框中,输入
u1 > 0
。向带有标签
if(u1 > 0)
的模块添加一个输出端口。此端口是 If 模块唯一所需的输出。在 Elseif 表达式文本框中,输入
u2 > 0
。您可以输入多个 elseif 表达式,并用逗号分隔表达式。每个表达式都会向 If 模块添加一个输出端口,并带有
elseif(expression)
形式的标签。选中显示其他条件复选框。
向带有标签
else
的模块添加一个输出端口。添加三个 If Action Subsystem 模块。
这些模块是带有 Action Port 模块的 Subsystem 模块。当您将 Action Port 模块放置在子系统内部时,名为 Action 的输入端口将添加到该模块。
将 If 模块的每个输出端口连接到 If Action Subsystem 模块的动作端口。
当您建立连接时,If Action Subsystem 模块的图标将重命名为附加到它的表达式类型。
在每个 If Action Subsystem 模块中,输入要根据其处理的条件执行的 Simulink 模块。
将 If Action Subsystem 模块的输出连接到 Merge 模块。
运行仿真。
If 模块和 If Action Subsystem 模块之间的动作信号线从实线变为虚线。
注意
由 If 模块驱动的 If Action Subsystem 模块中的所有模块必须以与驱动模块相同的速率运行。
带开关盒结构的型号
Switch Case Action Subsystem 模块是预先配置的 Subsystem 模块,作为创建子系统的起点,该子系统的执行由 Switch Case 模块启用。
外部 Switch Case 模块控制执行。Switch Case 模块评估案例索引,然后根据所选案例向 Switch Case Action Subsystem 模块输出动作信号。
合并来自 Switch Case 执行子系统模块的信号
示例模型 ex_switch_case_block
显示如何基于多个子系统输出信号创建一个信号。
Switch Case 模块从一组子系统中选择一个 Switch Case Action Subsystem 模块的执行。无论 Switch Case 模块选择哪个子系统,您都可以使用 Merge模块创建一个结果信号。
Switch Case 模块的输入提供了选择以输出端口表示的案例的索引值。每个输出端口都连接到一个 Switch Case Action Subsystem 模块。当选择一个案例时,将执行其对应的 Switch Case Action Subsystem 模块。
模型中的 switch 结构可以用此伪代码表示。
CASE u1 u1 = 1: subsystem_1 break u1 = 2 or 3: subsystem_2_3 break u1 = OTHER VALUES: subsystem_default break END CASE
使用 Switch Case 结构创建模型
要创建示例模型,请使用此过程。
在 Simulink 编辑器中放置一个 Switch Case 模块。双击该模块以打开模块参数对话框。
在案例条件框中,输入
{1, [2,3]}
。定义了两种情况。第一种情况是输入值
1
时,第二种情况是输入值2
或3
时。案例可以是单值的或多值的,并作为 Switch Case 模块上的输出端口出现。非整数输入值将被截断为整数。选中显示默认情况复选框。
标记为
default:
的输出端口被添加到该模块。如果没有选择其他情况,此端口将发送动作信号。添加三个 Switch Case Action Subsystem 模块。
这些模块是带有 Action Port 模块的 Subsystem 模块。当您将 Action Port 模块放置在子系统内部时,名为 Action 的输入端口将添加到该模块。
将 Switch Case 模块的每个输出端口连接到 Switch Case Action Subsystem 模块的动作端口。
当您建立连接时,Switch Case Action Subsystem 模块的图标将重命名为附加到它的表达式类型。
在每个 Switch Case Action Subsystem 模块中,输入要针对其处理的案例执行的 Simulink 模块。
运行仿真。
Switch Case 模块和 Switch Case Action Subsystem 模块之间的动作信号线从实线变为虚线。
注意
在特定案例的子系统执行完毕后,隐含的中断将终止 Switch Case 模块的执行。Simulink Switch Case 模块不会表现出 C switch
语句的 fall-through 行为。
另请参阅
Action Port | If | If Action Subsystem | Subsystem | Switch Case | Switch Case Action Subsystem