MODBUS 프로토콜에 대해 알아보겠습니다.
Ⅰ. MODBUS 프로토콜 이란?
산업 자동화 환경에서 장치 간 데이터 교환을 위해 만들어진 통신 프로토콜입니다. 1979년 Modicon(현 Schneider Electric)이 PLC 통신 목적으로 제안했으며, 현재까지도 가장 보편적인 산업용 표준 중 하나로 자리 잡았습니다. 한 장치가 요청(Request)을 보내면, 다른 장치가 응답(Response)하는 방식이며 이 덕분에 PLC, 센서, 계측기, 인버터, RTU, HMI 등 다양한 장비에서 폭넓게 사용됩니다.
Ⅱ. MODBUS 프로토콜 많이 사용된 이유
최신 프로토콜처럼 화려한 기능은 없지만, 현장에서는 “잘 되는 게 가장 중요”하기 때문에 강점을 유지해 왔습니다.
ⅰ. 구현이 단순함 : 스택이 가볍고 MCU 자원이 적어도 구현 가능
ⅱ. 개방형 프로토콜 : 라이선스 비용이 없고 제조사 종속성이 낮음
ⅲ. 상호 운용성 : 서로 다른 제조사 장비끼리도 통신이 쉬움
ⅳ. 현장형 안정성 : 초저지연보다는 예측 가능성과 신뢰성을 중시
정리하면 MODBUS는 가장 빠른 프로토콜이라기보다 현장에서 가장 검증된 프로토콜입니다.
Ⅲ. MODBUS 프로토콜 통신 구조
ⅰ. MODBUS 프로토콜 통신 구조
- Master–Slave 구조
“항상 마스터가 먼저 요청을 보내야 통신이 시작된다”는 점입니다. 이 구조 덕분에 통신 흐름이 예측 가능하고 충돌 가능성이 낮아 산업 제어 환경에 잘 맞습니다.
1) Master(Client): 통신을 시작하고 요청을 보냄
2) Slave(Server): 요청을 받아 응답만 함(먼저 말하지 않음)
Ⅳ. MODBUS 프로토콜 데이터 모델
데이터를 “변수명”이 아니라 주소 + 타입으로 다룬다는 점입니다. 즉, 장치 내부 데이터를 논리적인 메모리 공간으로 나눠두고, 주소를 지정해서 읽거나 씁니다.
| 구분 | 주소 영역 | 크기 | 의미 |
| Coil | 0xxxx | 1 bit | 디지털 출력 |
| Discrete Input | 1xxxx | 1 bit | 디지털 입력 |
| Input Register | 3xxxx | 16 bit | 아날로그 입력 |
| Holding Register | 4xxxx | 16 bit | 아날로그 출력 및 설정값 |
예를 들어 “40001번 Holding Register를 읽어라”처럼 요청하는 방식이 MODBUS의 기본 사고방식입니다.
Ⅴ. MODBUS 프로토콜 기능 코드(Function Code)
ⅰ. 기능 코드(Function Code) 란?
요청(Request)이 “읽기냐 쓰기냐, 어떤 영역을 다루냐”를 결정하는 값이 Function Code입니다.
ⅱ. 자주 사용되는 기능 코드(Function Code)
- 01: Coil 읽기
- 03: Holding Register 읽기
- 06: Holding Register 단일 쓰기
- 16(0x10): Holding Register 다중 쓰기
ⅲ. MODBUS 요청 메시지
- 누구에게 보낼 것인가? (Slave Address)
- 무엇을 할 것인가? (Function Code)
- 어디를 다룰 것인가? (Start Address)
- 얼마나 다룰 것인가? (Quantity)
Ⅵ. MODBUS 프로토콜 전송 방식에 따른 프레임 구조
ⅰ. MODBUS RTU
RS-232/RS-485 기반 직렬 통신에서 가장 흔한 이진(Binary) 방식입니다.
| 프레임 구조 [SlaveAddr][Function][Data][CRC] |
- CRC16으로 오류 검출
- 프레임 구분은 약 3.5 character time의 침묵 시간으로 판단
- 전송 효율이 높고 안정적으로 현장에서 가장 많이 사용
단, 사람이 눈으로 해석하기 어렵고 타이밍에 민감하다는 특성이 있습니다.
ⅱ. MODBUS ASCII
RTU와 동일하게 직렬 통신이지만 ASCII 문자로 표현합니다.
| 프레임 구조 [Address][Function][Data][LRC] CR LF |
- 사람이 읽기 쉬움
- 전송 효율이 낮아 현재는 거의 사용되지 않음
ⅲ. MODBUS TCP
Ethernet 환경에서 사용하는 MODBUS 변형입니다. MODBUS 자체가 새로 바뀌었다기보다 “MODBUS를 TCP/IP 위에 얹었다”에 가깝습니다.
| 프레임 구조 [MBAPHeader][FunctionCode][Data] |
- CRC 없음(전송 신뢰성은 TCP가 담당)
- MBAP 헤더 포함: Transaction ID, Protocol ID, Length, Unit ID
- 게이트웨이나 PLC가 RTU/TCP 변환을 해 주는 구성도 흔합니다.
Ⅶ. MODBUS 프로토콜 장점과 한계
ⅰ. MODBUS 프로토콜 장점
1) 단순하고 안정적
2) 구현 및 도입 비용이 낮음
3) 제조사 독립적이며 레거시 호환성이 높음
ⅱ. MODBUS 프로토콜 한계
1) 보안 기능 부재: 암호화·인증 기본 제공 없음
2) 이벤트 기반 불가: 기본이 폴링(Polling) 구조
3) 데이터 표현력 제한: 복잡한 구조/메타데이터에 약함
4) 대규모 네트워크에 비효율적
기술사 관점으로는 “MODBUS는 제어 통신용이지 IT 보안 프로토콜이 아니다”라는 문장이 핵심입니다.
Ⅷ. MODBUS 프로토콜 활용 분야
현장 기준으로 MODBUS는 주로 하위 제어 계층(Field Level)에서 강합니다.
ⅰ. 센서/계측기/RTU 같은 필드 장비 통신
1) 온도/압력/유량/전력량계 같은 계측기에서 값을 읽기
2) 디지털 I/O 모듈 상태 확인
3) 간단한 제어 수행
Ex) 밸브 ON/OFF
4) RTU가 여러 장치(Slave)를 RS-485 멀티드롭으로 묶고, 상위로 데이터를 올림
ⅱ. 레거시 시스템 연동
1) 기존 장비는 MODBUS RTU만 지원
2) 중간에 RTU/TCP 게이트웨이나 PLC가 붙어서 값을 읽음
3) 상위로는 MODBUS TCP, OPC UA, MQTT 혹은 제조사 플랫폼, SCADA 태그로 변환해 전달
ⅲ. SCADA/HMI 데이터 수집
1) 장치 주소(슬레이브 ID), 기능 코드, 시작 주소, 길이(레지스터 개수) 정의
2) SCADA/HMI 태그
3) 풀링 주기 설정
4) 스케일링/엔디안 처리