主要内容

通过使用隐式事件控制图行为

R2026b

隐式事件是图执行期间在下列情况下发生的内置事件:

  • 图会唤醒。

  • 图进入某个状态,并且该状态被激活。

  • 图退出某个状态,并且该状态变为非激活。

  • 图对内部数据对象赋值。

这些事件是隐式的,因为您没有显式定义或触发它们。隐式事件是发生该事件的图的子级,并且仅在父图中可见。

基于图执行的隐式事件

关键字 tick 指定当图在离散时间仿真中唤醒时生成的隐式事件。

例如,在此图中,Fan 和 Heater 是并行 (AND) 状态。每个状态都有一对子状态,On 和 Off。最初,子状态 Fan.Off 和 Heater.Off 被激活。每次图被唤醒时,它都会生成一个 tick 事件。第三个 tick 触发从 Heater.Off 到 Heater.On 的转移。同样,第四个 tick 触发从 Fan.Off 到 Fan.On 的转移。在第八个 tick 处,图转移回 Fan.Off 和 Heater.Off。

Stateflow chart that uses the implicit event tick.

有关时序逻辑运算符 after 的信息,请参阅使用时序逻辑控制图的执行。

注意

tick 事件引用包含正在计算的动作的图。该事件不能引用其他图。

基于数据和状态的隐式事件

在 Stateflow® 模型中的 Simulink® 图中,当图设置变量值或当图进入或退出某个状态时,这些运算符会生成隐式事件。

运算符语法描述示例
change

change(data_name)

chg(data_name)

当图设置变量 data_name 的值时,会生成隐式局部事件。

定义一个在状态或转移动作向变量 Engine.rpm 写入值时生成的隐式局部事件。

change(Engine.rpm)

enter

enter(state_name)

en(state_name)

当指定的状态 state_name 被激活时,生成隐式局部事件。

当图执行进入状态 Fan.On 时,定义一个隐式局部事件。

enter(Fan.On)

exit

exit(state_name)

ex(state_name)

当指定的状态 state_name 变为非激活时,生成隐式局部事件。

在图执行退出状态 Fan.Off 时定义隐式局部事件。

exit(Fan.Off)

如果多个状态或数据对象具有相同的名称,请使用圆点表示法来限定状态的名称。有关详细信息,请参阅使用圆点表示法标识数据。

例如,在此图中,Fan 和 Heater 是并行 (AND) 状态。每个状态都有一对子状态,On 和 Off。最初,子状态 Fan.Off 和 Heater.Off 被激活。当图被唤醒时,它生成一个 tick 事件,该事件触发从 Fan.Off 到 Fan.On 的转移。当 Fan.Off 变为非激活时,图会生成另一个隐式事件,该事件触发从 Heater.Off 到 Heater.On 的转移。当图执行结束时,子状态 Fan.On 和 Heater.On 被激活。

Stateflow chart that uses the implicit event exit.

注意

如果同一隐式事件触发了并行状态中的多个转移,则这些转移的执行顺序不一定与并行状态的执行顺序匹配。为了避免意外行为并确保转移按照为并行状态指定的顺序执行,请不要使用隐式事件。在这种情况下,请使用调用运算符的转移条件,如 in 或 hasChanged。有关详细信息,请参阅Check State Activity by Using the in Operator和检测数据和表达式值的更改。

另请参阅

| | | | |

主题