본문으로 건너뛰기
고급약 40분

산업용 프로토콜 — OPC UA·Modbus 위에서 설비 상태와 명령 검증

설비와 MES 를 잇는 통신은 Modbus 처럼 레지스터 번호만 주고받는 방식과 OPC UA 처럼 정보 모델을 가진 방식으로 갈린다. 태그·주소 매핑이 틀어질 때 생기는 일, 읽기와 달리 쓰기가 설비를 실제로 움직이기 때문에 위험한 이유, 타임아웃·재시도·순서가 만드는 결함, 그리고 QA 가 승인과 안전 조건을 지키며 시험하는 절차를 다룬다.

  • #OPCUA
  • #Modbus
  • #산업프로토콜
  • #태그매핑
  • #설비연동
  • #제조QA

개념

설비와 대화하는 두 방식

l01 에서 QA 가 서야 할 자리를 "제어 ↔ 운영 경계"로 잡았다. 그 경계에 깔려 있는 것이 산업용 프로토콜이고, 한빛정밀 2공장만 해도 세 가지가 섞여 있다 — PLC 는 OPC UA, 리크 테스터는 Modbus TCP, EOL 시험기는 자체 TCP 텍스트 프로토콜.

프로토콜을 다 외울 필요는 없다. 성격이 갈리는 축 하나를 알면 된다 — 데이터에 의미가 붙어 있는가.

  • 의미가 없는 쪽 — Modbus 계열. 주고받는 것은 번호가 붙은 레지스터와 비트다. 40001 번지에 들어 있는 1234 가 생산 수량인지 온도인지는 프로토콜이 모른다. 의미는 사람이 만든 매핑 문서 에만 있다.
  • 의미가 붙은 쪽 — OPC UA 계열. 서버가 주소 공간(address space) 에 노드를 두고, 노드마다 이름·데이터 타입·단위·접근 권한이 선언돼 있다. 클라이언트는 서버를 탐색해서 "이 설비에 어떤 값이 있는지" 를 물어볼 수 있다.

이 차이가 QA 의 작업 방식을 바꾼다. Modbus 설비는 매핑 문서가 곧 명세 이므로 문서 검증이 시험의 절반이다. OPC UA 설비는 서버가 스스로 명세를 말해 주므로 선언과 실제 값의 불일치 를 찾는 쪽에 무게가 간다.

Modbus — 레지스터 번호가 전부다

Modbus 는 오래된 단순한 프로토콜이다. 사양은 Modbus Organization(modbus.org) 이 배포하는 애플리케이션 프로토콜 사양 문서가 1차 출처다(사양 문서의 정확한 제목과 판본 번호 — 원문 확인). 직렬 회선 위에서 쓰는 방식(RTU·ASCII) 과 TCP/IP 위에서 쓰는 방식(Modbus TCP) 이 있고, 공장에서는 Modbus TCP 를 많이 본다.

데이터는 네 가지 영역으로 나뉜다. 현장에서 통용되는 이름으로 적으면 이렇다.

영역크기접근전형적 용도
코일(Coil)1비트읽기·쓰기출력 접점, 시작/정지 명령
디스크리트 입력1비트읽기 전용센서 접점, 상태 플래그
입력 레지스터16비트읽기 전용측정값
홀딩 레지스터16비트읽기·쓰기설정값, 파라미터

읽기와 쓰기는 기능 코드(function code) 로 구분되고, 읽기 계열과 쓰기 계열이 서로 다른 번호를 쓴다. 기능 코드 번호를 문서에 적을 때는 사양 원문이나 해당 설비의 통신 매뉴얼을 인용한다 — 외워서 적으면 틀린다.

Modbus 가 QA 에게 어려운 이유는 프로토콜이 아니라 표현 관습 때문이다.

  • 번지 체계가 두 가지다. 매뉴얼의 40001 같은 번호와 프로토콜이 실어 보내는 0 기준 오프셋이 1 만큼 다르다. 업체 A 는 1 기준, 업체 B 는 0 기준으로 적는다. 여기서 모든 값이 한 칸씩 밀린다
  • 16비트를 넘는 값은 레지스터 두 개를 쓴다. 32비트 정수나 부동소수점은 상위 워드와 하위 워드의 순서(워드 스왑) 가 설비마다 다르다. 순서를 틀리면 누설량 0.12 가 1.8e+28 로 읽힌다
  • 단위와 배율이 프로토콜 밖에 있다. 레지스터의 1250 이 12.50 kN 인지 1250 N 인지는 매핑 문서에만 있다

OPC UA — 정보 모델을 가진 주소 공간

