Modbus-RTU address map
모드버스는 슬레이브 장치의 메모리 맵 구성에 따라 읽기·쓰기하여 통신하는 방식입니다. 모드버스 메모리 맵은 코일과 레지스터로 구성되며 메모리 번호에 따라 크기와 접근 방법이 다릅니다. 코일은 비트, 레지스터는 2 바이트 워드로 생각하면 이해하기 쉬운데요, 코일과 레지스터는 읽기·쓰기 모두 되는 영역과 읽기만 가능한 영역으로 나뉩니다.
▲ 모드버스 메모리 맵 영역에 따라 코일·레지스터의 번호 구분과 제어 함수 번호를 정리한 테이블입니다.
어드레스 지정 시 주의 사항
▲ 서버로 요청하는 모드버스 RTU 프로토콜의 패킷 구성입니다. 메모리 맵에 따라 함수 번호와 주소를 지정해야 하는데, Holding Register 값을 읽겠다고 해서 30001, 30002처럼 만 단위의 값을 지정하지 않습니다. 함수 번호에 따라 영역이 구분되어 있으므로 단 단위 숫자를 사용하는데, 문제는 0번부터 시작하는지, 1번부터 인지는 장비마다 다릅니다.
모드버스 메모리 맵 테이블의 영역별 번호 시작은 1, 10001, 30001, 40001로 시작하고 있어서 단 단위가 1로 시작하지만, 그렇다고 Holding Register 30001의 주소가 1이라는 보장이 없습니다. 제가 경험한 장비 모두 30001의 주소는 0이었습니다. 즉, 대부분이 0번부터 시작하는데요, 그러나 1로 시작하는 장비가 없다고는 할 수 없어서 값이 이상하다 싶으면 주소의 시작 번호를 의심해 보세요.
▲ 이런 혼란을 피하기 위하여 친절한 장비는 레지스터 번호와 함께 주소 번호도 정리해서 제공합니다. 위 테이블처럼 레지스터마다의 포맷도 알려 준다면 더욱 감사하지요.
'컴퓨터 > 프로그래밍' 카테고리의 다른 글
모드버스 통신 테스트 프로그램 추천 (9) | 2021.08.15 |
---|---|
TCP/IP 전송 버퍼 빈 용량 확인하는 방법 (0) | 2021.07.23 |
나도 프로그래머 크로미움 웹브라우저 만들기 (4) | 2021.07.18 |