← 전체 글
네트워킹/약 16분 읽기/— 조회

DNP3 데드밴드와 이벤트 변형이 마스터에 도달하는 값을 결정하는 방식

데드밴드는 아날로그 변화를 이벤트로 만들지 정하고, Group 32 변형은 형식을 정한다. 이벤트 버퍼 넘침과 쓸모없는 타임스탬프를 막는 튜닝.

네트워킹SCADA문제 해결시운전태그

이벤트 트래픽을 결정하는 두 노브

DNP3 outstation은 아날로그 값을 두 방식으로 보고한다. Group 30에서 현재 값을 돌려주는 정적(Class 0) 폴, 그리고 값이 변할 때 발생해 Group 32에 담기는 이벤트(Class 1/2/3)다. 클래스 폴링과 비요청 응답 노트가 마스터가 언제 묻는지를 다뤘다면, 여기서는 아날로그의 outstation 쪽을 본다. 언제 변화가 이벤트로 낼 만한지, 그리고 그 이벤트가 어떤 형식을 갖는지.

이 둘은 사람들이 끊임없이 뒤섞는 별개의 설정이다.

  • 데드밴드는 변화가 이벤트를 생성할 만큼 큰지 결정한다.
  • **이벤트 변형(variation)**은 그 이벤트가 어떻게 인코딩되는지 결정한다. 정수인지 부동소수인지, 타임스탬프가 있는지 없는지, 16비트인지 32비트인지.

데드밴드를 잘못 잡으면 이벤트 버퍼를 흘러넘치게 하거나 실제 움직임을 놓친다. 변형을 잘못 고르면 타임스탬프가 쓸모없어지거나 분해능이 사라진다. 둘은 독립적이며, 독립적으로 튜닝한다.

아날로그 데드밴드란 실제로 무엇인가

아날로그 데드밴드는 outstation이 새 이벤트를 큐에 넣기 전에 값이 마지막으로 보고한 값으로부터 움직여야 하는 양이다. 라이브 값에 대한 필터가 아니며 Class 0 정적 읽기에는 영향을 주지 않는다. Class 0 폴은 데드밴드와 무관하게 항상 현재 값을 돌려준다.

사람들을 걸려 넘어지게 하는 미묘함은, 데드밴드가 마지막으로 샘플링한 값이 아니라 마지막으로 보고한 값을 기준으로 측정된다는 점이다. 아주 작은 스텝으로 천천히 표류하는 값도 누적된 표류가 데드밴드를 넘을 때마다 이벤트를 생성한다. 한 샘플에서 데드밴드 전체를 뛰어넘을 필요가 없다.

데드밴드는 포인트마다 설정되며, 장치에 따라 공학 값 단위 또는 원시 카운트 단위로 설정된다. DNP3에서 이것은 실제 객체다. Group 34, 아날로그 입력 보고 데드밴드로, 변형 1은 16비트 값, 변형 2는 32비트, 변형 3은 단정밀도 부동소수다. 일부 마스터는 이를 런타임에 읽고 심지어 쓸 수도 있는데(function code 2로 Group 34 쓰기), 벤더 도구가 설정을 숨겨 놓았는데 포인트가 명백히 홍수를 일으킬 때 알아두면 유용하다. 단위 기준이 중요하다.

  • 데드밴드를 원시 카운트로 적용하는 장치에서 데드밴드 10 카운트는 0–100 kPa 범위와 0–10000 kPa 범위에서 서로 다른 의미다.
  • 공학 단위로 적용하는 장치에서는 운전원이 생각하는 단위로 설정하므로 실수할 여지가 훨씬 적다.

다른 포인트에서 데드밴드 값을 복사하기 전에 outstation이 어느 쪽을 쓰는지 항상 확인한다. 이것이 가장 흔한 아날로그 이벤트 오설정이다.

신호에 맞는 데드밴드 설정

올바른 데드밴드는 사내 기본값이 아니라 신호에서 나온다. 정상 잡음으로 2% 흔들리는 압력과 몇 시간에 걸쳐 기어가는 탱크 레벨은 같은 0–100% 스케일이라도 완전히 다른 데드밴드가 필요하다.

