Modbus RTU 프로토콜이란?
Modbus RTU는 인버터·온도조절기·전력계까지 산업용 기기에서 널리 사용되는 시리얼 통신 표준입니다.그런데 막상 “Modbus RTU가 정확히 뭔지”, “RS-485랑은 또 뭐가 다른지” 정확히 알지 못하는 경우도 많습니다.
오늘은 Modbus RTU가 무엇인지, RS-232/RS-485와 어떤 관계인지부터 시작해서 프레임 구조와 기능코드, 레지스터 주소 체계, LS Electric PLC 연결까지 순서대로 짚어보겠습니다.

Modbus RTU 프로토콜이란?
시리얼 선을 통한 산업용 통신 규약
Modbus RTU는 마스터 한 대가 시리얼 통신(RS-232·RS-485) 선을 통해 여러 슬레이브 기기의 값을 읽고 쓰는 산업용 통신 프로토콜입니다.쉽게 말하면 PLC가 인버터·온도조절기·전력계 같은 기기에게 “몇 번 레지스터 값 좀 줘”, “이 값으로 바꿔”라고 주고받는, 약속된 대화 규칙이죠.
RTU는 Remote Terminal Unit의 약자로, 데이터를 사람이 읽는 문자가 아니라 바이너리(이진값) 그대로 실어 보낸다는 뜻입니다.
이 바이너리 방식 덕분에 같은 속도에서도 문자열로 보내는 ASCII 방식보다 전송 효율이 약 두 배 높습니다.
현장에서 그냥 “모드버스”라고 하면 사실상 이 RTU를 가리킬 만큼 표준으로 자리 잡았습니다.
RTU·ASCII·TCP — Modbus의 세 가지 종류
Modbus는 RTU, ASCII, TCP 세 가지 종류가 있고, 현장에서 가장 많이 쓰이는 건 RTU입니다.RTU는 RS-232·RS-485 위의 바이너리 방식이고, ASCII는 같은 시리얼 위에서 데이터를 16진수 문자열로 보내 가독성은 좋지만 효율이 낮아 거의 쓰이지 않습니다.
Modbus TCP는 이더넷(TCP/IP) 위에서 동작해 거리 제약이 없고 속도가 빠릅니다.
신규 설비라면 TCP도 좋지만, 기존 RS-485 인프라가 있거나 저가 장비를 붙일 때는 RTU가 여전히 현실적인 선택입니다.
| 구분 | Modbus RTU | Modbus ASCII | Modbus TCP |
|---|---|---|---|
| 전송 매체 | RS-232 / RS-485 | RS-232 / RS-485 | 이더넷(TCP/IP) |
| 데이터 형식 | 바이너리 | ASCII 문자열 | 바이너리 |
| 전송 효율 | 높음 | 낮음 (RTU의 절반) | 높음 |
| 오류 검출 | CRC-16 | LRC | TCP 자체 처리 |
| 최대 거리 | 1,200m (9,600bps 기준) | 1,200m | 거리 무제한 |
| 현장 사용 빈도 | 매우 높음 (표준) | 낮음 | 증가 중 |
RS-232/RS-485와의 관계
Modbus RTU는 “무엇을”, RS-232/485는 “어떻게” 보내는가
Modbus RTU와 RS-485를 같은 것으로 헷갈리는 경우가 많은데, 둘은 역할이 다른 계층입니다.RS-232와 RS-485는 전기 신호를 어떤 전압으로, 몇 가닥 선으로 주고받을지 정하는 물리 계층(하드웨어)입니다.
반면 Modbus RTU는 그 선 위에 실리는 데이터의 형식과 순서를 정하는 통신 규약이죠.
비유하자면 RS-485는 도로이고 Modbus RTU는 그 도로를 달리는 차량의 운행 규칙입니다.
그래서 “RS-485로 연결했다”는 말과 “Modbus RTU로 통신한다”는 말은 동시에 성립합니다.
RS-232 vs RS-485 — Modbus RTU에서 뭘 골라야 하나
Modbus RTU는 RS-232로도 RS-485로도 돌릴 수 있지만, 슬레이브가 둘 이상이면 RS-485가 사실상 정답입니다.RS-232는 1:1 통신만 되고 거리도 15m 안팎으로 짧습니다.
반면 RS-485는 한 쌍의 선으로 여러 대를 멀티드롭으로 묶고, 9,600bps 기준 1,200m까지 끌고 갈 수 있습니다.
한 가지 짚어둘 점은, 리피터 없이 한 세그먼트에 물리적으로 붙일 수 있는 슬레이브는 보통 32대까지라는 것입니다.
Modbus 프로토콜 주소 자체는 247번까지 쓸 수 있지만, 그 이상을 한 라인에 물리려면 리피터가 필요합니다.그래서 PLC 한 대에 인버터 여러 대를 데이지체인으로 엮는 현장 구성은 거의 다 RS-485 기반입니다.
배선 극성(A/B)이나 종단 저항 같은 RS-485 관련 세부 내용은 RS-232와 RS-485 차이 — 배선·종단 저항 가이드를 참조하세요.
| 구분 | RS-232 | RS-485 |
|---|---|---|
| 연결 방식 | 1:1 (Point-to-Point) | 1:N 멀티드롭 |
| 한 세그먼트 노드 수 | 1대 | 최대 32대 (리피터 사용 시 그 이상) |
| 최대 거리 | 약 15m | 약 1,200m (9,600bps) |
| 전송 방식 | 단선 기준 전압 | 차동 신호(A/B 2선) |
| 노이즈 내성 | 약함 | 강함 (차동 전송) |
| Modbus RTU 활용 | 장비 1:1 연결·설정용 | 현장 표준 (PLC↔다수 슬레이브) |
Modbus RTU가 40년 넘게 살아남은 이유
1979년에 만들어진 프로토콜이 여전히 현역인 이유
Modbus는 1979년 미국의 Modicon(현 Schneider Electric)이 자사 PLC용으로 개발한 시리얼 통신 프로토콜입니다.이후 무료로 공개되면서 산업 자동화 분야 전체로 빠르게 퍼졌습니다.
지금도 인버터, 온도조절기, 유량계, 전력계 등 산업용 기기 대부분이 Modbus를 지원합니다.
이유는 단순합니다.
구조가 단순하고 구현 비용이 낮으며 RS-485 시리얼 통신 위에 바로 얹어 쓸 수 있기 때문입니다.
현장에서 PLC와 인버터를 연결할 때 가장 먼저 검토하는 프로토콜이고, 특별한 게이트웨이나 추가 하드웨어 없이 RS-485 케이블 하나로 최대 247대 슬레이브를 묶을 수 있습니다.

