RiCIS_IN() 或 IS_IN()

IS_IN() 语句用于确定对象是否处于特定状态。

RICIS_IN() 的作用与 IS_IN() 相同。此语句接收指向对象的指针和正在检查的状态的名称作为自变量。状态的名称格式为 <object>_<state>

例如,要确保 Furnace 对象从一种状态切换到另一状态之前未处于 faultS 状态,可以在 Furnace 的状态表中使用以下 IS_IN() 语句作为过渡防护:

[!IS_IN(me,Furnace_faultS)]

IS_IN() 的定义如下所示:

#define IS_IN(me, state) state##_IN((me))

这个宏将调用为此状态生成的 IN() 操作。请参阅检查对象状态

在引用状态时,必须使用生成的状态名。在引用同名的胞代状态时,这种方法比较棘手。例如,如果对象 A 具有 And 状态 B 以及并发状态 B1B2,并且其中的每个状态都具有子状态 C,那么将为这些状态生成下列枚举值:

/*states enumeration: */
enum A_Enum{ A_RiCNonState=0, A_B=1, A_B2=2,
   A_B2_C=3, A_B1=4, A_C=5 }

B1 的子状态 C 生成的名称是 A_C。因此,要确定 A 是否处于 B1C,应该调用的宏是 IS_IN(me, A_C),而不是 IS_IN(me, A_B1_C)


反馈