개념
설비와 대화하는 두 방식
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 가 "불량 카운터 리셋" 을 쓰려던 주소가 실제로는 "컨베이어 속도 설정" 이었다. 읽기 매핑 오류는 데이터를 더럽히지만, 쓰기 매핑 오류는 설비를 잘못 움직인다.
매핑 검증은 그래서 다음 세 축으로 한다.
- 주소 정렬 — 매핑 문서의 모든 항목을 한 번씩 읽어, 설비 HMI 에 표시된 같은 항목과 눈으로 대조 한다. 전수로 한다 — 한 칸 밀림은 몇 개만 봐서는 안 보인다
- 타입·배율·단위 — 시뮬레이터에서 설비 쪽을 알려진 값으로 만들고, 읽은 값이 단위까지 맞는지 본다. 0, 음수, 최대값, 소수점 있는 값을 각각 본다
- 접근 권한 — 읽기 전용 항목에 쓰기를 시도했을 때 거부되는지 확인한다. 거부되지 않으면 그것 자체가 결함이다
읽기는 되는데 쓰기가 위험한 이유
이 절이 이 레슨의 핵심이다.
읽기는 설비 상태를 바꾸지 않는다. 틀려도 데이터가 틀릴 뿐이다. 반면 쓰기는 물리적 동작을 일으킨다. 산업용 프로토콜의 쓰기 명령은 실린더를 전진시키고 모터를 돌리고 프레스를 내린다. 사람이 설비 안에 손을 넣고 있을 수도 있다.
더 나쁜 것은 프로토콜 자체가 안전 장치를 제공하지 않는다 는 점이다.
- 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 가 결과적으로 더 많이 시험한다.