마스터·슬레이브 통신 구조 — 요청과 응답의 흐름
마스터 1개, 슬레이브 최대 247개
Modbus RTU는 마스터(Master) 1개와 슬레이브(Slave) 최대 247개로 구성됩니다.PLC가 마스터 역할을 하고, 인버터·온도조절기·계량기 등이 슬레이브입니다.
통신 규칙은 단순합니다.
마스터만 먼저 요청(Request)을 보낼 수 있고, 슬레이브는 자신의 국번으로 요청을 받았을 때만 응답(Response)합니다.
슬레이브끼리는 직접 통신하지 않습니다.
슬레이브 주소(국번, Station ID)는 1~247 범위를 씁니다.
0번은 브로드캐스트 주소로 예약돼 있어서 장치 주소로 쓸 수 없습니다.
마스터는 주소 0으로 요청을 보내면 모든 슬레이브가 수신하지만 응답은 하지 않습니다.
통신 흐름 — 마스터가 묻고 슬레이브가 답한다
마스터와 슬레이브 사이 통신 흐름은 요청→응답 1사이클이 기본 단위입니다.PLC 래더 프로그램이 MODRD 블록을 실행하면, PLC는 해당 슬레이브 주소로 요청 프레임을 전송합니다.
슬레이브는 요청을 수신하고 처리한 뒤 응답 프레임을 돌려보냅니다.
마스터는 응답 대기 시간(Timeout) 안에 응답이 안 오면 오류로 처리합니다.
RS-485는 Half-Duplex(반이중)이기 때문에 마스터가 요청을 보내는 동안 슬레이브는 대기하고, 슬레이브가 응답하는 동안 마스터는 수신 상태로 전환합니다.
이 방향 전환이 제대로 안 되면 충돌이 생기는데, Timeout 설정이 너무 짧으면 슬레이브가 응답하는 도중에 마스터가 다음 요청을 보내버리는 문제가 생길 수 있습니다.

