什么是隐式事件?
隐式事件是图表执行时发生的内置事件:
图表唤醒
进入一个状态
退出状态
分配给内部数据对象的值
这些事件是隐式的,因为您没有显式地定义或触发它们。隐式事件是它们发生的图表的子级,仅在父图表中可见。
隐式事件的关键字
要引用隐式事件,操作语句使用以下语法:
event(object)
其中event是隐式事件的名称,object是事件发生的状态或数据。
下面的每个关键字都会在动作语言表示法中为状态和转换生成隐式事件。
隐式事件 | 含义 |
---|---|
change(data_name) or chg(data_name) | 当Stateflow®软件将值写入变量data_name时,指定并隐式生成本地事件。 变量data_name不能是机器父级数据。此隐式事件仅适用于层次结构中图表级别或更低级别的数据。对于机器父级数据,请使用更改检测运算符来确定数据值何时更改。 |
enter(state_name) or en(state_name) | 当进入指定的state_name时,指定并隐式生成本地事件 |
exit(state_name) or ex(state_name) | 指定并在退出指定的state_name时隐式生成本地事件。 |
tick | 指定并在正在评估的操作的图表唤醒时隐式生成本地事件。 |
wakeup | 与tick关键字相同。 |
如果多个对象具有相同的名称,请使用点运算符将对象的名称与其父对象的名称进行限定。以下示例是对隐式事件的有效引用:
enter(switch_on)
en(switch_on)
change(engine.rpm)
使用隐式事件在状态之间转换
此示例说明了隐式tick事件的使用。
Fan和Heater是平行(and)超级状态。事件第一次唤醒Stateflow图表时,状态为Fan。关闭和加热器。关闭变为活动状态。
假设您正在运行一个离散时间模拟。每当图表唤醒时,都会出现一个滴答事件广播。四次广播后,从Fan.off转换到Fan。同样,在三次广播之后,从Heater.Off 转换到 Heater.On 。
隐式事件转换的执行顺序
假设:
您的图表包含平行状态。
在多个并行状态中,相同的隐式事件用于保护从一个子状态到另一个子状态的转换。
当多个转换在同一时间步长中有效时,转换将根据它们在图表中创建的顺序执行。该顺序不一定与包含转换的并行状态的激活顺序匹配。例如,请考虑以下图表:
当发生从IV.HERE到IV.THERE的转换时,条件ex(IV.HERE)对平行状态I、II和III从A到B的转换有效。从A到B的三个转换按创建顺序执行:在状态I中,然后是II,最后是III。此顺序与这些状态的激活顺序不匹配。
要确保有效转换的执行顺序与并行状态变为活动状态的顺序相同,请使用in运算符而不是隐式的进入或退出事件:
通过这种修改,从A到B的转变以与平行状态的激活相同的顺序发生。