ISA-95 L2→L3 경계의 트레이서빌리티 이벤트: OPC UA 폴링·구독과 MES 핸드셰이크가 택타임을 잠식하는 구조
초록
설비(ISA-95 Level 2)와 MES(Level 3) 사이에서 트레이서빌리티 이벤트가 택타임을 잠식하는 주된 원인은 전송 방식(폴링 대 구독)이 아니라, MES 확인응답(핸드셰이크)이 스테이션 사이클의 임계 경로에 직렬로 놓이는 구조다. 8 GWh/년 셀 라인(택타임 3.14 s, 스테이션 순가공 2.80 s 가정)에서 1.0 s 폴링과 동기 핸드셰이크는 평균 0.72 s를 더해 사이클을 3.52 s로 늘리고 요구수량 대비 약 10.9%의 부족을 만들며, 0.1 s/0.2 s 구독으로 바꿔도 평균 0.37 s가 더해져 택타임을 여전히 초과한다. 핸드셰이크를 임계 경로에서 분리해 로컬 버퍼 기록 직후 배출하는 스토어앤포워드 구조만이 약 0.02 s로 여유 0.34 s 안에 들어온다. 이벤트 유실 역시 이벤트율이 아니라 구조, 즉 큐 크기 1인 단일 변수를 다중 네스트 스테이션이 공유하는 설계에서 발생한다.
1. 결론부터 — 느린 것은 통신이 아니라 기다리는 방식이다
L2→L3 경계의 트레이서빌리티 지연 문제는 “얼마나 빨리 보내는가”가 아니라 “설비가 MES 응답을 기다리는가”로 결정된다. 폴링을 구독으로 바꾸는 개선은 평균 지연을 절반가량 줄이지만, 확인응답이 부품 배출 조건으로 묶여 있는 한 그 잔여 지연은 그대로 사이클에 더해진다.
상황(S): 셀·모듈 라인에서 공정 결과와 부품 시리얼을 MES[1]에 기록하는 인터페이스는 ISA-95(IEC 62264)[2]의 Level 2(제어)와 Level 3(제조운영관리) 경계에 놓이며, 최근에는 OPC UA(IEC 62541)[3]가 사실상 표준 전송 계층으로 쓰인다. 전개(C): 많은 라인이 “MES 기록 완료 전에는 부품을 내보내지 않는다”는 동기 핸드셰이크[4]로 기록 누락을 막는데, 이 방식은 L3 쪽의 지연 분포 전체를 L2의 사이클에 이식한다. 질문(Q): 폴링과 구독 중 무엇을 택해야 택타임 안에서 이벤트를 유실 없이 전달할 수 있는가? 답(A): 어느 쪽도 단독으로는 부족하며, 핸드셰이크를 임계 경로에서 떼어내고 유실 방지 책임을 경계 양쪽의 버퍼로 옮겨야 한다.
이 글이 반박하려는 통념은 “구독으로 바꾸면 지연과 유실이 함께 해결된다”는 것이다. 구독은 평균 지연만 줄일 뿐이며, 유실은 오히려 구독 설정(큐 크기)에서 발생할 수 있다.
2. 메커니즘 — L2→L3 경계에서 이벤트가 지나는 네 구간
스테이션이 한 부품의 결과를 확정한 시점부터 PLC가 확인응답을 받아 배출을 허가하기까지의 지연을 네 구간의 합으로 놓는다.
ths = tdetect + tmes + tack + tscan
tdetect는 MES(또는 L3 커넥터)가 새 결과의 존재를 인지하기까지의 시간이고, tmes는 검증·DB 커밋 시간, tack는 확인응답 쓰기 시간, tscan은 PLC가 응답 비트를 읽는 스캔 지연이다. 전송 방식이 영향을 주는 것은 tdetect 하나뿐이며, 나머지 세 구간은 폴링이든 구독이든 동일하게 남는다.
OPC UA 구독[5]의 동작은 IEC 62541-4(OPC 10000-4)에 규정되어 있다. 구독은 게시 주기(publishing interval)마다 대기 중인 알림을 묶어 보내고, 알림이 없으면 일정 횟수 후 keep-alive를 보내며, 클라이언트의 Publish 요청이 lifetime 횟수만큼 연속으로 없으면 구독이 닫히고 그 MonitoredItem도 삭제된다. 또한 MonitoredItem 큐가 가득 찬 상태에서 새 알림이 오면 서버는 가장 오래된 알림을 버리거나 마지막 값을 덮어쓰며, 큐 크기가 1이면 큐는 “항상 최신값만 담는 버퍼”가 된다.
| 전달 방식 | tdetect 결정 변수 | 유실 발생 지점 | 핸드셰이크 결합 |
|---|---|---|---|
| 폴링(Read 반복) | 폴링 주기 Tp (평균 Tp/2, 최악 Tp) | 주기 내 2건 이상 발생 시 중간값 미관측 | 동기 결합이 일반적 |
| 구독(Client/Server, IEC 62541-4) | 샘플링 주기 + 게시 주기 | 큐 크기 초과 시 폐기·덮어쓰기, lifetime 만료 시 구독 소멸 | 동기·비동기 모두 가능 |
| PubSub(IEC 62541-14) | 게시 주기 + 브로커/네트워크 지연 | 전송 계층이 수신 확인을 보장하지 않는 구성에서 누락 탐지 곤란 | 별도 응답 채널 필요 |
| 스토어앤포워드[6](L2 로컬 버퍼) | 로컬 기록 시간만 임계 경로에 남음 | 버퍼 포화 시 정책(정지 또는 덮어쓰기)에 따라 결정 | 비동기(배출 후 전송) |
표 1에서 주목할 열은 “핸드셰이크 결합”이다. 전송 방식은 tdetect의 크기만 바꾸지만, 결합 방식은 지연 전체가 사이클에 들어가는지 여부를 바꾸므로 두 변수는 통제된 변인으로 분리해 평가해야 한다.
3. 계산 — 가정 시나리오에서 핸드셰이크는 택타임 안에 들어오는가
라인 조건을 다음과 같이 가정한다. 생산능력 8 GWh/년, 셀 314 Ah·3.2 V(셀당 약 1.0048 kWh)이면 고객요구수량은 약 7,961,783셀/년이다. 가용가동시간을 340일 × 86,400 s × 0.85 = 24,969,600 s로 두면 택타임[7]은 24,969,600 s ÷ 7,961,783셀 = 약 3.14 s/셀이다.
트레이서빌리티 결과를 기록하는 스테이션을 12개로 가정하면 라인 전체 이벤트율은 약 3.83건/s, 스테이션당 약 0.32건/s다. 대상 스테이션의 순가공 사이클타임[8]은 2.80 s로 가정하며, 이때 택타임 대비 여유는 0.34 s다. MES 검증·DB 커밋은 평균 0.15 s, 상위 1% 꼬리(p99) 0.60 s, 확인응답 쓰기 0.05 s, PLC 스캔 0.02 s로 가정한다.
| 시나리오 | tdetect 평균 | 핸드셰이크 지연 평균 | p99 지연 | 유효 사이클(평균) | 택타임 대비 | 요구수량 대비 부족 |
|---|---|---|---|---|---|---|
| A. 폴링 1.0 s + 동기 핸드셰이크 | 0.50 s | 0.72 s | 1.67 s | 3.52 s | 112.2% | 약 10.9% |
| B. 구독(샘플링 0.1 s·게시 0.2 s) + 동기 핸드셰이크 | 0.15 s | 0.37 s | 0.97 s | 3.17 s | 101.1% | 약 1.1% |
| C. 스토어앤포워드(비동기) | 임계 경로 밖 | 0.02 s | 0.02 s(로컬 기록) | 2.82 s | 89.9% | 0% |
| 기준선: 택타임 여유 | — | 0.34 s | — | 2.80 s(순가공) | 89.3% | — |

