콘텐츠로 이동
무료 평가 시작

이벤트, 알람과 조건

값의 변화와 달리 이벤트(event)는 무언가 일어났다는 사실을 알립니다. 설비 고장, 한계값 초과, 운전원 조작 같은 사건입니다. 이벤트 모델은 Part 3과 Part 5, 알람과 조건(Alarms and Conditions)은 Part 9에서 정의합니다.

모든 이벤트 타입은 BaseEventType(i=2041)에서 파생합니다. 주요 필드는 다음과 같습니다.

필드 설명
EventId 이벤트마다 서버가 만드는 고유한 바이트 문자열
EventType 이벤트 타입의 NodeId
SourceNode, SourceName 이벤트가 일어난 노드와 그 이름
Time 이벤트가 일어난 시각
Message 사람이 읽는 설명
Severity 심각도(1~1000). 값이 클수록 심각합니다.

이벤트는 노드에 저장되지 않습니다. 이벤트 알리미(event notifier)인 객체를 구독해야 받습니다. 알리미는 EventNotifier 속성의 SubscribeToEvents 비트가 켜진 객체입니다. Server 객체(i=2253)는 서버 전체의 이벤트를 알리는 최상위 알리미입니다.

이벤트는 구독에 MonitoredItem을 추가해 받습니다. 감시 대상은 알리미의 EventNotifier 속성(AttributeId 12)이고, 필터로 EventFilter를 씁니다.

  • select 절: 알림에 담을 필드 목록입니다. 필드마다 타입 정의와 탐색 경로(browse path)를 지정합니다. 예를 들어 AckedState/Id는 AckedState 변수의 Id 속성입니다.
  • where 절: 받을 이벤트의 조건입니다. 비우면 모든 이벤트를 받습니다.

알림의 필드 값(EventFieldList)은 select 절의 순서대로 옵니다.

조건(condition)은 상태가 있는 이벤트 원천입니다. 상태가 바뀔 때마다 새 이벤트를 보내고, 매번 EventId가 새로 만들어집니다. 타입 계층은 다음과 같습니다.

BaseEventType (i=2041)
└── ConditionType (i=2782) EnabledState, Retain, Comment
└── AcknowledgeableConditionType (i=2881) AckedState, ConfirmedState
└── AlarmConditionType (i=2915) ActiveState
└── ... OffNormalAlarmType (i=10637)
상태 의미
EnabledState 조건이 동작 중인지 여부. Disable 상태에서는 이벤트를 보내지 않습니다.
ActiveState 알람 조건이 현재 성립하는지 여부
AckedState 운전원이 알람을 인지(acknowledge)했는지 여부
ConfirmedState 조치를 확인(confirm)했는지 여부
Retain 클라이언트가 계속 보여 줘야 하는 조건인지 여부

조건 메서드는 조건 노드를 객체로, 표준 메서드 NodeId를 메서드로 지정해 Call로 호출합니다.

메서드 NodeId 입력 인자
Acknowledge i=9111 인지할 이벤트의 EventId, 설명(LocalizedText)
Confirm i=9113 확인할 이벤트의 EventId, 설명
AddComment i=9029 EventId, 설명
Enable, Disable i=9027, i=9028 없음
ConditionRefresh i=3875 SubscriptionId. ConditionType(i=2782)을 객체로 지정합니다.

Acknowledge와 Confirm은 특정 이벤트를 가리킵니다. 가장 최근 상태의 EventId를 넘겨야 합니다. 알 수 없는 EventId는 BadEventIdUnknown, 이미 인지한 상태를 다시 인지하면 BadConditionBranchAlreadyAcked입니다.

구독을 새로 만든 클라이언트는 이미 활성화된 알람을 모릅니다. ConditionRefresh를 호출하면 서버가 그 구독으로 RefreshStartEvent(i=2787), Retain이 참인 조건의 현재 상태, RefreshEndEvent(i=2788)를 차례로 보냅니다.

시뮬레이터 서버에는 알람 조건이 하나 있습니다.

항목 값
조건 노드 ns=2;s=Simulator.Alarm(OffNormalAlarmType)
원천 변수 ns=2;s=Simulator.AlarmSource(Boolean). true가 되면 알람이 활성화됩니다.
알리미 Server 객체(i=2253)
심각도 활성 700, 해제 100

알람 하나의 상태는 다음 순서로 바뀝니다. 시뮬레이터에서 실제로 받은 이벤트의 값입니다.

사건 ActiveState AckedState ConfirmedState Retain
알람 활성화 true false true true
Acknowledge true true false true
Confirm true true true true
알람 해제 false true true false

시뮬레이터의 event_subscribe 동작은 EventId, EventType, SourceNode, SourceName, Time, Message, Severity, ConditionId, Retain, ActiveState/Id, AckedState/Id, ConfirmedState/Id 필드를 선택합니다. 이벤트와 알람 튜토리얼에서 실행합니다.

PDComm SDK 클라이언트는 이벤트 구독과 조건 메서드 요청을 그대로 전달합니다. SDK 메모리 서버에는 이벤트와 조건이 없습니다.

이력 접근에서 지난 값을 읽는 방법을 살펴봅니다.