Modbus RTU 프레임 구조 — 4개 필드 분석
프레임 구성 — 슬레이브 주소·기능코드·데이터·CRC
Modbus RTU 프레임은 4개 필드로 구성됩니다: 슬레이브 주소(1바이트) + 기능코드(1바이트) + 데이터(N바이트) + CRC(2바이트).예를 들어 슬레이브 1번 장치에서 40001번 레지스터(주소 0x0000) 1개를 읽는 요청 프레임은 이렇게 됩니다:
| 필드 | 바이트 값 | 설명 |
|---|---|---|
| 슬레이브 주소 | 0x01 | 슬레이브 국번 1번 |
| 기능코드 | 0x03 | Holding Register 읽기 |
| 시작 주소 (상위) | 0x00 | 레지스터 주소 0x0000 (= 40001번) |
| 시작 주소 (하위) | 0x00 | |
| 읽을 개수 (상위) | 0x00 | 1개 읽기 |
| 읽을 개수 (하위) | 0x01 | |
| CRC (하위) | 0x84 | CRC-16 값 하위 바이트 먼저 |
| CRC (상위) | 0x0A | CRC-16 값 상위 바이트 |
CRC — 통신 오류 검출의 핵심
CRC(Cyclic Redundancy Check)는 프레임이 전송 중에 깨지지 않았는지 확인하는 오류 검출 코드입니다.Modbus RTU는 CRC-16(다항식 0x8005, 초기값 0xFFFF)을 사용합니다.
CRC는 슬레이브 주소부터 데이터 마지막 바이트까지 전체를 계산해서 나온 2바이트 값이며, 프레임 맨 끝에 하위 바이트(Low Byte) 먼저, 상위 바이트(High Byte) 나중에 붙입니다.
실무에서 CRC를 직접 계산할 일은 거의 없습니다.
PLC와 슬레이브 기기가 알아서 계산하고 검증합니다.
하지만 Modbus Poll이나 시리얼 모니터 도구로 패킷을 분석할 때 CRC 필드가 어디에 있는지 알아두면 디버깅에 도움이 됩니다.
CRC가 틀리면 슬레이브가 응답하지 않거나 Exception Code를 반환합니다.
기능코드(Function Code) — 현장에서 자주 쓰는 4가지
FC01·FC02·FC03·FC04 — 읽기 기능코드
Modbus RTU 기능코드(FC)는 마스터가 슬레이브에게 무엇을 할지 알려주는 명령어입니다.현장에서 자주 쓰는 기능코드는 4가지로 압축됩니다.
FC01은 코일(디지털 출력) 읽기, FC02는 디스크리트 입력(디지털 입력) 읽기, FC03은 홀딩 레지스터(설정값·출력값) 읽기, FC04는 입력 레지스터(계측값) 읽기입니다.
인버터나 온도조절기를 다룰 때는 FC03을 가장 많이 씁니다.
운전 주파수, 전류, 전압 같은 상태값 대부분이 Holding Register(40001번대)에 들어있기 때문입니다.
FC04 Input Register는 읽기 전용 계측값에 쓰이는데, 인버터 제조사에 따라 FC03과 FC04 중 어느 쪽을 쓰는지 다르니 매뉴얼을 꼭 확인해야 합니다.
FC06·FC16 — 쓰기 기능코드
레지스터에 값을 쓸 때는 FC06(단일 레지스터 쓰기)이나 FC16(다중 레지스터 쓰기)을 씁니다.FC06은 레지스터 1개에만 쓸 수 있습니다.
인버터 주파수 지령을 보내거나, 온도조절기 설정온도를 바꾸는 용도로 많이 씁니다.
FC16은 연속된 여러 레지스터에 한꺼번에 쓸 수 있어서 여러 파라미터를 한 번에 변경할 때 효율적입니다.
LS Electric PLC 래더 프로그램에서는 MODRD 블록이 FC03, MODWR 블록이 FC06/FC16에 해당합니다.
블록에 슬레이브 국번, 시작 레지스터 주소, 읽기/쓰기 개수를 넣으면 PLC가 프레임을 자동으로 구성해서 전송합니다.
| 기능코드 | 10진수 | 동작 | 대상 데이터 | 현장 사용 예 |
|---|---|---|---|---|
| FC01 | 1 | 읽기 | 코일 (Coil, 0xxxx) | 디지털 출력 상태 확인 |
| FC02 | 2 | 읽기 | 디스크리트 입력 (1xxxx) | 디지털 입력 상태 확인 |
| FC03 | 3 | 읽기 | 홀딩 레지스터 (4xxxx) | 인버터 주파수·전류 읽기 |
| FC04 | 4 | 읽기 | 입력 레지스터 (3xxxx) | 계측값·아날로그 입력 읽기 |
| FC05 | 5 | 쓰기 | 단일 코일 | 디지털 출력 ON/OFF 제어 |
| FC06 | 6 | 쓰기 | 단일 홀딩 레지스터 | 인버터 주파수 지령 쓰기 |
| FC16 | 16 | 쓰기 | 다중 홀딩 레지스터 | 여러 파라미터 한꺼번에 쓰기 |

