该图表使用时间逻辑来确定输入u何时等于1。
If the input equals 1… | A transition occurs from… |
---|---|
Before t = 2 | Start to Fast |
Between t = 2 and t = 5 | Start to Good |
After t = 5 | Start to Slow |
该图表具有层次结构中最高级别的两种状态,Power_off和Power_on。默认情况下,Power_off处于活动状态。事件开关在Power_off和Power_on状态之间切换系统。Power_on有三个子状态:第一、第二和第三。默认情况下,当Power_on变为活动时,First也变为活动。当Shift等于1时,每次发生事件Switch时,系统都会从“第一个”转换为“第二个”、“第二到第三个”和“第三到第一个”,然后重复该模式。
源自同一状态并终止于同一状态的转换是自循环转换。下表包含四个自循环转换:
内部转换是指不退出源状态的转换。当为具有异或分解的超状态定义时,内部跃迁是强大的。使用内部转换可以极大地简化Stateflow?图表,如以下示例所示:
Before Using an Inner Transition
After Using an Inner Transition to a Connective Junction
Using an Inner Transition to a History Junction
此图表是如何使用内部转换简化逻辑的示例。
任何事件都会发生并唤醒状态流程图。到连接点的默认转换是有效的。转换的目的地由[c1>0]和[c2>0]确定。如果[c1>0]为真,则向A1的转换为真。如果[c2>0]为真,则向A2的转换是有效的。如果[c1>0]和[c2>0]都不为真,则向A3的转换是有效的。A1、A2和A3之间的转换由E、[c1>0]和[c2>0]确定。
一个事件发生并唤醒图表。到连接点的默认转换是有效的。转换的目的地由[c1>0]和[c2>0]确定。
您可以使用内部转换来代替原始示例中所有状态之间的转换,从而简化图表。如果状态A已经处于激活状态,则内部转换用于重新评估状态A的哪个子状态将处于激活状态。当事件E发生时,内部转换可能有效。如果[c1>0]为true,则向A1的转换是有效的。如果[c2>0]为真,则向A2的转换是有效的。如果[c1>0]和[c2>0]都不为真,则向A3的转换是有效的。这个图表设计比上一个更简单。
注意:当使用到连接结点的内部转换时,活动子状态可以退出,并在该子状态的转换条件有效时重新进入。例如,如果子状态A1是活动的并且[c1>0]为真,则向A1的转换是有效的。在这种情况下:
1.A1的Exit actions 执行并完成。
2.A1变为非激活态。
3.A1变为激活态。
4.A1的Entry actions 执行并完成。
状态Power_on.High 最初处于激活状态。当事件“Reset”发生时,到历史连接的内部转换是有效的。因为内部转换是有效的,所以当前为激活状态,Power_on.High已退出。当处理到历史连接的内部转换时,最后一个活动状态为Power_on.High,变为激活态(重入)。如果Power_on.Low在同样的情况下也是激活的,Power_on.Low 将因此退出并重新进入。本例中的内部转换等效于Power_on.Low and Power_on.High两者的外部自循环转换。