Modbus 프레임 해석기
Modbus RTU·TCP 프레임의 HEX 를 붙여 넣으면 국번·함수·주소·값·CRC 와 MBAP 머리, 예외 코드까지 풀어 줍니다. 레지스터 값은 10진·HEX·40001 표기 표로 보여 줍니다.
자주 묻는 것
RTU 와 TCP 는 어떻게 가리나요?
끝 2바이트가 CRC16 Modbus 와 맞으면 RTU 로, 앞 7바이트의 프로토콜 ID 가 0 이고 길이 칸이 뒤에 오는 바이트 수와 같으면 Modbus TCP 로 봅니다. 둘 다 아니면 CRC 가 틀린 RTU 로 풀고, 올바른 CRC 를 함께 보여 줍니다. 형식은 직접 고를 수도 있습니다.
왜 요청과 응답 두 해석이 나오나요?
프레임 안에는 방향 표시가 없어서 길이와 바이트 수로 가립니다. 함수 01·02 에서 바이트 수가 3 인 응답은 요청과 길이가 같고(RTU 8바이트), 함수 17 도 모양이 둘 다 맞을 수 있습니다. 이럴 때는 두 해석을 다 보여 주니 앞뒤 프레임으로 고르세요. 함수 05·06 의 정상 응답은 요청을 그대로 되돌립니다.
주소 0 과 40001 은 무엇이 다른가요?
프레임에 실리는 주소는 0 기준입니다. 40001 은 «보유 레지스터 4xxxx 의 1번째» 를 뜻하는 표기라서 프레임에는 00 00 으로 실립니다. 코일은 0xxxx, 입력 접점은 1xxxx, 입력 레지스터는 3xxxx 입니다.
코일 응답 끝에 0 이 더 붙어 있습니다
비트 값은 바이트 단위로 보내고 마지막 바이트의 남는 비트는 0 으로 채웁니다. 요청한 개수만큼만 읽으세요.
예외 코드
| 코드 | 이름 | 뜻 |
|---|---|---|
| 01 | Illegal Function | 장비가 이 함수 코드를 지원하지 않거나 지금 상태에서 처리할 수 없습니다. |
| 02 | Illegal Data Address | 요청한 주소(또는 시작 주소+개수 범위)가 장비에 없습니다. |
| 03 | Illegal Data Value | 요청에 담긴 값이 허용되지 않습니다(개수·바이트 수 같은 요청 모양 포함). |
| 04 | Server Device Failure | 요청을 처리하는 동안 장비에서 복구할 수 없는 오류가 났습니다. |
| 05 | Acknowledge | 요청은 받았고 처리에 시간이 걸립니다. 끝났는지는 나중에 다시 물어야 합니다. |
| 06 | Server Device Busy | 장비가 오래 걸리는 명령을 처리 중입니다. 나중에 다시 보내야 합니다. |
| 07 | — | Application Protocol V1.1b3 에 정의되지 않은 코드입니다. |
| 08 | Memory Parity Error | 파일 레코드 읽기·쓰기(함수 0x14·0x15)에서 메모리 패리티 오류가 났습니다. |
| 09 | — | Application Protocol V1.1b3 에 정의되지 않은 코드입니다. |
| 0A | Gateway Path Unavailable | 게이트웨이가 대상 장비로 가는 경로를 잡지 못했습니다(설정 오류·과부하). |
| 0B | Gateway Target Device Failed to Respond | 게이트웨이 뒤의 대상 장비가 응답하지 않았습니다. |
Modbus Application Protocol Specification V1.1b3 7장 기준. 07·09 는 이 판에 정의되지 않았습니다.
근거
- Modbus Application Protocol Specification V1.1b3 — 함수 코드·요청/응답 모양·개수 한도·예외 코드
- Modbus over Serial Line Specification and Implementation Guide V1.02 — RTU 프레임·국번(0 브로드캐스트, 1~247)·CRC
- Modbus Messaging on TCP/IP Implementation Guide V1.0b — MBAP 머리(트랜잭션·프로토콜·길이·유닛 ID)
바이트 하나하나의 풀이는 가이드 Modbus RTU 프레임 읽는 법, 주소 표기는 Modbus 주소 표기(0 기준·40001) 를 보세요.
장비와 주고받는 통신을 줄마다 풀어 보려면 PortDock Modbus Master.