레지스터 주소 체계 — 40001이 왜 0번인가
4가지 레지스터 유형과 주소 범위
Modbus 레지스터는 4가지 유형으로 나뉘며 각각 주소 범위가 다릅니다.코일(Coil, 0xxxx): 읽기/쓰기 가능한 1비트 디지털 데이터 (릴레이 출력 등).
디스크리트 입력(Discrete Input, 1xxxx): 읽기 전용 1비트 디지털 데이터 (디지털 입력 등).
입력 레지스터(Input Register, 3xxxx): 읽기 전용 16비트 워드 데이터 (아날로그 계측값 등).
홀딩 레지스터(Holding Register, 4xxxx): 읽기/쓰기 가능한 16비트 워드 데이터 (설정값, 제어값 등).
현장에서 인버터나 계기를 다룰 때는 대부분 홀딩 레지스터(4xxxx)와 입력 레지스터(3xxxx)를 씁니다.
운전 주파수 설정, PID 설정값 같은 쓸 수 있는 값은 홀딩 레지스터에, 출력 전류나 전압 같은 계측값은 입력 레지스터에 있습니다.
40001이 왜 소프트웨어에서는 0번인가 — 오프셋 계산
Modbus 매뉴얼에 “40001번 레지스터”라고 표기된 것을 소프트웨어에 입력할 때는 0(또는 1)을 넣는 이유는 오프셋(Offset) 주소 방식 때문입니다.Modbus 표준은 레지스터 주소를 0~65535 범위의 오프셋으로 전송합니다.
매뉴얼에 표기되는 40001, 40002 같은 번호는 “홀딩 레지스터 영역의 1번째, 2번째 레지스터”라는 의미의 기준 주소 표기 방식입니다.
실제 프레임에 실리는 주소는 40001에서 40000을 뺀 값, 즉 1이고, 거기서 다시 1을 빼면 0이 됩니다.
소프트웨어에 따라 오프셋 처리 방식이 다릅니다.
Modbus Poll은 기본적으로 표기 주소에서 1을 빼서 전송하는 방식을 씁니다.
그래서 매뉴얼에 40001이라고 나온 걸 그대로 입력하면 실제로는 40002에 해당하는 레지스터에 접근하게 됩니다.
처음 접하면 헷갈리는 부분이어서, 데이터가 이상하게 읽힐 때는 주소를 ±1 해가며 확인하는 게 빠릅니다.
| 레지스터 유형 | 매뉴얼 표기 주소 | 실제 전송 오프셋 | FC (읽기) | FC (쓰기) |
|---|---|---|---|---|
| 코일 (Coil) | 00001~09999 | 0~9998 | FC01 | FC05, FC15 |
| 디스크리트 입력 | 10001~19999 | 0~9998 | FC02 | 읽기 전용 |
| 입력 레지스터 | 30001~39999 | 0~9998 | FC04 | 읽기 전용 |
| 홀딩 레지스터 | 40001~49999 | 0~9998 | FC03 | FC06, FC16 |
LS Electric 인버터 Modbus RTU 연동 예시
LS Electric iS7 인버터에서 출력 주파수를 FC03으로 읽는 예시입니다.iS7 인버터 Modbus 매뉴얼을 보면 “출력 주파수(Output Frequency)”는 레지스터 주소 0x0500(10진수 1280)에 있습니다.
이 값을 FC03으로 읽으려면 Modbus Poll에서 Start Address를 1280(또는 소프트웨어에 따라 1281)으로 입력합니다.
읽힌 값은 0.01Hz 단위로 인코딩된 경우가 많습니다.
예를 들어 값이 6000으로 읽히면 60.00Hz를 의미합니다.
스케일링 방식도 기기마다 달라서 반드시 해당 기기의 Modbus 통신 매뉴얼에서 확인해야 합니다.
LS Electric 기술 자료실(sol.ls-electric.com)에서 기종별 Modbus 통신 매뉴얼과 레지스터 맵을 받을 수 있습니다.