신호 거동데드밴드가 너무 작을 때데드밴드가 너무 클 때
잡음 많은 아날로그(유량, 압력)잡음으로 인한 이벤트 홍수실제 이탈을 놓침
느린 표류(탱크 레벨, 온도)이벤트가 꾸준히 새어 나옴트렌드가 거친 계단처럼 보임
스텝형(설정점, 위치)괜찮음, 이벤트가 실제임작은 실제 이동을 잃음

현장에서 통하는 규칙:

  • 데드밴드를 신호의 잡음 대역 바로 위에 설정해, 잡음은 조용히 두되 실제 이동은 무엇이든 보고되게 한다.
  • 매끈한 트렌드를 원한다면, 히스토리언은 보고된 값만 본다는 점을 기억한다. 큰 데드밴드는 스텝 사이에 아무것도 보고되지 않아 트렌드를 계단처럼 만든다.
  • 잡음 많은 아날로그에 "안전하게" 데드밴드를 0으로 두지 않는다. 흔들리는 신호에 데드밴드 0은 이벤트 버퍼가 넘쳐 정작 필요한 이벤트를 버리기 시작하는 전형적 원인이다.

이벤트 변형: 형식과 크기

변화가 데드밴드를 넘으면 outstation은 이벤트를 큐에 넣는다. 아날로그 입력 이벤트 객체(Group 32)의 변형(variation) 번호가 그 이벤트의 인코딩 방식을 결정한다. IEEE 1815는 이를 명확히 정의한다. 변형 1은 플래그 있는 32비트 정수, 변형 2는 플래그 있는 16비트 정수, 변형 3과 4는 각각 32비트·16비트 정수에 48비트 절대 타임스탬프를 붙인 것, 변형 5는 플래그 있는 단정밀도 부동소수, 변형 7은 플래그와 시간이 모두 있는 단정밀도 부동소수, 변형 6과 8은 배정밀도 부동소수 쌍이다. 실무에서 중요한 선택은 세 가지 질문으로 압축된다.

  • 시간 있음 대 시간 없음. 시간 없는 변형(32/1, 32/2)은 마스터가 도착 시점에 스탬프를 찍게 만들어, outstation 자신의 타이밍을 잃고 느린 회선에서 버퍼 이벤트의 존재 이유 자체를 무력화한다. 지연이나 store-and-forward가 있는 회선이라면 시간 있음 변형(32/3, 32/4, 32/7)을 쓴다.
  • 정수 대 부동소수. 정수 변형은 작지만 크거나 스케일된 값을 잘라낸다. 부동소수 변형(32/5–32/8)은 전체 분해능을 담지만 이벤트당 바이트가 더 든다. 32/7은 11바이트인데 맨 32/2는 3바이트다. 변형을 포인트의 실제 범위와 분해능에 맞춘다.
  • 32비트 대 16비트 정수. 16비트 아날로그 이벤트(32/2, 32/4)는 ±32767을 초과하는 값을 조용히 wrap하거나 saturate한다. 포인트가 부호 있는 16비트 카운트를 넘을 수 있다면 32비트나 부동소수 변형이 필요하다.

마스터가 기본 변형을 요청하지만, 이벤트로 실제 전송되는 것은 outstation에 설정된 변형이다. 여기서 가정이 어긋나면 그럴듯하지만 틀린 값이 나온다. 16비트에 맞도록 잘린 32비트 값은 프로세스가 wrap 지점을 넘어가기 전까지 실제 데이터처럼 보인다.

버퍼 회선에서 타임스탬프 변형이 중요한 이유

이벤트 변형이 존재하는 이유는 애초에 무언가 일어났다는 사실만이 아니라 언제 일어났는지를 보존하기 위해서다. 깨끗한 LAN에서는 마스터가 몇 밀리초 뒤에 읽으므로 시간 없는 이벤트로도 넘어갈 수 있다. 하지만 무선, 셀룰러 백홀, 또는 store-and-forward 경로에서는 이벤트가 버퍼에 수 초에서 수 분간 앉아 있을 수 있다.

버퍼에 담긴 이벤트에 타임스탬프가 없으면, 마스터는 마침내 읽는 순간에 그것들을 모두 스탬프해 일련의 변화 전체가 하나의 도착 시각으로 무너진다. 이벤트 순서는 살아남지만 타이밍은 허구가 된다. 이는 SOE(sequence-of-events) 분석을 깨뜨리고, 이벤트로 재구성한 트렌드를 틀리게 만든다.

