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 오브젝트에 동시 상태 B1B2가 있는 And 상태 B가 있고 각각에 하위 상태 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입니다. 따라서 B1C에 있는 AIS_IN(me, A_B1_C)가 아니라 IS_IN(me, A_C)인지 여부를 확인하는 올바른 매크로 호출입니다.


피드백