RiCIS_IN() 或 IS_IN()

IS_IN() 陳述式判定物件是否處於特定狀態。

RICIS_IN()IS_IN() 的效果相同。這個陳述式會採用物件指標及檢查的狀態名稱作為引數。狀態的名稱格式為 <object>_<state>

例如,若要在 Furnace 物件從一個狀態變更為另一個狀態之前,確定它未處於 faultS 狀態,您可以使用下列 IS_IN() 陳述式作為對 Furnace 的狀態圖中轉移的保護:

[!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)


回饋