자주 묻는 질문 & 트러블슈팅 FAQ
Q1. PLC와 인버터를 Modbus RTU로 연결했는데 아무 응답이 없습니다.
응답이 전혀 없는 경우는 대부분 통신 파라미터 불일치 또는 배선 문제입니다.확인 순서는 다음과 같습니다.
첫째, PLC와 인버터 양쪽의 보드레이트·데이터비트·패리티·스톱비트가 완전히 일치하는지 확인합니다.
단 1개라도 다르면 통신이 안 됩니다.
둘째, 슬레이브 국번이 PLC 래더의 설정과 인버터 설정이 같은지 확인합니다.
셋째, A/B 단자 연결 극성을 확인합니다.
반대로 연결하면 응답이 없습니다.
넷째, 종단 저항 위치가 버스 양 끝 장치에 달려있는지 확인합니다.
Q2. Modbus RTU와 Modbus TCP를 같이 쓸 수 있나요?
직접 혼용은 안 되지만, 게이트웨이를 통해 연동할 수 있습니다.RS-485 Modbus RTU 네트워크와 이더넷 Modbus TCP 네트워크를 연결하려면 Modbus RTU↔TCP 게이트웨이 장비가 필요합니다.
MOXA, Advantech, Anybus 등에서 만드는 시리얼-이더넷 게이트웨이를 쓰면 RS-485 슬레이브 장치를 TCP 네트워크에 투명하게 노출시킬 수 있습니다.
기존 RS-485 인프라를 유지하면서 SCADA나 MES 시스템과 이더넷으로 연결할 때 많이 씁니다.
Q3. 레지스터를 읽으면 Exception Code 0x02가 옵니다. 무슨 의미인가요?
Exception Code 0x02(Illegal Data Address)는 요청한 레지스터 주소가 슬레이브에 없다는 의미입니다.주소가 범위를 벗어났거나, 오프셋 계산이 잘못됐거나, 해당 기능코드로는 접근할 수 없는 주소를 요청했을 때 발생합니다.
인버터 Modbus 매뉴얼에서 정확한 레지스터 주소 범위를 다시 확인하고, 소프트웨어의 주소 입력 기준(0-based vs 1-based)을 확인해보세요.
| Exception Code | 의미 | 현장 원인 및 해결 |
|---|---|---|
| 0x01 | Illegal Function Code | 슬레이브가 해당 FC를 지원하지 않음 → 매뉴얼에서 지원 FC 목록 확인 |
| 0x02 | Illegal Data Address | 요청한 레지스터 주소가 없음 → 주소 범위 및 ±1 오프셋 확인 |
| 0x03 | Illegal Data Value | 쓰기 값이 허용 범위를 벗어남 → 매뉴얼의 데이터 범위 확인 |
| 0x04 | Slave Device Failure | 슬레이브 내부 오류 → 슬레이브 재시작 또는 장비 점검 필요 |
| 응답 없음 | No Response (Timeout) | 통신 파라미터 불일치, 배선 오류, 국번 불일치, 종단 저항 위치 확인 |
Q4. LS Electric PLC에서 MODRD 블록 사용법이 헷갈립니다.
MODRD 블록의 핵심 입력 파라미터는 슬레이브 국번·시작 레지스터 주소·읽을 개수 3가지입니다.XG5000에서 MODRD 블록을 삽입하면 En(실행 조건), Slot(통신 채널), Station(슬레이브 국번), Address(시작 레지스터 주소), Number(읽을 레지스터 개수)를 입력합니다.
Address에는 인버터 매뉴얼의 레지스터 주소를 그대로 16진수로 입력하면 되는 경우가 많지만, 기기에 따라 ±1 오프셋이 필요할 수 있습니다.
읽은 데이터는 MODRD 블록의 출력 데이터 주소에 자동으로 저장됩니다.
RS-485 배선 방법 2편에서 파라미터 설정 상세 내용을 함께 참고하세요.
Q5. 여러 인버터를 Modbus로 제어할 때 스캔 속도가 너무 느립니다.
Modbus RTU는 폴링(Polling) 방식이라 슬레이브 수가 많아질수록 전체 스캔 주기가 길어집니다.기본 공식은 한 사이클 스캔 시간 = 슬레이브 수 × (요청 전송 시간 + 응답 시간 + Timeout).
슬레이브가 10대라면 각 슬레이브를 순서대로 폴링하기 때문에 스캔 주기가 10배가 됩니다.
해결책으로는 보드레이트를 높이거나, Timeout을 최소화하거나, 꼭 필요한 레지스터만 읽도록 통신 대상을 줄이는 방향을 검토하세요.
실시간 제어가 필요한 축은 Modbus보다 EtherCAT이나 PROFINET 같은 실시간 이더넷 프로토콜을 검토하는 게 낫습니다.
Q6. Modbus RTU와 RS-485는 같은 말인가요?
아닙니다.RS-485는 신호를 주고받는 물리 계층(배선·전압)이고, Modbus RTU는 그 위에 실리는 데이터 규약입니다.
즉 “RS-485 선으로 연결하고, 그 위에서 Modbus RTU로 대화한다”가 정확한 표현입니다.
RS-485 케이블을 깔았다고 자동으로 Modbus가 되는 게 아니라, 양쪽 기기가 Modbus RTU를 지원하고 같은 통신 파라미터(보드레이트·패리티 등)로 설정돼 있어야 통신이 됩니다.
📡 PLC 통신 시리즈
1편: RS-232와 RS-485 차이 — 배선 방법·종단 저항·트러블슈팅 가이드
2편: RS-485 배선 방법 — 멀티드롭 설계·케이블 선정·PLC 파라미터 설정 실전 가이드
현재 글: 3편 — Modbus RTU 프로토콜 — 개념·RS-485 관계·프레임·기능코드·레지스터
4편: Modbus TCP 프로토콜 — 이더넷 관계·RTU 차이·MBAP·게이트웨이






