使用时序逻辑执行控制需求
您可以使用时序逻辑来控制Simulink® 模型中Requirements Table 模块中需求的评估和执行。由于持续时间列和时序运算符依赖于不同时间步的仿真时间或数据值,因此您可以使用它们来执行时间逻辑。
使用持续时间列
持续时间列指定在模块检查后后条件或执行操作之前需求先决条件必须有效的时间。如果未满足持续时间,则该模块不会检查需求后条件或执行需求操作。您必须指定先决条件才能使用持续时间列。
您可以通过右键点击该列并选择 切换列 > 切换持续时间列 来查看或隐藏持续时间列。您还可以通过点击 显示列 > 持续时间 来查看或隐藏列 部分中表 选项卡中的列。该列仅出现在需求选项卡中。
要使用持续时间列,请定义一个需求并输入先决条件必须为真的时间量才能满足先决条件。您必须以秒为单位指定持续时间,并且持续时间必须计算为正标量。
使用持续时间列的示例
该示例使用 Requirements Table 模块来检查输入信号是否满足时序相关需求。该模块使用持续时间列来指定在执行输出之前需求必须有效的时间长度。
打开 Requirements Table 模块。该模块使用三个需求来检查输入数据u
并指定输出数据y
:
如果
u
大于或等于0
超过 2 秒,则模块将y
设置为1
。如果
u
小于0
超过 2 秒,则模块将y
设置为-1
。如果两个需求都不满足,则模块将
y
设置为0
。
运行仿真以查看 Scope 模块中的输出。
有关更多示例,请参阅 定义具有持续时间的正式需求。
使用时序逻辑运算符
您还可以使用运算符向 Requirements Table模块添加时序逻辑。这些运算符可以出现在需求或 操作选项卡中的预条件、后条件或操作中。
运算符 | 语法 | 描述 |
---|---|---|
duration | duration(C) | 返回条件表达式 C 变为 true 以来经过的时间长度(以秒为单位)。 |
isStartup |
| 如果仿真时间等于0 则返回true ,其他仿真时间则返回false 。 |
getPrevious |
| 返回前一时间步的数据值。 |
t | t | 以秒为单位返回仿真时间。 |
使用时序逻辑运算符时的注意事项
如果在 Enabled Subsystem (Simulink)模块中使用包含 isStartup
的 Requirements Table模块,则 isStartup
运算符会在重新启用 Enabled Subsystem模块的时间步中返回 true
。但是,t
运算符捕获了顶层模型中使用的时间值,因此在相同情况下不会重置。
使用时序逻辑运算符的示例
此示例显示了使用时序逻辑运算符检查输入信号的 Requirements Table 模块。Requirements Table 模块检查输入信号的值和仿真时间,以对两个输出执行不同的值。
打开 Requirements Table 模块。该模块使用四个顶级需求和第三个需求的两个子需求来检查输入数据 u
的值:
如果仿真刚刚开始,该模块将输出数据
y1
设置为0
。否则,该模块将y1
设置为上一时间步的u
的值。如果
u
大于或等于0
,则模块检查条件是否持续超过 1 秒。如果条件满足超过 1 秒,模块会将y2
设置为1
。否则,该模块将y2
设置为0
。如果
u
小于0
,则该模块将y2
设置为仿真时间除以10
。
运行仿真以查看 Scope 模块中的输出。