ANSYS Scade One 是 ANSYS Scade Suite 的后继产品。其语言Scade 6自2008年推出近20年后,推出了演化后的语言Swan。Swan对比Scade 6在状态机方面进行了若干改变。
改变1 - 移除Scade 6同步迁移
在Scade 6中的状态机语言特性中,支持一类被称为同步迁移的状态迁移类型。同步迁移支持状态机内的子状态机都达到final
状态时,触发迁移。
一个Scade 6
同步迁移的例子如
node SynchroTrTest(i1, i2, i3: int8)
returns (o: int8)
automaton SM
initial state State1
automaton InnerSM
initial state InnerState1
unless
if i2 > 42 restart InnerState2;
o = i1;
final state InnerState2
o = i2;
returns ..;
until synchro resume State4;
state State4
o = i3;
returns ..;
在上面的例子中,仅当状态机 SM
中的子层次状态机InnerSM
内的状态达到final
状态时,才会触发同步迁移until synchro resume State4
,迁移至状态 State4
。
在Swan中,同步迁移类型、以及与同步迁移相关的 final
状态类型被移除。移除的原因为,在实际行业使用中,使用synchro迁移的情况罕见。
改变2 - 在同一状态机层次中,强迁移与弱迁移禁止混合使用
在Scade 6
中,状态机内支持同时使用强迁移与弱迁移。Scade 6中强迁移与弱迁移的使用示例如下
node AutomatonTest(i1, i2: int8) returns (o: int8)
let
automaton SM
initial state State1
unless
if true resume State2;
o = i1;
until
if true resume State2;
state State2
o = i2;
returns ..;
在上面的例子中,状态 State1
同时包含了强迁移unless if true resume State2;
与弱迁移until if true resume State2;
。
在Swan中,此类混合使用强迁移与弱迁移的场景被禁止。在同一状态机层次下,仅可使用一种类型的迁移。比如全部使用强迁移,或全部使用弱迁移。
改变3 - 与迁移有关的优化
- 迁移可省略
guard
条件。 - 迁移可显式描述优先级。
详细内容可参考 Scade One 技术文档:
Scade One Student