OPC UA(OPC Unified Architecture) 는 OPC Foundation 이 만들고 국제 표준으로는 IEC 62541 계열로 발행된다(각 파트 번호와 대응 범위 — 원문 확인). Modbus 와 달리 통신 규칙만 정하지 않고, 데이터를 어떻게 구조화해 보여 줄지 까지 정한다.

QA 가 알아야 할 구성 요소만 추리면 이렇다.

  • 주소 공간과 노드 — 서버는 트리 형태의 주소 공간을 노출한다. 변수 노드에는 값·데이터 타입·접근 수준(읽기 전용/읽기 쓰기) 이 붙는다. 클라이언트가 탐색 (browse) 해서 목록을 받을 수 있으므로 "설비가 제공하는 값 목록" 을 문서 없이도 뽑아낼 수 있다
  • 세션과 보안 채널 — 접속은 끝점(endpoint) 선택 → 보안 채널 수립 → 세션 생성 순서다. 끝점 주소는 opc.tcp://192.0.2.10:4840 형태이고, 보안 정책에 따라 인증서 신뢰 설정이 양쪽에 모두 있어야 붙는다
  • 구독(subscription) — 값을 계속 읽는 대신 "바뀌면 알려 달라" 고 등록한다. 샘플링 주기(서버가 값을 들여다보는 간격), 발행 주기(모아 보내는 간격), 데드밴드(이만큼 안 변하면 안 보냄) 가 붙고, 이 세 설정이 "값이 늦게 온다/ 안 온다" 결함의 주범이다
  • 메서드 호출 — 변수 쓰기 외에 서버가 노출한 메서드를 호출할 수도 있다. "레시피 다운로드", "카운터 리셋" 이 메서드로 올라와 있으면 그 호출은 설비를 움직이는 명령 이다
  • 값에 붙는 품질 정보 — OPC UA 는 값과 함께 상태 코드, 소스·서버 타임스탬프를 준다. 값이 0 으로 고정인데 상태 코드가 통신 불량이면 생산이 0 인 게 아니라 값을 못 읽고 있는 것 이다. 값만 보면 이걸 구분할 수 없다

태그·주소 매핑이 틀렸을 때

제조 통합 시험에서 가장 흔하고 가장 조용한 결함이 매핑 오류다. 한빛정밀 라인을 예로 들어 어떤 식으로 드러나는지 보자.

조용한 유형 — 값이 그럴듯하다 OP30 리크 테스터의 누설량 레지스터를 한 칸 밀려 읽어, 실제로는 "시험 압력" 을 읽고 있었다. 둘 다 숫자이고 범위도 비슷해 화면에 이상이 없고, 불량 판정 임계값과 비교해도 대부분 통과한다. 몇 달 뒤 누설 불량품이 출하되고서 드러난다. 이 유형이 제조 QA 에서 가장 비싸다.

덜 조용한 유형 — 값이 이상하다 32비트 실수를 워드 순서 바꿔 읽어 유량이 3.4e+38 로 나온다. 금방 잡힌다.

가장 위험한 유형 — 쓰기 매핑이 틀렸다 MES 가 "불량 카운터 리셋" 을 쓰려던 주소가 실제로는 "컨베이어 속도 설정" 이었다. 읽기 매핑 오류는 데이터를 더럽히지만, 쓰기 매핑 오류는 설비를 잘못 움직인다.

매핑 검증은 그래서 다음 세 축으로 한다.

  1. 주소 정렬 — 매핑 문서의 모든 항목을 한 번씩 읽어, 설비 HMI 에 표시된 같은 항목과 눈으로 대조 한다. 전수로 한다 — 한 칸 밀림은 몇 개만 봐서는 안 보인다
  2. 타입·배율·단위 — 시뮬레이터에서 설비 쪽을 알려진 값으로 만들고, 읽은 값이 단위까지 맞는지 본다. 0, 음수, 최대값, 소수점 있는 값을 각각 본다
  3. 접근 권한 — 읽기 전용 항목에 쓰기를 시도했을 때 거부되는지 확인한다. 거부되지 않으면 그것 자체가 결함이다

읽기는 되는데 쓰기가 위험한 이유

이 절이 이 레슨의 핵심이다.

읽기는 설비 상태를 바꾸지 않는다. 틀려도 데이터가 틀릴 뿐이다. 반면 쓰기는 물리적 동작을 일으킨다. 산업용 프로토콜의 쓰기 명령은 실린더를 전진시키고 모터를 돌리고 프레스를 내린다. 사람이 설비 안에 손을 넣고 있을 수도 있다.

