Modbus 레지스터 뷰어 Modbus
장치가 해석하는 방식으로 Modbus 레지스터를 디코딩합니다.
입력란에는 예제가 미리 채워져 있습니다. 확인하려는 값으로 수정하세요.
입력
비트 15 = MSB(왼쪽 위) · 비트 0 = LSB(오른쪽 아래) · 클릭하여 전환
출력
입력 — 연속된 레지스터 두 개
Modbus는 첫 번째 레지스터의 상위 바이트부터 전송합니다.
전송 순서에 따라 네 바이트를 A B C D라고
부르면 레지스터 1에는 AB,
레지스터 2에는 CD가 들어 있습니다. 오른쪽 표는
벤더가 사용하는 네 가지 바이트 순서 각각에서 32비트 값을
보여 줍니다.
레지스터 1(바이트 A B)
레지스터 2(바이트 C D)
출력 — 네 가지 바이트 순서
| 순서 | int32 | uint32 | float(IEEE-754) |
|---|---|---|---|
| ABCD | — | — | — |
| CDAB | — | — | — |
| BADC | — | — | — |
| DCBA | — | — | — |
ABCD는 워드 빅 엔디언 + 바이트 빅 엔디언으로, Modbus 표준에 명시된 순서입니다. CDAB는 레거시 장비에서 흔히 사용하는 "Modicon 워드 스왑" 형식입니다. BADC는 각 레지스터 안에서 바이트를 바꾸고, DCBA는 모든 순서를 뒤집습니다. 한 순서에서 float 값이 무의미하고 다른 순서에서 타당하게 보인다면 후자가 해당 벤더의 순서입니다.
입력
양방향으로 사용할 수 있습니다. 포인트 목록의 주소를 입력하거나, 표를 선택하고 통신선에서 확인한 오프셋을 입력하세요.
출력
1 차이가 생기는 이유
포인트 목록의 5자리 숫자는 문서 표기 규칙입니다. 첫째 자리는 표를 나타내고 나머지는 1부터 셉니다. 통신선으로 전송되는 요청에는 0부터 세는 16비트 오프셋이 들어갑니다. 따라서 "40001"은 홀딩 테이블 오프셋 0이고, 벤더 주소 43021은 FC03으로 오프셋 3020을 폴링합니다. 두 변화 모두 실수를 일으킵니다. 표 접두어를 빼먹으면 잘못된 종류의 포인트를 폴링하고, −1을 빼먹으면 모든 값이 레지스터 하나씩 어긋납니다. Modbus 디코딩에서 실제 프레임으로 이 함정을 설명합니다.
Modbus 핵심 사항
Modbus에서는 프로토콜 자체보다 되돌아온 값을 해석하려고 추가로 알아야 하는 미묘한 주의점 때문에 막히는 경우가 많습니다. 아래에는 통합 작업을 시작하기 전에 알아둘 만한 핵심 사항을 정리했습니다.
Modbus는 의도적으로 단순하게 설계되었습니다. 레지스터는 16비트일 뿐이며 그 비트가 무엇을 뜻하는지 알려 주는 메타데이터가 없습니다. 따라서 벤더 문서가 반드시 필요합니다.
- 레지스터 주소 오프셋. 벤더 문서의 "40001"은 통신선에서 홀딩 레지스터 0입니다. 4xxxx/3xxxx/1xxxx/0xxxx 5자리 번호는 통신선 주소가 아니라 문서 표기 규칙입니다. 여기서 1 차이 오류가 발생합니다.
- 부호 있음과 부호 없음. 원시 16비트 값 65535는 같은 비트로 −1을 나타낼 수도 있습니다. 의도에 따라 해석이 달라집니다. 단일 레지스터 탭의 전환 메뉴로 두 해석을 바꾸세요.
- 워드/바이트 순서. 32비트 float와 int32는 레지스터 두 개에 걸쳐 있으며 현장에는 네 가지 바이트 순서 (ABCD/CDAB/BADC/DCBA)가 존재합니다. 32비트 쌍 탭에서 네 값을 나란히 확인하고 타당한 값을 만드는 순서를 선택하세요.
- 읽기 FC03과 FC04. 홀딩 레지스터
(FC03)는 읽고 쓸 수 있고 입력 레지스터(FC04)는
읽기 전용입니다. 쓰기 FC06과 FC16.
FC06은 레지스터 하나, FC16은 여러 레지스터에 씁니다.
잘못된 FC →
illegal function(잘못된 기능)예외가 발생합니다. - 예외 응답은 FC의 상위 비트를 설정합니다.
FC
0x03요청에서 오류가 나면0x83(FC | 0x80)과 1바이트 예외 코드(0x02= illegal data address,0x03= illegal data value 등)가 돌아옵니다.
Modbus 기초에서는 데이터 표, 기능 코드, 요청 프레임, 예외 응답을 포함한 프로토콜 구조 전체를 설명합니다. Modbus 디코딩은 이 도움말의 주의점을 자세히 다루는 짝 학습 자료입니다. 5자리 레지스터 함정, 부호 있음/없음, 네 가지 바이트 순서, 스케일링을 설명합니다.
기능 코드
| FC | 16진수 | 기능 |
|---|---|---|
| 01 | 0x01 | 코일 읽기(Read Coils) |
| 02 | 0x02 | 이산 입력 읽기(Read Discrete Inputs) |
| 03 | 0x03 | 홀딩 레지스터 읽기(Read Holding Registers) |
| 04 | 0x04 | 입력 레지스터 읽기(Read Input Registers) |
| 05 | 0x05 | 단일 코일 쓰기(Write Single Coil) |
| 06 | 0x06 | 단일 레지스터 쓰기(Write Single Register) |
| 15 | 0x0F | 다중 코일 쓰기(Write Multiple Coils) |
| 16 | 0x10 | 다중 레지스터 쓰기(Write Multiple Registers) |
코일과 이산 입력은 1비트, 홀딩 레지스터와 입력 레지스터는 16비트이며 이 도구는 그중 하나를 표시합니다. 이산 입력과 입력 레지스터는 읽기 전용이고 코일과 홀딩 레지스터는 읽고 쓸 수 있습니다.