Modbus 레지스터 뷰어 Modbus

장치가 해석하는 방식으로 Modbus 레지스터를 디코딩합니다.
10진수, 16진수, 2진수, 부호 있음/없음, 개별 비트를 표시하며 어느 하나를 변경하면 모두 함께 갱신됩니다. 단일 레지스터에서는 비트를 직접 전환하거나 10진수 또는 16진수 값을 입력할 수 있습니다. 32비트 쌍에서는 연속된 레지스터 두 개를 받아 벤더가 사용하는 네 가지 바이트 순서에서 int32/uint32/float 값을 모두 보여 줍니다. float 값이 타당하게 보이는 순서가 해당 장치의 순서입니다. Modbus가 처음이라면 Modbus 기초에서 프로토콜 구조를 읽은 다음, Modbus 디코딩에서 이 탭과 관련된 주의점을 확인하세요.

입력란에는 예제가 미리 채워져 있습니다. 확인하려는 값으로 수정하세요.

비트 15 = MSB(왼쪽 위) · 비트 0 = LSB(오른쪽 아래) · 클릭하여 전환

화면이 좁으면 격자가 4×4로 바뀌며 상위 바이트/하위 바이트 경계는 2행과 3행 사이로 이동합니다.
10진수 —
16진수 —
2진수 —

Modbus는 첫 번째 레지스터의 상위 바이트부터 전송합니다. 전송 순서에 따라 네 바이트를 A B C D라고 부르면 레지스터 1에는 AB, 레지스터 2에는 CD가 들어 있습니다. 오른쪽 표는 벤더가 사용하는 네 가지 바이트 순서 각각에서 32비트 값을 보여 줍니다.

레지스터 1(바이트 A B)

레지스터 2(바이트 C D)

순서int32uint32float(IEEE-754)
ABCD———
CDAB———
BADC———
DCBA———

ABCD는 워드 빅 엔디언 + 바이트 빅 엔디언으로, Modbus 표준에 명시된 순서입니다. CDAB는 레거시 장비에서 흔히 사용하는 "Modicon 워드 스왑" 형식입니다. BADC는 각 레지스터 안에서 바이트를 바꾸고, DCBA는 모든 순서를 뒤집습니다. 한 순서에서 float 값이 무의미하고 다른 순서에서 타당하게 보인다면 후자가 해당 벤더의 순서입니다.

양방향으로 사용할 수 있습니다. 포인트 목록의 주소를 입력하거나, 표를 선택하고 통신선에서 확인한 오프셋을 입력하세요.

통신선 오프셋 —
읽기 기능 —
— —

포인트 목록의 5자리 숫자는 문서 표기 규칙입니다. 첫째 자리는 표를 나타내고 나머지는 1부터 셉니다. 통신선으로 전송되는 요청에는 0부터 세는 16비트 오프셋이 들어갑니다. 따라서 "40001"은 홀딩 테이블 오프셋 0이고, 벤더 주소 43021은 FC03으로 오프셋 3020을 폴링합니다. 두 변화 모두 실수를 일으킵니다. 표 접두어를 빼먹으면 잘못된 종류의 포인트를 폴링하고, −1을 빼먹으면 모든 값이 레지스터 하나씩 어긋납니다. 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자리 레지스터 함정, 부호 있음/없음, 네 가지 바이트 순서, 스케일링을 설명합니다.

기능 코드

FC16진수기능
010x01코일 읽기(Read Coils)
020x02이산 입력 읽기(Read Discrete Inputs)
030x03홀딩 레지스터 읽기(Read Holding Registers)
040x04입력 레지스터 읽기(Read Input Registers)
050x05단일 코일 쓰기(Write Single Coil)
060x06단일 레지스터 쓰기(Write Single Register)
150x0F다중 코일 쓰기(Write Multiple Coils)
160x10다중 레지스터 쓰기(Write Multiple Registers)

코일과 이산 입력은 1비트, 홀딩 레지스터와 입력 레지스터는 16비트이며 이 도구는 그중 하나를 표시합니다. 이산 입력과 입력 레지스터는 읽기 전용이고 코일과 홀딩 레지스터는 읽고 쓸 수 있습니다.

← 모든 도구