표 2의 기준선은 택타임 여유 0.34 s다. 시나리오 A는 평균만으로 여유의 두 배를 넘고, B는 평균 지연을 A의 약 절반(0.37 s)으로 줄였음에도 여유를 0.03 s 초과해 요구수량을 채우지 못한다. 시사점은 분명하다. 구독 전환은 유의미한 개선이지만 직렬 구조가 유지되는 한 택타임 준수의 충분조건이 아니다.
p99 열은 평균보다 더 엄격한 판단 근거를 준다. B의 p99 유효 사이클은 2.80 + 0.97 = 3.77 s로, 100건 중 1건은 택타임을 0.63 s 넘긴다. 이 꼬리는 MES DB의 체크포인트·백업·인덱스 재구성 같은 L3 내부 사건에서 오며, L2 설비 엔지니어가 통제할 수 없는 변인이 L2 사이클에 그대로 전이된다는 점이 동기 결합의 본질적 위험이다.
4. 유실은 이벤트율이 아니라 구조에서 나온다
택타임 3.14 s 간격으로 결과가 규칙적으로 발생하면, 게시 주기 0.2 s의 구독에서 한 주기 안에 두 건이 겹칠 일은 정상 상태에서 거의 없다. 유실은 규칙성이 깨지는 순간에 집중된다. 대표적인 경우가 4개 네스트에서 동시에 가공을 마친 스테이션이 결과를 하나의 “최근 시리얼” 변수에 순차로 덮어쓰는 설계다. 이 변수를 큐 크기 1로 구독하면 IEC 62541-4의 규정대로 최신값만 남으므로, 같은 샘플링 간격 안에 쓰인 앞의 3건은 이론상 전부 사라진다(4건 중 75%).
같은 구조적 유실은 정지 후 재가동 시에도 나타난다. 누적 버퍼에 쌓였던 부품이 짧은 간격으로 연속 배출되면 순간 이벤트율이 정상의 수 배로 뛰고, 큐 크기가 이 버스트를 담지 못하면 덮어쓰기가 발생한다. 따라서 큐 크기는 평균 이벤트율이 아니라 네스트 수와 재가동 버스트 길이로 사이징해야 하며, 결과 레코드마다 단조 증가하는 시퀀스 번호를 부여해 L3 쪽에서 결번으로 유실을 탐지할 수 있어야 한다.
스토어앤포워드의 제약은 저장 용량이 아니라 PLC 측 링 버퍼 크기와 포화 정책이다. MES 장애가 1,800 s 지속된다고 가정하면 라인 전체 누적 이벤트는 약 6,887건이고 레코드당 2 KB로 가정해도 약 14.1 MB에 불과하다. 그러나 스테이션 PLC 링 버퍼가 256건이라면 스테이션당 0.32건/s 기준 약 803 s만 버틸 수 있으므로, 그 이후의 정책(라인 정지 또는 덮어쓰기)을 사전에 문서화하지 않으면 유실이 조용히 발생한다.
표준화 동향도 이 경계에 직접 닿아 있다. VDMA 40750(OPC UA for Battery Production – Part 1: General)은 2026년 6월 초안(Release Candidate 1.0, 의견 마감 2026-08-01)으로 공개되었으며, 트레이서빌리티용 생산 데이터에는 OPC 40001-3(OPC UA for Machinery – Job Management, 1.0.1, 2024-05-01)의 적용을 강하게 권고한다. ISA-95 작업지시·작업응답의 OPC UA 매핑은 OPC 10031-4(OPC UA for ISA-95 – Part 4: Job Control)가 다룬다. 다만 이 문서들이 핸드셰이크 타이밍이나 확인응답 결합 방식을 규정하는지는 공개 범위에서 확인되지 않았으므로(확인 필요), 결합 구조는 여전히 라인 설계자의 책임으로 남는다.
이는 엣지 AI 비전검사·리크검사의 게이트웨이 집선이 Traceability 완전성에 미치는 영향과는 결이 다르다. 그 글이 L2 내부에서 여러 검사 데이터가 게이트웨이로 모이는 수평 집선을 다뤘다면, 이 글은 L2와 L3 사이의 수직 경계와 그 경계를 넘는 확인응답이 사이클에 끼는 방식을 다룬다.
5. 결론과 시사점
L2→L3 트레이서빌리티 인터페이스는 전송 방식과 결합 방식이라는 두 변수로 분해해야 한다. 가정 시나리오에서 전송 방식 개선(폴링 → 구독)은 평균 지연을 0.72 s에서 0.37 s로 줄였지만, 동기 결합이 남아 있는 한 택타임 초과를 해소하지 못했다. 결합 방식을 비동기(스토어앤포워드)로 바꾸는 것만이 임계 경로의 지연을 0.02 s 수준으로 낮췄다.
그 대가로 “기록 전 배출 금지”라는 품질 인터록은 “버퍼 고수위 시 정지”와 “다음 공정 진입 시 MES 기록 확인”이라는 두 개의 인터록으로 재배치되어야 한다. 유실 방지의 근거가 핸드셰이크에서 시퀀스 번호와 버퍼 수위로 옮겨 가는 셈이다.
구조적 결론(직렬 결합이 L3 꼬리를 L2 사이클로 전이한다)은 가정값과 무관하게 유효하지만, 부족률 10.9%·1.1% 같은 수치는 자사 라인 실측으로 추가 검증이 필요하다.
FAQ
Q. 동기 핸드셰이크를 없애면 MES에 기록되지 않은 부품이 다음 공정으로 넘어가 품질 인터록이 깨지지 않는가?
A. 타당한 반론이다. 그래서 비동기화는 인터록 제거가 아니라 인터록 위치의 이동이어야 한다. 다음 스테이션 진입 시 해당 시리얼의 L3 기록 존재를 확인하는 선행 조회와 로컬 버퍼 고수위 정지를 함께 적용하면, 기록 누락 부품이 라인 밖으로 나가는 경로는 막으면서 확인응답을 임계 경로에서 뺄 수 있다. 선행 조회 자체의 지연이 다음 스테이션 사이클에 끼지 않도록 부품 이송 시간 안에 완료되는지는 실측 검증이 필요하다.
현장 적용 노트
월요일 아침에 바로 실행 가능한 항목으로 정리했다.
| 체크 | 실행 방법 | 비고 |
|---|---|---|
| ☐ 핸드셰이크 결합 여부 식별 | 트레이서빌리티 스테이션별로 “MES 응답 대기 후 배출”인지 PLC 로직에서 확인하고 목록화 | 동기 결합 스테이션이 표 2 계산 대상 |
| ☐ ths 4구간 실측 | PLC 결과 확정·응답 수신 타임스탬프와 MES 수신·커밋 로그를 1주일간 대조해 평균과 p99 산출 | 시계 동기화 오차를 먼저 확인할 것 |
| ☐ 구독 큐 크기 점검 | 결과 변수의 MonitoredItem 큐 크기와 스테이션 네스트 수를 비교 | 큐 크기 1 + 다중 네스트면 구조적 유실 후보 |
| ☐ 시퀀스 번호 결번 조회 | 결과 레코드에 단조 증가 번호가 있는지 확인하고, 있으면 최근 30일 결번 건수를 MES에서 집계 | 번호가 없다면 도입이 최우선 과제 |
| ☐ 로컬 버퍼 포화 정책 문서화 | PLC 링 버퍼 크기 ÷ 스테이션 이벤트율로 커버 시간을 계산하고 포화 시 정지/덮어쓰기 정책을 명문화 | 본문 가정 기준 약 803 s |
각주
[1] MES(Manufacturing Execution System, 제조실행시스템): ISA-95 Level 3에 속하며 작업지시·실적·품질·계보 기록을 관리하는 시스템.
[2] ISA-95(IEC 62264, Enterprise-Control System Integration): 기업(Level 4)과 제어(Level 0~2) 사이의 통합 모델을 정의하는 표준. Level 2는 PLC·DCS 등 감시·제어, Level 3은 제조운영관리에 해당한다.
[3] OPC UA(OPC Unified Architecture, IEC 62541): 정보 모델과 서비스(읽기·쓰기·구독·메서드 호출)를 포함하는 산업용 통신 표준.
[4] 핸드셰이크(Handshake): 송신 측이 데이터를 준비했음을 알리고 수신 측의 확인응답을 받은 뒤 다음 동작으로 넘어가는 절차.
[5] 구독(Subscription)·MonitoredItem: 서버가 감시 대상(MonitoredItem) 값의 변화를 게시 주기마다 통지하는 OPC UA 메커니즘.
[6] 스토어앤포워드(Store-and-forward): 데이터를 먼저 로컬에 저장하고 연결 상태와 무관하게 이후 전송하는 방식.
[7] 택타임(Takt Time): 가용가동시간 ÷ 고객요구수량. 사이클타임이나 FPY와 혼용하지 않는다.
[8] 사이클타임(Cycle Time): 스테이션이 부품 1개를 실제로 처리하는 시간.
출처: ISA-95 Standard (ISA), https://www.isa.org/standards-and-publications/isa-standards/isa-95-standard · OPC 10000-4 Subscription model, https://reference.opcfoundation.org/Core/Part4/v105/docs/5.14.1 · OPC 10000-4 MonitoredItem queue, https://reference.opcfoundation.org/Core/Part4/v104/docs/5.13.1 · IEC 62541-14:2020 PubSub, https://webstore.iec.ch/en/publication/61108 · VDMA 40750:2026-06 Draft, https://www.vdma.eu/documents/d/group-34568/draft_vdma_40750_2026-06 · OPC 40001-3 Job Management 1.0.1 (2024-05-01), https://reference.opcfoundation.org/Machinery/Jobs/v100/docs/ · OPC 10031-4 Job Control Scope, https://reference.opcfoundation.org/specs/OPC-10031-4/1
측정·산정 조건: 생산능력 8 GWh/년, 셀 314 Ah·3.2 V, 가용가동시간 24,969,600 s/년(340일 × 86,400 s × 0.85), 트레이서빌리티 스테이션 12개, 순가공 사이클타임 2.80 s, 폴링 주기 1.0 s, 구독 샘플링 0.1 s·게시 0.2 s, MES 처리 평균 0.15 s·p99 0.60 s, 응답 쓰기 0.05 s, PLC 스캔 0.02 s, 로컬 링 버퍼 256건, 레코드 2 KB, MES 장애 1,800 s는 모두 가정값이다. 네트워크 부하·MES DB 상태·PLC 스캔 설정에 따라 결과가 달라지므로 실측 검증이 필요하며, 시험대(testbed) 측정값을 양산 라인에 1:1로 대입하지 않는다.


