使用触发子系统
触发子系统是一种条件执行原子子系统,它在每次控制信号(触发信号)出现以下情况时运行:
从负值上升到正值或零,或者从零值上升到正值。
从正值下降到负值或零,或者从零值下降到负值。
上升或下降到零值或者过零。
与 Enabled Subsystem 模块不同,Triggered Subsystem 模块始终在触发之间保留其上一个输出值。此外,触发子系统不能在执行时重置模块状态;任何离散模块的状态将会在触发之间保留。
创建触发子系统
创建触发子系统:
为您的模型添加一个 Triggered Subsystem 模块。
将 Simulink® Ports & Subsystems 库中的模块复制到您的模型中。
点击模型图,键入
trigger
,然后选择 Triggered Subsystem。
设置 Outport 模块的初始值和禁用值。请参阅条件子系统初始输出值和Conditional Subsystem Output Values When Disabled。
设置控制信号如何触发执行。
打开子系统模块,然后打开 Trigger 端口模块的参数对话框。从触发器类型下拉列表中,选择:
上升沿 - 当控制信号从负值或零值上升至正值或从负值上升到零值时,触发子系统的执行。
下降沿 - 当控制信号从正值或零值下降至负值或从正值下降至零值时,触发子系统的执行。
任一沿 - 通过上升或下降控制信号触发子系统的执行。
Trigger 和 Subsystem 模块上将出现不同的符号,以指示上升和下降触发器。
从 Trigger 端口模块输出启用控制信号。打开 Trigger 端口模块。选中显示输出端口复选框,以便将控制信号传递给触发子系统。
您可以将此信号用于依赖控制信号值的算法。
从输出数据类型下拉列表中,选择
auto
、int8
或double
。auto
选项会使得输出信号的数据类型采用连接到信号的模块端口的数据类型(int8
或double
)。
离散时间系统的触发
对于离散时间系统,当控制信号在信号值的两次上升或两次下降之间相差一个以上的时间步时,会发生触发。
当控制信号从负值上升到零、随后信号值从零上升到正值时,信号值出现两次上升。
当控制信号从正值下降到零、随后信号值从零下降到负值时,信号值出现两次下降。
对于上升信号值,请考虑以下事项:
在 t = 1 秒处,信号值从 -1 上升到 0,在 t = 2 秒处,信号值从 0 上升到 1。子系统仅在 t = 1 处触发,在 t = 2 处不触发,因为两个上升信号值相隔不超过一个时间步。
在 t = 4 处时,信号值从 0 上升到 1 并且子系统触发,因为 t = 4 处的上升信号值和 t = 2 处的上一个上升信号值相隔超过两个时间步。
同样,对于下降信号值,如下图所示:
在 t = 1 处,信号值从 1 下降到 0,在 t = 2 处,信号值从 0 下降到 -1。子系统仅在 t = 1 处触发,在 t = 2 处不触发,因为两个下降信号值相隔不超过一个时间步。
在 t = 4 处时,信号值从 0 下降到 -1 并且子系统触发,因为 t = 4 处的下降信号值和 t = 2 处的上一个下降信号值相隔超过两个时间步。
触发模型与触发子系统
您可以在 Model 模块(引用模型)中放置一个 Trigger 端口模块以简化模型设计,而不是使用以下模块之一:
Model 模块中的 Triggered Subsystem 模块。
Triggered Subsystem 模块中的 Model 模块。
有关在引用模型中使用 Trigger 端口模块的信息,请参阅Conditionally Execute Referenced Models。
要转换子系统以使用模型引用,请参阅将子系统转换为引用模型。
触发子系统中的模块
触发子系统中的所有模块的采样时间都必须设置为继承 (-1
) 或固定 (inf
)。此要求允许触发子系统中的模块仅在触发子系统本身运行时才运行。此要求还意味着触发子系统不能包含连续模块,如 Integrator 模块。
模型示例
有关模型示例,请参阅:
另请参阅
Enabled Subsystem | Triggered Subsystem | Enabled and Triggered Subsystem | Function-Call Subsystem