rs485 모드버스 어드레스 맵 정리

2021. 8. 6. 21:37 컴퓨터/프로그래밍

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

이 댓글을 비밀 댓글로

티스토리 로그인이 풀리면 여기를 클릭하세요.

error: Content is protected !!