누군가 벤더의 변전소 사양서에 PTP가 적혀 있다는 이유로 PTP를 요청하고, 3주 뒤엔 그랜드마스터 클럭 하나, 바운더리 클럭 스위치 한 무더기, 그리고 변경 지시서 한 장이 생긴다 — 이 모든 게 2초마다 폴링으로 갱신되는 태그에 타임스탬프를 찍기 위해서다. 내가 가장 자주 보는 실패다: 현장이 겪은 적도 없는 문제를 풀겠다고 산 PTP. 반대쪽 실패는 더 조용하고 더 나쁘다 — 두 변전소에 걸친 SOE 리포트를 1 ms로 정렬하겠다고 NTP를 믿는 것인데, NTP는 그걸 못 하고, 사후 고장 분석에서 하류 차단기가 그것을 유발한 고장보다 먼저 트립한 것으로 찍히기 전까지 아무도 눈치채지 못한다.
그래서 진짜 질문은 "PTP냐 NTP냐"가 아니다. 찍으려는 대상에 시간이 얼마나 정확해야 하는가, 그리고 타임스탬프가 실제로 어디서 찍히는가? 이 둘에 답하면 프로토콜 선택은 저절로 따라 나온다.
각각이 실제로 주는 것
일반 이더넷 LAN 위의 NTP(또는 대부분의 PLC와 RTU가 탑재하는 축소판 클라이언트 SNTP)는 괜찮은 stratum-1 소스에 맞춰 한 자릿수 밀리초 초반까지 들어간다. 바쁘거나 홉이 많은 네트워크에서, 혹은 필터링을 전혀 안 하는 싸구려 SNTP 클라이언트로는 10~50 ms까지 벌어지고 부하에 따라 흔들린다. 머릿속에 새겨둘 숫자가 이것이다: NTP는 "몇 밀리초에서 수십 밀리초" 기술이다. 평범한 소프트웨어 타임스탬핑이라, 스위치 큐잉 지연과 OS 스케줄링 지터가 그대로 오프셋으로 들어간다.
PTP — IEEE 1588 — 는 그냥 빠른 NTP가 아니라 다른 메커니즘이다. 정확도는 MAC 계층의 하드웨어 타임스탬핑과, 자신의 통과 지연을 측정해 빼주는 네트워크 요소들에서 나온다. 경로에 PTP를 인식하는 스위치가 있으면 서브 마이크로초에서 한 자릿수 마이크로초 범위에 안착한다. 그런 스위치가 없으면 PTP는 NTP급 숫자로 떨어지는데, 사람들이 평범한 언매니지드 스위치에 그랜드마스터를 꽂아놓고 2 ms를 보며 실망하는 이유가 바로 이것이다 — PTP 값을 냈는데 경로가 PTP를 인식하지 못해 NTP를 받은 것이다.
둘 사이의 격차는 세 자릿수인데, 대부분의 SCADA 데이터는 그 어느 것도 신경 쓰지 않는다.
타임스탬프에 시계를 맞춰라
타임스탬프가 어떻게 생성되는지로 태그를 훑어보라. 그게 정확도가 중요한지를 결정하기 때문이다:
- 폴링되는 아날로그와 상태, SCADA 서버가 수신 시점에 타임스탬프를 찍는 경우. 폴 주기가 1~5초이고 타임스탬프에는 이미 수백 밀리초의 전송·스캔 지연이 실려 있다. 서버 시계를 1 µs로 맞추는 건 애초에 흐릿하게 설계된 숫자를 광내는 짓이다. 여기서 NTP는 그저 적당한 정도가 아니라 올바른 엔지니어링 선택이다 — 더 싸고, 더 단순하고, 시운전할 게 하나 줄어든다.
- 디바이스 타임스탬프가 붙은 예외 보고(RBE)/상태 변화(COS) (DNP3 이벤트, OPC UA 소스 타임스탬프, 자체 시간을 실은 MQTT 페이로드). 이제 타임스탬프는 이벤트가 일어난 RTU/PLC에서 찍히고, 디바이스 간 순서가 의미를 갖기 시작한다. 몇 ms의 NTP도 보통은 아직 괜찮다 — 여러 디바이스의 이벤트 스트림을 병합해서 순서를 따져야 하기 전까지는.
- 보호 및 고장 분석을 위한 이벤트 순서(SOE). 진짜 정확도가 필요한 것이 이것이다. IEEE C37.232와 전력 실무는 1 ms SOE 분해능을 요구하고, 서로 다른 두 IED가 찍은 두 이벤트의 순서를 믿으려면 그 스탬프를 찍는 시계들이 1 ms보다 훨씬 안쪽으로 일치해야 한다. NTP의 몇 밀리초 오차는 측정하려는 대상과 같은 크기다. PTP가 값을 하는 지점이 여기다.
- IEC 61850-9-2 샘플드 값(SV). 샘플링된 아날로그 값을 퍼블리싱하는 머징 유닛은, 보호 릴레이가 서로 다른 소스의 전류와 전압을 하나의 페이저로 결합할 수 있도록 서브 마이크로초 정렬이 필요하다. 여기엔 나눌 NTP 논의 자체가 없다 — 프로세스 버스는 PTP를 전제로 한다.
패턴이 보인다: 정확도 요구는 신호의 명목상 중요도가 아니라 누가 시간을 찍는가, 그리고 디바이스 간 스탬프를 비교하는가를 따라간다. 폴링돼 서버가 스탬프를 찍는 중요한 차단기 상태는, 현장에서 스탬프가 찍히는 평범한 SOE 기록보다 시계 정확도가 덜 필요하다.
PTP 프로파일은 무시해도 되는 세부사항이 아니다
정말로 PTP가 필요하다면 "우리 1588 돌립니다"는 사양이 아니다. IEEE 1588에는 프로파일이 있고, 섞으면 그랜드마스터와 슬레이브가 락(lock)되지 않는다. 전력 계통에서 관련되는 것은 파워 프로파일 IEEE C37.238과 그 IEC 대응판 IEC 61850-9-3인데, 전송 방식(Layer 2 멀티캐스트, peer-to-peer 지연 메커니즘), 메시지 속도, 그리고 정의된 정확도 예산(C37.238은 정해진 홉 수까지 1 µs를 목표)을 못박는다. 범용 산업 장비는 흔히 그 대신 디폴트 프로파일이나 텔레콤 프로파일을 탑재한다. C37.238 그랜드마스터와 IEC 61850-9-3 디바이스는 상호운용될 만큼 가깝지만, 그 사이에 낀 디폴트 프로파일 스위치가 peer-to-peer 대신 end-to-end 지연을 돌리면 지연 보정을 조용히 망가뜨린다. 사기 전에, 나중이 아니라, 경로상의 모든 디바이스에서 프로파일을 확인하라.
그리고 경로가 게임의 전부다. PTP 정확도는 그랜드마스터와 슬레이브 사이의 모든 스위치가 바운더리 클럭(PTP를 종단하고 자기 발진기로 재타이밍해 재생성)이거나 트랜스패런트 클럭(프레임이 안에 머문 시간을 측정해 그 체류 시간을 보정 필드에 기록)인 것에 달려 있다. 이 둘 중 어느 것도 아닌 평범한 store-and-forward 스위치 하나가 경로에 앉아 있으면, 자신의 큐잉 지연을 오프셋에 더하는데 뺄 방법이 없다 — 게다가 부하 상황에서 그 지연은 변동하므로, 오차는 보정해 없앨 수 있는 상수조차 아니다. PTP가 아닌 홉 하나가 트래픽이 튈 때마다 1 µs 시스템을 100 µs 시스템으로 바꿔놓을 수 있다.
그랜드마스터, 홀드오버, 그리고 예고 없이 오는 실패
그랜드마스터 클럭은 GNSS — 보통 GPS — 에 규율(discipline)되는데, 지붕 위 그 안테나는 낙뢰나 갉아먹힌 케이블이 끊기 전까지 사람들이 잊고 사는 단일 고장점이다. 그다음 무슨 일이 벌어지는지는 그랜드마스터의 홀드오버에 달렸다: GNSS를 잃으면 내부 발진기로 프리런(free-run)하는데, 싸구려 TCXO는 OCXO나 루비듐보다 훨씬 빠르게 드리프트한다. 시계는 계속 시간을 나눠주고 계속 자신이 건강하다고 주장한다. 그저 천천히 진실에서 걸어 나갈 뿐이다. SOE에서 이건 오직 고장 중에만 문다 — 하필 GNSS도 교란됐을 수 있는 바로 그 순간에.
여기서 당신을 구하는 건 두 가지다. 첫째, 중복 그랜드마스터를 배치하고 **최적 마스터 클럭 알고리즘(BMCA)**이 페일오버하게 하라 — BMCA가 존재하는 이유가 그것이고, 페일오버가 실제로 일어나는지는 가정하지 말고 시운전 중에 주 그랜드마스터를 뽑아 시험할 가치가 있다. 둘째, 이게 건너뛰어지는 것인데: PTP는 클럭 품질/clockClass 필드를 실어 나르니, 그걸 소비하라. 그랜드마스터가 홀드오버로 떨어지면 광고하는 clockClass를 낮추고, 슬레이브(또는 당신의 SCADA)가 그에 따라 행동할 수 있다 — 타임스탬프를 정확도 저하로 표시하거나, 최소한 로그를 남기거나. 언제 정확하지 않게 됐는지 알려주지 못하는 시간 동기 시스템은, 하필 그것을 위해 만든 그 이벤트에서 자신 있게 틀린 타임스탬프를 건네줄 시스템이다.
대개 옳은 디폴트
폴링 데이터와 서버 측 타임스탬핑으로 돌아가는 플랜트 전역 SCADA 네트워크를 세운다면 — 상수도, 일반 제조, 대부분의 공정 플랜트 — stratum-1 소스(GPS로 규율되는 NTP 어플라이언스는 싸다)에 NTP를 돌리고, 모든 서버·PLC·HMI를 거기에 가리키게 하고, 넘어가라. ntpq -p나 벤더 등가물로 오프셋을 한 번 확인하고, 아무도 조용히 자기 프리런 RTC로 폴백하지 않는지 확인하면, 끝이다. PTP는 물리가 요구하는 곳을 위해 아껴라: 보호, 디바이스 간 1 ms로 유지돼야 하는 SOE, 그리고 61850 프로세스 버스. 밀리초로 흐릿한 데이터에 마이크로초 시간을 사는 건 뒷받침할 신호가 없는 비용이다 — 그리고 당신이 더하는 모든 바운더리 클럭과 그랜드마스터는 새벽 3시에 고장 나는 물건이 하나 더 느는 것이다.
두 실수를 다 잡아내는 점검은 하나로 같다: SCADA 서버에서, 알려진 이벤트 동안 서버 시계를 독립적인 기준과 diff하고, 실제 SOE 기록의 타임스탬프가 어디에 떨어지는지 보라. 폴링 데이터만 하는데 타임스탬프가 1 ms보다 훨씬 안쪽으로 맞아떨어진다면, 과하게 산 것이다. 변전소 간 이벤트 순서에 누군가 의존하는데 수십 ms씩 흔들린다면, 부족하게 산 것이다. 어떤 시스템을 실제로 가졌는지는 사양서가 아니라 그 숫자가 말해준다.