타이밍이 중요한 아날로그에는 시간 있음 변형을 쓰고, outstation 시계가 동기화됐는지 확인한다. 타임스탬프 이벤트는 그것을 찍은 시계만큼만 정확하며, 그래서 시간 동기화와 이벤트 변형은 함께 시운전한다.

데드밴드와 변형이 이벤트 버퍼에 주는 부하

두 설정은 함께 이벤트 버퍼 압력을 결정하고, 버퍼는 크기가 고정돼 있다. 데드밴드를 넘는 모든 이벤트는 마스터가 읽을 때까지 슬롯 하나를 차지하며, 시간 있는 부동소수 이벤트는 시간 없는 16비트 이벤트보다 더 많은 바이트를 쓴다.

실패 모드는 이렇다. 잡음 많은 포인트에 데드밴드가 너무 작으면 마스터가 폴하는 속도보다 빠르게 이벤트가 생성되고, 포인트별(또는 outstation별) 이벤트 버퍼가 차서 outstation이 버리기 시작한다. 장치 동작에 따라 가장 오래된 이벤트를 버리거나 overflow/buffer-full 표시를 세운다. 어느 쪽이든 데이터를 잃으며, 보통 실제 외란 주변의 데이터를 잃는다. 외란이야말로 잡음 많은 포인트가 이벤트를 가장 많이 생성하는 순간이기 때문이다.

버퍼를 건강하게 유지하려면:

  • 모든 포인트의 이벤트율 합이 폴 사이클이 비워낼 수 있는 양보다 충분히 낮게 데드밴드 크기를 정한다.
  • 이벤트 버퍼 overflow 표시(IIN 비트/장치 진단)를 감시한다. 외란 중에 넘치는 버퍼는 데드밴드가 너무 빡빡하거나 폴 속도가 너무 느리다고 알려주는 것이다.
  • 데드밴드를 넓히는 것과 폴을 늦추는 것 모두 버퍼 압력을 줄이지만, 서로 다른 것을 맞바꾼다. 데드밴드는 분해능을, 폴 속도는 지연을 내준다.

시운전 체크리스트

아날로그를 포인트 하나씩 짚는다. 모든 아날로그에 사내 기본값 하나를 적용하면 같은 outstation에 홍수와 사각지대가 함께 생긴다.

  1. outstation이 데드밴드를 원시 카운트로 적용하는지 공학 단위로 적용하는지 확인하고 올바른 단위로 값을 설정한다.
  2. 각 아날로그의 잡음 대역을 측정하거나 추정해 데드밴드를 그 바로 위에 설정한다. 0도, 복사한 기본값도 아니다.
  3. 타이밍이 중요한 아날로그에는 시간 있음 이벤트 변형을 고르고 outstation 시계가 동기화됐는지 확인한다.
  4. 정수 대 부동소수, 16비트 대 32비트 변형을 포인트의 실제 범위와 분해능에 맞추고, 어떤 포인트도 변형의 범위를 넘을 수 없는지 검증한다.
  5. 마스터가 요청하는 기본 변형과 outstation에 설정된 변형이 일치하는지 확인해 이벤트가 조용히 잘리지 않게 한다.
  6. 모든 포인트의 총 이벤트율을 추정하고 폴 사이클이 버퍼를 비워내는 속도와 대조한다.
  7. 이벤트 버퍼 overflow 표시를 활성화하고 트렌드하며, 테스트에서 외란을 강제로 만들어 유휴 상태가 아니라 최악의 경우에도 버퍼가 견디는지 확인한다.
  8. 데드밴드 값, 단위 기준, 이벤트 변형(Group 32 변형 번호로), 클래스 배정을 포인트 맵의 각 아날로그 옆에 기록한다.

시운전 후 딱 하나만 확인한다면, 외란을 강제로 만들고 이벤트 버퍼를 지켜본다. 유휴 상태의 거동은 아무것도 말해주지 않는다. 버퍼는 외란 중에 넘치고, 그 창이 바로 나중에 재구성하라고 요구받을 구간이다.