더 나쁜 것은 프로토콜 자체가 안전 장치를 제공하지 않는다 는 점이다.

  • Modbus 에는 "이 쓰기를 해도 안전한가" 를 묻는 단계가 없다. 번지와 값만 맞으면 쓰인다
  • OPC UA 는 인증·권한을 가질 수 있지만, 권한이 있는 계정으로 접속하면 쓰기가 허용된 노드에 그대로 쓴다. "지금 라인이 자동 운전 중인데 괜찮은가" 는 서버 쪽 로직이 막아 줘야 하는 일이고, 막아 주지 않는 설비도 많다
  • 안전 기능은 애초에 이 통신 경로에 없다. 비상정지와 인터락은 안전 PLC 의 안전 회로에 있다(l06). 통신으로 보내는 명령은 안전 기능이 아니다 — 통신이 잘못돼도 안전 회로가 사람을 지키도록 설계되는 것이지, 통신이 안전해서 지켜지는 게 아니다

그래서 규칙은 단순하다. 실설비에 쓰기를 보내는 행위는 QA 가 혼자 판단해서 할 수 없다. 승인과 안전 조건이 먼저다. 구체적인 절차는 아래에서 다룬다.

통신 품질 — 타임아웃·재시도·순서

프로토콜이 붙었다고 끝이 아니다. 공장 네트워크는 전기 노이즈, 설비 재부팅, 스위치 포트 불량, 케이블 접촉 불량을 상수로 가진다. 그래서 정상 상태가 아닌 구간에서의 거동 이 시험 대상이 된다.

  • 타임아웃 — 너무 길면 수집 주기가 밀려 뒤 요청이 쌓이고, 너무 짧으면 느린 설비를 끊어 버린다. 수집 주기 1초 에 타임아웃 5초 를 걸면 무슨 일이 생기는지 계산해 보면 바로 보인다
  • 재시도와 멱등성 — 읽기 재시도는 안전하다. 쓰기 재시도는 안전하지 않다. "생산 수량 1 증가" 를 재시도하면 2 가 될 수 있다. 재시도 가능한 쓰기는 "값을 이것으로 설정" 처럼 멱등한 형태여야 한다
  • 순서 — 레시피를 바꾸고 나서 시작을 거는 것처럼 순서를 지켜야 하는 쓰기 쌍에서, 프로토콜이 순서를 보장하는지 확인한다. 보장하지 않으면 애플리케이션의 몫이다
  • 끊김 후 복구 — OPC UA 구독은 재접속 시 놓친 알림을 어느 범위까지 복구하는가. 범위를 넘어 끊겼으면 데이터에 구멍이 생기고, MES 가 그 구멍을 "생산 없음" 으로 해석하면 실적이 틀어진다
  • 값이 안 변하는 것과 통신이 끊긴 것 — 하트비트 태그(설비가 1초마다 증가시키는 카운터) 로 구분한다. 하트비트가 멈추면 통신 불량, 하트비트는 도는데 생산 카운터만 멈췄으면 설비 정지다

QA 가 안전하게 시험하는 방법

산업 제어 시스템은 잘못 건드리면 사람이 다치고 설비가 깨진다. 아래는 타협 대상이 아니다.

1) 기본은 읽기 전용 접속이다 시험용 계정·접속은 읽기 전용으로 받는다. OPC UA 는 사용자 권한으로, Modbus 는 네트워크 수준 분리나 게이트웨이의 읽기 전용 설정으로 제한한다. 쓰기 권한이 있는 계정으로 "실수로" 쓰는 사고가 실제로 일어난다 — 권한 자체를 없애는 것이 가장 확실한 방어다.

2) 쓰기 시험은 시뮬레이터에서 먼저 끝낸다 l03 에서 다룰 시뮬레이터·소프트 PLC 가 쓰기 시험의 기본 환경이다. 매핑·타입· 배율·순서·재시도는 전부 시뮬레이터에서 검증할 수 있다. 실설비에 남는 몫은 "시뮬레이터로는 확인할 수 없는 것" 뿐이다.

3) 실설비 접속에는 선행 조건이 있다 실설비에 접속하거나 명령을 보내야 한다면, 최소한 다음이 모두 충족된 뒤에 한다.

  • 설비 담당자·생산 부서·안전 담당의 사전 승인 이 문서로 남아 있다
  • 라인이 정지 상태 이고, 필요한 경우 에너지 차단·시건(lockout/tagout) 이 적용돼 있다
  • 설비 가동 범위 안에 사람이 없음을 확인했고, 작업 구역이 표시돼 있다
  • 설비 담당자가 현장에 함께 있다. QA 가 원격에서 혼자 명령을 보내지 않는다
  • 비상정지 위치를 알고 있고 손이 닿는다
  • 되돌리는 방법이 정해져 있다(원래 설정값을 미리 기록해 둔다)
  • 시험 범위와 보낼 명령 목록이 사전에 합의 돼 있고, 목록에 없는 명령은 보내지 않는다

