Inner Transitions
内部转换是指不退出源状态的转换。当为具有异或分解的超状态定义时,内部转换是强大的。
使用内部转换可以极大地简化Stateflow®图表,如以下示例所示:
使用内部转换之前
使用内部转换到连接结点之后
使用内部转换到历史节点
使用内部转换之前
此图表是如何使用内部转换简化逻辑的示例。
任何事件都会发生并唤醒状态流程图。到连接点的默认转换是有效的。转换的目的地由[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的转换是有效的。这个图表设计比上一个更简单。
使用内部转换到历史节点
状态Power_on.High最初处于活动状态。当事件“Reset”发生时,到历史连接的内部转换是有效的。因为内部转换是有效的,所以退出当前活动状态Power_on.High。当处理到历史连接的内部转换时,最后一个活动状态Power_on.High变为活动状态(重新输入)。如果Power_on.Low在相同情况下处于活动状态,则Power_on.Low将退出并重新输入。此示例中的内部转换等效于在Power_on.Low和Power_on.High上绘制外部自循环转换。