MC 프로토콜(SLMP) 요청은 디바이스를 «디바이스 코드 + 번호» 로 지정합니다. 그런데 번호의 진법이 디바이스마다 다릅니다. X·Y·B·W·ZR 는 번호를 16진으로 쓰고, M·L·F·SM·D·R·SD 와 타이머·카운터는 10진으로 씁니다. 이걸 놓치면 값이 엉뚱한 칸에서 읽히거나 C050·C056 오류가 납니다.
같은 «100» 이 프레임에 실리는 모양
| 표기 | 번호(10진) | 이진 번호 3바이트 | ASCII 코드 + 번호 6자리 |
|---|---|---|---|
| D100 | 100 | 64 00 00 | D*000100 |
| W100 | 256 | 00 01 00 | W*000100 |
| X1F | 31 | 1F 00 00 | X*00001F |
| X20 | 32 | 20 00 00 | X*000020 |
| ZR10 | 16 | 10 00 00 | ZR000010 |
ASCII 에서는 번호를 «그 디바이스의 진법 글자» 로 씁니다 — «000100» 이 D 면 100번, W 면 256번입니다. 이진에서는 번호 값을 그대로 3바이트(작은 자리 먼저)로 보내므로 D100 은 64 00 00, W100 은 00 01 00 입니다. 10진 디바이스 번호에 A~F 를 쓰면 PortDock PLC Simulator 는 C050 으로 답합니다. ASCII 번호 앞자리 0 대신 공백을 써도 받습니다(«D 7»).
X·Y 를 10진·8진으로 세는 실수
- X10 은 10번째 입력이 아니라 X0 부터 세어 17번째입니다(16진 10 = 16).
- 16진이라서 X17 다음은 X18, X19, X1A … X1F, 그다음이 X20 입니다. 8진처럼 X17 다음을 X20 으로 세면 X18~X1F 8점을 건너뛰고, 10진처럼 세면 X1A~X1F 를 빠뜨립니다.
- 프로그램에서 «X20» 같은 글을 번호로 바꿀 때 10진으로 읽으면 20 이 되어 실제 번호 32 와 어긋납니다. 디바이스마다 16진·10진을 갈라 읽으세요.
- PLC 시리즈·프로그래밍 도구에 따라 X·Y 를 8진으로 표기하는 경우가 있습니다. 쓰는 PLC 의 매뉴얼에서 X·Y 번호 표기와 통신에서 지정하는 방법을 확인하세요. 이 글과 PortDock PLC Simulator 는 SLMP 디바이스 표의 16진 표기를 따릅니다.
비트 디바이스를 워드로 읽을 때 — 16점
서브명령 0000(워드 단위)으로 비트 디바이스를 읽으면 1워드가 16점이고, 번호가 작은 점이 비트 0 입니다. X20 1워드는 X20~X2F, M100 1워드는 M100~M115 — M 은 10진이라 끝 번호 계산이 다릅니다. 2워드를 읽으면 32점이 오므로, 디바이스 끝에 가까운 번호에서는 범위를 넘기 쉽습니다(C056).
32비트 값 — 번호가 작은 워드가 아래 자리
D200·D201 에 32비트 값을 두면 D200 이 아래 16비트, D201 이 위 16비트입니다. 랜덤 읽기(0403)의 더블워드 점 D1500 은 D1500~D1501 을 읽고, 이진 응답 «4E 4F 54 4C» 는 0x4C544F4E 입니다. Modbus 의 워드 순서로 말하면 CDAB 이고, PortDock PLC Simulator 의 «칸 설정» 순서 기본값도 CDAB 입니다.
타이머·카운터
타이머는 TS(접점)·TC(코일)·TN(현재값), 카운터는 CS(접점)·CC(코일)·CN(현재값)으로 나뉩니다. 접점·코일은 비트 디바이스, 현재값은 워드 디바이스라서 TN·CN 을 비트 단위로 읽으면 C05B 입니다.
디바이스 코드 표(PortDock PLC Simulator 가 다루는 18종)
| 디바이스 | 이진 코드 | ASCII 코드 | 번호 | 종류 |
|---|---|---|---|---|
| X 입력 | 9C | X* | 16진 | 비트 |
| Y 출력 | 9D | Y* | 16진 | 비트 |
| M 내부 릴레이 | 90 | M* | 10진 | 비트 |
| L 래치 릴레이 | 92 | L* | 10진 | 비트 |
| F 어넌시에이터 | 93 | F* | 10진 | 비트 |
| B 링크 릴레이 | A0 | B* | 16진 | 비트 |
| SM 특수 릴레이 | 91 | SM | 10진 | 비트 |
| D 데이터 레지스터 | A8 | D* | 10진 | 워드 |
| W 링크 레지스터 | B4 | W* | 16진 | 워드 |
| R 파일 레지스터 | AF | R* | 10진 | 워드 |
| ZR 파일 레지스터(연번) | B0 | ZR | 16진 | 워드 |
| SD 특수 레지스터 | A9 | SD | 10진 | 워드 |
| TS·TC·TN 타이머 접점·코일·현재값 | C1·C0·C2 | TS·TC·TN | 10진 | 비트·비트·워드 |
| CS·CC·CN 카운터 접점·코일·현재값 | C4·C3·C5 | CS·CC·CN | 10진 | 비트·비트·워드 |
서브명령 0002·0003 에서는 이진 코드가 2바이트(예: A8 00), ASCII 코드가 4글자(예: «D***»), 번호가 8자리입니다. 표에 없는 디바이스(롱 타이머·인덱스 레지스터 등)는 PortDock PLC Simulator 가 C05B 로 답합니다. 디바이스마다의 번호 범위는 기종마다 다르므로 쓰는 PLC 의 매뉴얼을 봅니다.
이 글은 미쓰비시 전기의 공개 매뉴얼(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