4) 시험 기록을 남긴다 언제, 누가, 어떤 주소에, 어떤 값을 썼는지 전부 기록한다. 설비 이상이 생겼을 때 "그때 시험한 것 때문인가" 를 가릴 유일한 근거다.

5) 보안은 이 레슨의 범위가 아니다 이 모듈은 침입·공격 기법을 다루지 않는다 — 산업 제어 네트워크 보안은 모듈 50 이 담당한다. 여기서 말하는 "안전하게" 는 사람과 설비가 상하지 않게 라는 뜻이다.

실무에서 왜 필요한가

설비 연동 결함은 운영에 들어가면 고치는 비용이 급격히 오른다. 라인이 돌고 있으면 PLC 프로그램을 고치려고 설비를 세울 수 없고 다음 보전 일정까지 기다려야 하는데, 그 사이의 데이터는 전부 의심스러운 상태로 쌓인다. 매핑 검증은 가동 전에 전수로 끝내는 것이 유일하게 싼 방법 이다.

프로토콜 이해는 결함 보고의 질도 바꾼다. "리크 값이 이상합니다" 는 돌려보내지고, "OP30 리크 테스터의 32비트 실수 워드 순서가 매핑 문서와 반대입니다 — 설비 HMI 는 0.12 cc/min, MES 수신값은 비정상적으로 큰 값" 은 그날 수정된다.

승인 절차를 아는 것도 실무 역량이다. 제조 조직에서 QA 가 신뢰를 잃는 가장 빠른 길은 허락 없이 설비를 건드리는 것 이다. 절차를 지키는 QA 가 결과적으로 더 많이 시험한다.

실습 과제

과제 1 — 매핑 문서 리뷰 (25분)

아래 매핑 표는 OP30 리크 테스터용으로 설비 업체가 준 문서라고 가정한다.

항목번지타입배율접근
설비 상태4000116비트 정수1읽기
누설량4000232비트 실수1읽기
판정 결과4000416비트 정수1읽기
시험 압력 설정4000516비트 정수0.01읽기·쓰기
누적 시험 횟수4000632비트 정수1읽기·쓰기
하트비트4000816비트 정수1읽기

이 문서만 보고 질문 목록 을 최소 10개 만든다. 번지 기준, 32비트 값의 워드 순서, 상태·판정 코드의 값 정의 표, 단위 누락, 쓰기 항목의 유효 범위, 하트비트 주기, 읽기 전용 항목에 쓰기를 시도했을 때의 거동이 출발점이다. 질문마다 그걸 모르고 연동하면 생기는 결과 를 한 줄 붙인다.

과제 2 — 통신 품질 시험 설계 (30분)

위 설비에 대해 비정상 구간 시험 케이스를 설계한다. 시뮬레이터 또는 문서상 설계 로만 한다 — 실설비를 쓰지 않는다.

  1. 다음 상황 6개의 "기대 결과" 를 먼저 쓴다 — 설비 전원 차단, 케이블 분리 후 재연결, 응답이 타임아웃보다 늦게 오는 경우, 쓰기 응답 유실로 재시도되는 경우, 하트비트만 멈춘 경우, 값은 오는데 상태 코드가 비정상인 경우
  2. 각 상황에서 MES 실적이 어떻게 돼야 옳은지 를 명시한다(구멍으로 남는가, 0 으로 채우는가, 보류 상태로 두는가)
  3. 수집 주기와 타임아웃 조합 3가지(1초/5초, 1초/0.5초, 5초/3초)에 대해 택트 22초 라인에서 어떤 문제가 생기는지 계산해 적는다

과제 3 — 접속 승인 요청서 쓰기 (20분)

실설비 OP30 에 읽기 전용으로 접속해 매핑 전수 대조를 하겠다는 승인 요청서를 한 장으로 쓴다. 목적, 권한 범위(읽기 전용임을 명시), 읽을 항목 목록, 소요 시간, 라인 상태 조건, 동석자, 중단 기준, 기록 방법이 들어간다. 그다음 같은 작업을 쓰기까지 포함 하는 버전으로 고쳐 쓰고, 두 문서의 차이를 비교해 적는다.

