通过使用隐式事件控制图行为
隐式事件是图执行期间在下列情况下发生的内置事件:
图会唤醒。
图进入某个状态,并且该状态被激活。
图退出某个状态,并且该状态变为非激活。
图对内部数据对象赋值。
这些事件是隐式的,因为您没有显式定义或触发它们。隐式事件是发生该事件的图的子级,并且仅在父图中可见。
基于图执行的隐式事件
关键字 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
。
有关时序逻辑运算符 after
的信息,请参阅使用时序逻辑控制图的执行。
注意
tick
事件引用包含正在计算的动作的图。该事件不能引用其他图。
基于数据和状态的隐式事件
在 Stateflow® 模型中的 Simulink® 图中,当图设置变量值或当图进入或退出某个状态时,这些运算符会生成隐式事件。
运算符 | 语法 | 描述 | 示例 |
---|---|---|---|
change |
| 当图设置变量 data_name 的值时,会生成隐式局部事件。 | 定义一个在状态或转移动作向变量 change(Engine.rpm) |
enter |
| 当指定的状态 state_name 被激活时,生成隐式局部事件。 | 当图执行进入状态 enter(Fan.On) |
exit |
| 当指定的状态 state_name 变为非激活时,生成隐式局部事件。 | 在图执行退出状态 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
被激活。
注意
如果同一隐式事件触发了并行状态中的多个转移,则这些转移的执行顺序不一定与并行状态的执行顺序匹配。为了避免意外行为并确保转移按照为并行状态指定的顺序执行,请不要使用隐式事件。在这种情况下,请使用调用运算符的转移条件,如 in
或 hasChanged
。有关详细信息,请参阅Check State Activity by Using the in Operator和检测数据和表达式值的更改。
另请参阅
after
| change
| enter
| exit
| hasChanged
| in