Main Content

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

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

  • 图会唤醒。

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

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

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

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

基于图执行的隐式事件

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

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

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

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

Stateflow chart that uses the implicit event exit.

注意

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

另请参阅

| | | | |

相关主题