Modbus 실수 변환기
Modbus 레지스터 2개·4개를 IEEE 754 float32·float64 와 int32·uint32 로 풀고, 실수를 레지스터 값으로 바꿉니다. ABCD·CDAB·BADC·DCBA 네 순서를 한 표로 비교합니다.
레지스터 → 값
| 순서 | 값 바이트 (높은 바이트 먼저) | float32 | int32 | uint32 |
|---|---|---|---|---|
| ABCD 빅 엔디언 (높은 워드 먼저) | ||||
| CDAB 워드 스왑 (낮은 워드 먼저) | ||||
| BADC 바이트 스왑 (레지스터 안 바이트 뒤집음) | ||||
| DCBA 리틀 엔디언 (워드·바이트 모두 뒤집음) |
장비 화면이나 매뉴얼에 나온 값과 같은 줄이 그 장비의 순서입니다.
값 → 레지스터
| 순서 | 레지스터 (HEX) | 레지스터 (10진) |
|---|---|---|
| ABCD 빅 엔디언 (높은 워드 먼저) | ||
| CDAB 워드 스왑 (낮은 워드 먼저) | ||
| BADC 바이트 스왑 (레지스터 안 바이트 뒤집음) | ||
| DCBA 리틀 엔디언 (워드·바이트 모두 뒤집음) |
계산은 이 브라우저 안에서만 하고, 입력한 값은 어디로도 보내지 않습니다.
순서가 장비마다 다른 이유
Modbus 규격은 레지스터 하나를 16비트로, 그 안의 두 바이트는 높은 바이트 먼저 보내도록만 정합니다(Modbus Application Protocol Specification V1.1b3, 4.2 절). 32비트·64비트 값을 레지스터 여러 개에 어떤 순서로 나눠 싣는지는 규격에 없습니다.
그래서 높은 워드를 앞 주소에 두는 장비(ABCD)와 낮은 워드를 앞 주소에 두는 장비(CDAB)가 함께 쓰이고, 레지스터 안 바이트까지 뒤집는 장비(BADC·DCBA)도 있습니다. 같은 제조사라도 모델이나 설정에 따라 다를 수 있습니다.
매뉴얼에서 확인하는 법
- 통신 매뉴얼의 레지스터 표에서 형식(Float, REAL, 32-bit floating point)과 «word order», «byte order», «high word first», «swap» 같은 말을 찾습니다.
- 순서를 설정 메뉴에서 고르는 장비도 있습니다. 통신 설정 항목을 함께 보세요.
- 적혀 있지 않으면 화면에 보이는 온도·전압처럼 아는 값을 읽어 위 표에서 그 값이 나오는 줄을 고릅니다. 0 이나 정수는 여러 순서에서 비슷해 보일 수 있으니 소수점이 있는 값으로 확인하세요.
32비트 값은 이어진 두 주소를 한 번에 읽어야 합니다(개수 2). 주소가 한 칸 밀리면 다른 값의 절반이 섞이니 40001 표기와 0 기준 주소 도 확인하세요. 읽기 요청 바이트는 Modbus RTU 요청 만들기로 만들 수 있습니다.
자주 묻는 것
41C8 0000 은 얼마인가요?
ABCD 순서로 읽으면 25.0 입니다. IEEE 754 binary32 는 부호 1비트, 지수 8비트(바이어스 127), 가수 23비트입니다. 0x41C80000 은 부호 0, 지수 131(2⁴), 가수 1.5625 라서 1.5625 × 16 = 25 가 됩니다.
값이 아주 작거나(1E-38 근처) 엄청 큰 수로 나옵니다
순서가 틀렸을 때 흔히 보이는 모양입니다. 표의 다른 줄을 보세요. 어느 줄도 맞지 않으면 시작 주소가 한 칸 어긋나지 않았는지 확인하세요.
float64(double)는 어떻게 읽나요?
레지스터 4개를 넣으면 float64·int64·uint64 로 풉니다. 같은 규칙을 64비트에 적용해 CDAB 는 레지스터 네 개의 순서를 거꾸로, BADC 는 레지스터마다 바이트를 바꿉니다. 다른 배치를 쓰는 장비도 있을 수 있으니 매뉴얼을 확인하세요.
NaN 이나 Infinity 가 나옵니다
IEEE 754 에서 지수 비트가 모두 1 이면 가수가 0 일 때 무한대, 아니면 NaN 입니다. 순서가 틀렸거나 장비가 일부러 보낸 값일 수 있으니 매뉴얼에서 오류 값 규칙을 보세요.
장비에서 레지스터를 직접 읽어 보려면 PortDock Modbus Master.