Main Content

after

在事件广播或指定时间后执行图

描述

示例

如果自关联状态激活以来 E 事件至少已发生 n 次,则 after(n,E) 返回 true。否则,运算符返回 false

示例

如果图自关联状态激活以来至少唤醒了 n 次,则 after(n,tick) 返回 true。否则,运算符返回 false

当 Simulink® 模型中的 Stateflow® 图有输入事件时,不支持隐式事件 tick

示例

如果自关联状态激活以来至少已经过 n 个时间单位,则 after(n,time_unit) 返回 true。否则,运算符返回 false

在 Simulink 模型的图中,将 time_unit 指定为秒 (sec)、毫秒 (msec) 或微秒 (usec)。如果将 n 指定为表达式,图会在仿真期间随着表达式值的变化而调整时滞。

在 MATLAB® 中的独立图中,将 n 指定为大于或等于 0.001 的值且将 time_unit 指定为秒 (sec)。运算符创建一个 MATLAB timer 对象,该对象生成隐式事件来唤醒图。MATLAB timer 对象的精度限制在 1 毫秒。有关详细信息,请参阅Events in Standalone Charts

  • 当图完成执行关联状态及其子状态的 entry 动作时,将创建 timer 对象。如果将 n 指定为在图执行期间其值发生变化的表达式,则图不会调整 timer 对象的时滞。

  • 当关联状态激活时,timer 对象会在该状态图步结束时开始运行。此状态图步可以包括图中其他并行状态的执行。

  • 如果图在从 timer 对象接收到隐式事件时正在处理另一项操作,则图会将事件排队。当前状态图步完成后,图会处理该事件。

  • 如果与时序逻辑运算符相关联的状态在图处理隐式事件之前变为非激活状态,则该事件不会唤醒图。

示例

全部展开

当图处理事件 E 的广播时,从状态激活后 E 的第三次广播开始显示状态消息。

on after(3,E): disp("ON");

Stateflow chart that uses the after operator in a state.

当图处理事件 E 的广播时,从关联状态激活后 E 的第五次广播开始,发生转出关联状态的转移。

after(5,E)

Stateflow chart that uses the after operator in a transition.

如果关联状态在至少五次事件 E 的广播期间持续为激活状态,则发生转出该关联状态的转移。

在 Simulink 模型的图中,输入:

[after(5,E)]

Stateflow chart that uses the after operator in a transition.

MATLAB 中的独立图不支持时序逻辑运算符的条件表示法。

当图自关联状态激活以来至少唤醒了七次,且变量 temp 大于 98.6 时,发生转出关联状态的转移。

after(7,tick)[temp > 98.6]

Stateflow chart that uses the after operator in a transition.

从关联状态激活后的 12.3 秒开始,每次图被唤醒时,都将 temp 变量设置为 LOW

on after(12.3,sec): temp = LOW;

Stateflow chart that uses the after operator in a state.

提示

  • 您可以使用引号将关键字 'tick''sec''msec''usec' 括起来。例如,after(5,'tick') 等效于 after(5,tick)

  • 每当关联状态重新激活时,Stateflow 图都会重置 after 运算符使用的计数器。

  • 绝对时间时序逻辑运算符的计时取决于 Stateflow 图的类型:

    • Simulink 模型中的图根据仿真时间定义绝对时间时序逻辑。

    • MATLAB 中的独立图根据挂钟时间定义绝对时间时序逻辑,其精度限制在 1 毫秒。

    计时上的差异会影响图的行为。例如,假设此图正在执行状态 Aduring 动作。

    Stateflow chart with two states. The during action in state A calls a function f. The transition to state B uses the expression after(2,sec). The entry action in state B displays the elapsed time.

    • 在 Simulink 模型中,对 f 的函数调用在单个时间步中执行,不会增加仿真时间。图第一次唤醒且状态 A 已激活至少 2 秒时,会发生从状态 A 到状态 B 的转移。状态 B 中的 entry 动作显示的值仅取决于 Simulink 求解器使用的步长。

    • 在独立图中,对 f 的函数调用可能需要几秒的挂钟时间才能完成。如果调用持续两秒以上,图会将与 after 运算符相关联的隐式事件排队。当函数 f 完成执行时,会发生从状态 A 到状态 B 的转移。状态 Bentry 动作显示的值取决于完成对 f 的函数调用所需的时间。

版本历史记录

在 R2014b 中推出