PortDock

Modbus 레지스터를 묶어 읽기 — 125개 한도·빈 주소·예외 02 와 폴링 시간

태그마다 요청을 하나씩 보내면 폴링이 느려집니다. 레지스터를 묶어 읽는 규칙, 125개·2000비트 한도, 빈 주소에서 나는 예외 02, 묶음에 따른 시간 차이를 계산으로.

이 글에서 쓰는 도구Modbus Master 윈도우 프로그램 · 무료Modbus Slave 윈도우 프로그램 · 무료Modbus 읽기 요청 묶기 계산기 웹 · 설치 없음시리얼 통신 시간 계산기 웹 · 설치 없음

HMI·SCADA·PC 프로그램에서 Modbus 장비의 값을 읽을 때, 태그(값)마다 요청을 하나씩 보내면 장비 수와 태그 수가 늘수록 한 바퀴가 길어집니다. 요청 하나에는 실제 데이터 말고도 요청 전송, 장비 처리 시간, 다음 요청 전 쉼이 붙기 때문입니다. 그래서 주소가 가까운 값들을 한 요청으로 «묶어» 읽습니다. 이 글은 묶는 규칙과 한계를 정리합니다.

규칙 1 — 한 요청은 한 표, 연속한 칸

규칙 2 — 개수 한도

함수한 요청 최대(규격)응답 데이터
01 코일 읽기2000⌈개수 ÷ 8⌉ 바이트
02 이산 입력 읽기2000⌈개수 ÷ 8⌉ 바이트
03 보유 레지스터 읽기1252 × 개수 바이트
04 입력 레지스터 읽기1252 × 개수 바이트

레지스터 125개를 읽으면 응답 PDU 는 함수 1 + 바이트 수 1 + 데이터 250 = 252 바이트로, 규격이 정한 PDU 최대 253 바이트(§4.1) 안에 들어갑니다. 장비는 이보다 적게 받을 수 있습니다 — 장비 레지스터 맵의 «한 번에 최대» 값이나 매뉴얼을 봅니다. 한도를 넘기면 장비는 예외 03(Illegal Data Value)으로 답합니다.

규칙 3 — 빈 주소와 예외 02

묶은 요청 안에 장비가 정의하지 않은 주소가 끼면, 많은 장비가 요청 «전체» 를 예외 02(Illegal Data Address)로 거절합니다. 규격의 처리 순서도 «시작 주소 + 개수» 가 장비의 범위에 맞는지를 보고 아니면 02 를 냅니다. 어떤 장비는 빈 칸을 0 으로 채워 돌려주기도 하는데, 이것은 장비마다 다르므로 매뉴얼이나 시험으로 확인합니다.

묶으면 얼마나 빨라지나 — 계산 예

보유 레지스터 10개(40001~40010)를 9600 bps·8E1 로 읽고, 장비가 요청을 받고 10 ms 뒤에 답한다고 합시다. 값마다 따로 읽으면 요청 10개, 한 요청은 요청 8 바이트 + 응답 7 바이트입니다. 한 번에 읽으면 요청 1개, 요청 8 + 응답 25 바이트입니다.

방법요청 수RTU 바이트한 바퀴(계산)
값마다 따로10150약 312 ms
한 요청으로133약 52 ms

바이트는 4.5배 줄었고 시간은 6배 줄었습니다. 요청마다 붙는 장비 처리 시간(여기서는 10 ms)과 3.5문자 쉼이 요청 수만큼 반복되기 때문입니다. 장비 처리 시간이 길수록 묶는 효과가 커집니다. Modbus TCP 도 시리얼 전송 시간만 없을 뿐, 요청마다 장비 처리와 네트워크 왕복이 붙는 것은 같습니다.

읽는 주기도 나누기

근거

작성 2026-10-29