MC 프로토콜(SLMP) 응답의 종료 코드가 0000 이면 완료, 아니면 오류입니다. 오류 응답에는 값 대신 «오류 정보» 가 붙습니다. 이 글은 오류가 났을 때 보는 순서와, PortDock PLC Simulator 가 쓰는 C050~C061 코드마다 요청에서 고칠 곳을 정리합니다.
1. 응답이 왔는가
응답 자체가 없으면 종료 코드 문제가 아닙니다. 연결(주소·포트·방화벽), 프레임(3E/4E)과 데이터 코드(이진/ASCII)가 받는 쪽과 같은지, 감시 타이머·클라이언트 시간 초과를 먼저 봅니다. PortDock PLC Simulator 는 형식이 다른 프레임에 답하지 않고 «IGNORED» 줄만 남깁니다.
2. 종료 코드 읽기
| 형식 | 종료 코드 자리 | C059 의 모양 |
|---|---|---|
| 3E 이진 | 10~11번째 바이트(작은 자리 먼저) | 59 C0 |
| 4E 이진 | 14~15번째 바이트 | 59 C0 |
| 3E ASCII | 19~22번째 글자 | C059 |
| 4E ASCII | 27~30번째 글자 | C059 |
이진에서는 «59 C0» 를 뒤집어 C059 로 읽습니다. 이 자리를 잘못 잡아 «C059» 를 «59C0» 으로 찾으면 매뉴얼 표에서 찾을 수 없습니다.
3. 오류 정보로 어느 요청인지 보기
종료 코드 뒤 9바이트(ASCII 18글자)는 요청의 네트워크 번호·PC 번호·I/O 번호·국번과 명령·서브명령입니다. 예: «… 0B 00 59 C0 00 FF FF 03 00 01 01 00 00» 은 명령 0101·서브명령 0000 요청이 C059 로 거절됐다는 뜻입니다. 요청을 여러 개 보내는 프로그램은 이 칸으로 어느 요청인지 맞춥니다(4E 면 일련번호도).
4. 코드마다 볼 곳
| 코드 | 뜻 | 요청에서 볼 곳 |
|---|---|---|
| C050 | ASCII 변환 불가 | ASCII 코드에 16진이 아닌 글자가 있음, 10진 디바이스(D·M 등) 번호에 A~F |
| C051 | 점 수 범위 밖(워드) | 일괄 읽기·쓰기 워드 점 수가 0 이거나 960 초과 — 나눠서 읽기 |
| C052 | 점 수 범위 밖(비트) | 비트 점 수가 0 이거나 이진 7168·ASCII 3584 초과 |
| C053 | 랜덤 점 수 범위 밖(비트) | 1402 비트 점 수가 0 이거나 188(서브 0003 은 94) 초과 |
| C054 | 랜덤 점 수 범위 밖(워드) | 0403 은 워드 + 더블워드 점 수 합이 0 이거나 192(0002 는 96) 초과, 1402 는 워드×12 + 더블워드×14 가 1920(0002 는 960) 초과 |
| C056 | 주소 범위 밖 | 디바이스 크기를 넘는 번호. 비트 디바이스를 워드 단위로 읽으면 1워드 = 16점이라 끝 번호가 빨리 커짐. X·Y 번호를 16진으로 보냈는지 |
| C057 | 요청 길이 불일치 | 머리의 요청 데이터 길이 = 감시 타이머부터 끝까지의 바이트 수(ASCII 는 글자 수) |
| C059 | 명령·서브 명령 틀림 | 명령·서브명령 값과 바이트 순서(이진 0401 은 01 04). 받는 쪽이 지원하는 명령인지 |
| C05B | 디바이스 지정 틀림 | 디바이스 코드 오타, 워드 디바이스(D 등)를 비트 단위(서브 0001)로 요청 |
| C05C | 요청 데이터 틀림 | PortDock PLC Simulator 에서는 루프백 데이터 수가 1~960 밖(0.6.0 부터 원격 조작의 모드 값이 틀릴 때도) |
| C05D | 모니터 등록 전 실행 | 모니터 등록(0801)을 먼저 보냈는지 — PortDock PLC Simulator 는 0.6.0 부터 |
| C05F | 접근 대상 틀림 | 국 정보(네트워크·PC·I/O·국번). PortDock PLC Simulator 는 «자기 국 요청만 받기» 를 켰을 때만 |
| C060 | 비트 값 틀림 | 비트 쓰기 값이 0·1 이 아님 — 이진 비트 쓰기는 1점이 4비트(«11 00» = ON ON OFF OFF) |
| C061 | 데이터 길이 불일치 | 쓰기 값의 개수가 점 수와 맞지 않음, 명령 데이터 뒤에 남는 바이트 |
뜻은 MELSEC iQ-R Ethernet User's Manual (Application) SH-081257ENG 3.5 «List of Error Codes» 의 설명을 줄인 것이고, «요청에서 볼 곳» 은 PortDock PLC Simulator 가 그 코드를 내는 조건입니다. 실제 PLC·통신 모듈은 같은 잘못에 다른 코드를 낼 수 있습니다. 이 표에 없는 코드는 그 PLC·모듈 매뉴얼의 오류 코드 목록에서 찾습니다.
5. 오류 처리를 미리 시험하기
- PortDock PLC Simulator 의 장애 주입 «종료 코드로 답함» 으로 원하는 코드(목록 또는 16진 직접 입력)를 일부러 돌려받을 수 있습니다. 이때 쓰기는 반영하지 않습니다.
- 명령·디바이스·N번째마다·확률로 대상을 좁히면, 여러 요청 중 하나만 실패할 때 프로그램이 어떻게 하는지 볼 수 있습니다.
- 자기 프로그램이 종료 코드와 오류 정보의 명령을 기록에 남기는지, 화면에 무엇을 보이는지 확인해 둡니다.
받은 응답을 웹 도구 «MC 프로토콜(SLMP) 프레임 해석기» 에 붙여 넣으면 종료 코드와 오류 정보를 칸마다 풀어 줍니다. 요청을 넣으면 PortDock PLC Simulator 가 어떤 종료 코드로 답할지도 보여 줍니다.
이 글은 미쓰비시 전기의 공개 매뉴얼(SLMP·MC 프로토콜)을 기준으로 썼으며, 제휴 관계가 아닙니다.
근거
- SLMP Reference Manual SH(NA)-080956ENG — 4장 메시지 형식(머리·길이·종료 코드·오류 정보), 5.2 디바이스 코드와 0401·1401·0403·1402, 5.9 루프백
- MELSEC Communication Protocol Reference Manual SH-080008 — 5장 이더넷 메시지(3E·4E 프레임)
- MELSEC iQ-R Ethernet User's Manual (Application) SH-081257ENG — 3.5 List of Error Codes — C050~C061 의 뜻
작성 2026-10-29