자가 체크리스트

  • Modbus 와 OPC UA 의 성격 차이를 "데이터에 의미가 붙어 있는가" 축으로 설명할 수 있다
  • Modbus 의 네 데이터 영역과 번지 기준(0/1)·워드 순서가 왜 결함 원인인지 설명할 수 있다
  • OPC UA 의 주소 공간·세션·구독·메서드가 각각 무엇인지 말할 수 있다
  • OPC UA 구독의 샘플링 주기·발행 주기·데드밴드가 값 지연에 미치는 영향을 안다
  • 값의 상태 코드와 타임스탬프를 함께 봐야 하는 이유를 설명할 수 있다
  • 읽기 매핑 오류와 쓰기 매핑 오류의 피해가 어떻게 다른지 구분해 말할 수 있다
  • 쓰기 재시도가 왜 위험하고 멱등성이 왜 필요한지 설명할 수 있다
  • 하트비트로 "설비 정지"와 "통신 두절"을 구분하는 방법을 안다
  • 실설비 접속·명령 송신의 선행 조건 7가지를 보지 않고 열거할 수 있다

흔한 실수

매핑 문서를 표본으로만 대조한다. 10개 중 3개를 보고 맞으니 통과시킨다. 한 칸 밀림은 특정 구간에서만 생기고, 조용한 유형은 값이 그럴듯해서 표본 검사로는 안 잡힌다. 전수 대조가 유일한 방법이다.

값만 보고 상태 코드를 안 본다. 생산 수량이 0 으로 고정된 것을 "오늘 생산이 없었다" 로 해석한다. 상태 코드와 타임스탬프를 같이 봤다면 통신 불량이었음을 바로 알 수 있었다.

쓰기 권한이 있는 계정으로 읽기 시험을 한다. "쓰기는 안 할 거니까" 라고 생각하다 도구의 자동 기능이나 오타로 쓰기가 나간다. 권한을 없애는 것이 조심하는 것보다 안전하다.

정상 구간만 시험하고 가동한다. 실제 결함은 전부 응답이 안 오는 상황에서 생긴다. 타임아웃·재시도·끊김 복구를 시험 계획에 처음부터 넣는다.

기능 코드 번호·IEC 파트 번호를 기억에 의존해 문서에 적는다. 사양서와 설비 매뉴얼을 인용한다. 확인 못 하면 "해당 설비 통신 매뉴얼 기준" 이라고 범위를 줄여 쓴다. 멱등하지 않은 쓰기에 자동 재시도를 걸어 두는 것도 같은 부류의 실수다 — 중복 계수가 생기고, 그 중복은 l04 의 실적 불일치로 나타난다.

통신 경로에 안전 기능이 있다고 가정한다. "MES 가 정지 명령을 보내면 설비가 멈추니 안전하다" 는 틀린 전제다. 안전 정지는 안전 회로의 일이다(l06).

참고 자료

  • OPC Foundation — OPC UA 사양과 companion specification 목록. 국제 표준 IEC 62541 계열로 발행된다(각 파트 번호와 범위는 IEC 웹스토어 원문 확인)
  • Modbus Organization(modbus.org) — Modbus 애플리케이션 프로토콜 사양과 TCP/IP 구현 가이드. 문서 제목·판본 번호는 공식 배포 문서 원문 확인
  • 연동 대상 설비의 통신 매뉴얼 — 번지·타입·배율의 실무 1차 출처는 표준이 아니라 이 문서다. 판본과 펌웨어 버전을 함께 기록한다
  • 모듈 46 레슨 2(UART·SPI·I2C) 는 프레임·설정 불일치 결함의 기초, 모듈 50 은 산업 제어 네트워크 보안을 담당한다

낯선 말 풀이

이 레슨에 나온 약어입니다. 본문에서도 처음 나올 때 점선으로 표시해 두었습니다 (제목과 링크 글자는 그대로 둡니다).

QA — 품질보증
만든 것이 쓸 만한지 확인하고, 애초에 덜 망가지게 만드는 방법을 정하는 일. "테스트"는 그 일의 일부다.
PLC — 프로그램 가능 제어기
공장 설비를 직접 움직이는 산업용 제어 장치.
TCP — 전송 제어 규약
데이터를 빠뜨리지 않고 순서대로 보내는 약속. 웹도 이 위에서 돌아간다.
IEC — 국제전기기술위원회
전기·전자 분야의 국제 규격을 만드는 단체.
MES — 제조 실행 시스템
공장에서 무엇을 얼마나 어떤 순서로 만들지 관리하는 시스템.
HMI — 사람-기계 인터페이스
설비를 사람이 조작하는 화면이나 조작판.
UART — 직렬 통신 장치
기기와 컴퓨터를 선으로 잇고 글자를 한 줄씩 주고받는 가장 단순한 통신 방식.

용어집 전체 보기