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로 시작하는 장비가 없다고는 할 수 없어서 값이 이상하다 싶으면 주소의 시작 번호를 의심해 보세요.
▲ 이런 혼란을 피하기 위하여 친절한 장비는 레지스터 번호와 함께 주소 번호도 정리해서 제공합니다. 위 테이블처럼 레지스터마다의 포맷도 알려 준다면 더욱 감사하지요.
MODBUS-RTU 프로토콜 쉽게 이해하기
MODBUS 프로토콜 이 글은 시리얼 통신을 잘 알고 있지만, MODBUS-RTU를 처음 접하는 분을 위해 저의 경험을 바탕으로 작성했습니다. 시리얼 통신을 꽤 오랫동안 다루었지만, MODBUS-RTU를 처음 접했을 때
badayak.com
아리송한 MODBUS-RTU 특이점
MODBUS-RTU 왜 이렇게 만들었을까? 통신으로 장비를 제어하는 시스템을 개발한다면 모드버스(MODBUS) 프로토콜이 편한데요, 다뤄야 할 장비가 모드버스를 지원한다면 반가울 정도입니다. 그런데 이
badayak.com
MODBUS-RTU 구현 시 주의 사항
MODBUS-RTU 경험담 MODBUS-RTU 프로그램을 작성하면서 겪었던 경험담을 올립니다. 좀 당황스러운 일인데, 경험에 따라 생각이 다를 수 있어서 반드시 이래야 한다는 것은 아니지만, rs485 라인에 MODBUS-RT
badayak.com
'컴퓨터 > 프로그래밍' 카테고리의 다른 글
모드버스 통신 테스트 프로그램 추천 (9) | 2021.08.15 |
---|---|
TCP/IP 전송 버퍼 빈 용량 확인하는 방법 (0) | 2021.07.23 |
나도 프로그래머 크로미움 웹브라우저 만들기 (4) | 2021.07.18 |