HMI 화면, 데이터 수집 프로그램, 상위 프로그램이 PLC 값을 MC 프로토콜(SLMP)로 읽고 쓰게 만들 때, PLC 가 오기 전에도 통신 부분은 시험할 수 있습니다. PortDock PLC Simulator 는 PC 가 PLC 의 이더넷 포트처럼 MC 프로토콜 요청에 답하게 하는 무료 윈도우 프로그램입니다. 이 글은 같은 PC 에서 자기 프로그램과 시뮬레이터를 127.0.0.1 로 잇는 순서와, 처음에 자주 막히는 곳을 정리합니다.
1. 시뮬레이터 설정
| 설정 | 고를 것 |
|---|---|
| 연결 방식 | TCP 서버(클라이언트 여러 개, 최대 64) 또는 UDP — 자기 프로그램이 쓰는 쪽 |
| 프레임 | 3E(서브헤더 5000) 또는 4E(5400 + 일련번호) — 자기 프로그램과 같게 |
| 데이터 코드 | 이진 또는 ASCII — 자기 프로그램과 같게 |
| 묶을 주소 | 127.0.0.1(기본) — 이 PC 안의 프로그램만 붙습니다 |
| 포트 | 기본 5000. 이 프로그램의 기본값일 뿐이고, 매뉴얼은 포트를 정해 두지 않습니다(PLC 쪽 설정에서 정함) |
가운데 위에서 디바이스 D 를 고르고 D100~D102 에 값을 넣은 뒤 «시작»(F4)을 누릅니다. 값은 시작 전에 넣어도 되고, 시작한 동안 바꾸면 다음 요청부터 그 값으로 답합니다.
2. 자기 프로그램 설정
- 접속 주소 127.0.0.1, 포트 5000(시뮬레이터에 적은 값).
- 프레임(3E/4E)과 데이터 코드(이진/ASCII)를 시뮬레이터와 똑같이 맞춥니다. 다르면 시뮬레이터는 답하지 않습니다.
- 국 정보: 네트워크 번호 00, PC 번호 FF, 요청 대상 모듈 I/O 번호 03FF, 국번 00 — 연결된 국 자신을 뜻합니다. 시뮬레이터는 기본으로 어느 국 요청이든 답하고, 응답 머리에 요청의 국 정보를 그대로 돌려줍니다.
- 감시 타이머는 0.25 s 단위입니다(0010 = 4 s). 시뮬레이터는 이 값을 읽기만 하고 바로 답합니다.
3. 첫 요청 — D100 부터 3워드 읽기
50 00 00 FF FF 03 00 0C 00 10 00 01 04 00 00 64 00 00 A8 03 00
3E 이진의 일괄 읽기(0401) 요청입니다. 칸마다의 뜻은 «MC 프로토콜 3E 이진 프레임 읽는 법» 에 있습니다. 시뮬레이터의 D100~D102 에 0x1995·0x1202·0x1130 을 넣어 두었다면 응답은 이렇습니다.
D0 00 00 FF FF 03 00 08 00 00 00 95 19 02 12 30 11
종료 코드 00 00(완료) 뒤에 값이 작은 자리 바이트부터 붙습니다. 같은 요청을 ASCII 로 보내면 «500000FF03FF000018001004010000D*0001000003» 입니다. 시뮬레이터의 통신 기록에는 «0401 일괄 읽기 (워드) D100 ×3», «종료 0000 완료 · 6바이트» 같은 풀이가 붙습니다.
- 자기 프로그램이 아직 없으면 PortDock TCP 의 클라이언트로 위 바이트를 HEX 로 보내 응답을 볼 수 있습니다.
- 자기 프로그램이 보낸 바이트가 맞는지 보려면 웹 도구 «MC 프로토콜(SLMP) 프레임 해석기» 에 붙여 넣습니다. 머리 칸과 명령 데이터를 풀고, 시뮬레이터가 어떤 종료 코드로 답할지도 보여 줍니다.
흔한 실수
| 증상 | 볼 것 |
|---|---|
| 접속이 안 됨 | 시뮬레이터를 시작했는지, 포트가 같은지. 127.0.0.1 은 같은 PC 에서만 붙습니다. 다른 PC 의 HMI 라면 «다른 PC 에서 연결 허용 (0.0.0.0)» 을 켜고 윈도우 방화벽에서 이 프로그램을 허용합니다 |
| «포트가 이미 사용 중» | 다른 프로그램(또는 다른 PortDock 창)이 그 포트를 씁니다 |
| 요청은 들어오는데(RX) 응답이 없음 | EV 줄에 «IGNORED» 가 있으면 3E/4E 또는 이진/ASCII 가 서로 다릅니다. 장애 주입 «응답 안 함» 이 켜져 있지 않은지도 봅니다 |
| TCP 와 UDP 를 섞음 | 자기 프로그램이 UDP 로 보내면 시뮬레이터 연결 방식도 UDP 여야 합니다 |
| 종료 코드 C057 | 머리의 요청 데이터 길이가 실제와 다릅니다. 길이는 감시 타이머부터 끝까지의 바이트 수(ASCII 는 글자 수)입니다 |
| 종료 코드 C059 | 시뮬레이터에 없는 명령·서브명령입니다(구현: 0401·1401·0403·1402·0619, 0.6.0 부터 0406·1406 블록·0801·0802 모니터·1001~1006 원격 조작·0101 형명 읽기도) |
| 종료 코드 C056 | 디바이스 크기(점 수)를 넘는 번호입니다. 시뮬레이터 «크기(점)» 를 늘립니다 |
| 종료 코드 C05F | «자기 국 요청만 받기» 를 켰는데 국 정보가 00·FF·03FF·00 이 아닙니다 |
| 32비트·실수 값이 이상함 | 번호가 작은 워드가 아래 자리입니다(D200 아래, D201 위). 시뮬레이터 «칸 설정» 의 순서 기본값은 CDAB |
| X·Y 값이 엉뚱한 칸에 나옴 | X·Y·B·W·ZR 는 16진 번호입니다(X10 은 X0 부터 17번째) — 디바이스 번호 표기 글 |
오류 처리도 시험하기
- «응답 지연(ms)»: 응답을 늦게 보내 시간 초과 설정을 봅니다. «지연 최대» 를 넣으면 요청마다 그 사이에서 아무렇게나 늦춥니다.
- «응답 안 함»: 요청은 처리하고(쓰기는 반영) 응답만 보내지 않습니다 — 시간 초과·재시도 처리 시험.
- «종료 코드로 답함»: 고른 종료 코드로 답합니다. 이때 쓰기는 반영하지 않습니다.
- 명령·디바이스·N번째마다·확률로 대상을 좁힐 수 있습니다. 장애 주입은 켤 때마다 꺼진 채로 시작합니다.
시뮬레이터로 알 수 없는 것
PortDock PLC Simulator 는 공개 매뉴얼의 메시지 형식으로만 만들었고 실기와 견주지 않았습니다. 래더 프로그램은 돌리지 않으며, 오류 코드·응답 시간·연결 수 제한·기종별 디바이스 범위는 실제와 다를 수 있습니다. 통신 부분을 미리 맞춰 두는 도구로 쓰고, 마지막 시험은 실제 PLC 로 합니다. 공장망에서 실제 PLC 와 같은 IP·포트로 띄우지 마세요 — 실제 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