Modbus 이해하기: 기계끼리 데이터를 주고받는 규칙

1. Modbus란 무엇인가?
우리가 일상에서 스마트폰, TV, 컴퓨터가 서로 데이터를 주고받듯이 산업 현장에서도 온도 센서, 모터, 제어기(PLC), 모니터링 시스템 등 수많은 장비들이 서로 소통하며 협력합니다.
하지만 기계들은 사람처럼 자연어로 대화할 수 없기 때문에, 정해진 규칙(프로토콜)을 따라야 합니다.
그 규칙 중 가장 오래되고, 지금까지도 가장 널리 쓰이는 통신 규칙이 바로 Modbus입니다.
🔷 왜 Modbus가 만들어졌을까?
초기의 산업 설비 현장은 문제투성이었습니다.
각 장비 제조사마다 통신 방식이 모두 달라 연결이 매우 어렵고 비효율적이었기 때문입니다.
예를 들어
▸ 온도 센서 A는 “온도값”을 2바이트로 보내고,
▸ 온도 센서 B는 같은 값을 4바이트로 보내고,
▸ 또 다른 장비는 데이터 위치(주소) 표현법까지 달랐습니다.
즉, 장비마다 언어가 모두 달랐던 셈입니다.
이 문제를 해결하기 위해 1979년, Modicon(PLC 회사)이 가볍고 단순한 통신 규칙인 Modbus를 만들었습니다.
그리고 이 규칙은 지금까지도 무료(오픈)로 공개되어, 산업 장비의 사실상 표준 역할을 하게 되었습니다.
🔷 Modbus가 많이 사용되는 분야
Modbus는 “산업 + 환경 제어 + 건물 관리” 영역에서 매우 자주 등장합니다.
| 분야 | 예시 |
| 공장 자동화 | 생산 라인 장비 상태 모니터링, 공정 제어 |
| 발전소 / 에너지 설비 | 변압기, 전력계측기, 유량/압력 센서 데이터 수집 |
| 건물 자동제어(BAS) | 냉난방 제어, 조명 제어, 전력 모니터링 |
| 플랜트 / 환경 시스템 | 수질, 온습도, 배관 압력, 가스 농도 감시 |
센서(값 측정)
↓
제어장치 또는 PLC(판단/제어)
↓
PC / 서버 / 모니터링 프로그램(표시/기록)
이러한 데이터 흐름이 존재하는 거의 모든 시스템에서 Modbus는 핵심적인 연결자 역할을 합니다.
🔷 왜 이렇게 오래 살아남았을까?
Modbus가 수십 년 넘게 꾸준히 사랑받는 이유는 매우 명확합니다.
| 장점 | 설명 |
| 단순하다 | 구조가 직관적이고 배우기 쉬움 |
| 가볍고 안정적이다 | 공장 현장처럼 노이즈 많은 환경에서도 잘 동작 |
| 무료로 사용할 수 있다 | 라이선스 비용 없음 |
| 확장성과 호환성이 높다 | 제조사, 장비 종류에 상관없이 연결 가능 |
| RTU / TCP 등 다양한 배선 방식 지원 | 케이블/네트워크 어디서든 활용 가능 |
그렇기 때문에 오늘날 스마트 공장 시스템, IoT 기반 설비 관리, 클라우드 연동 모니터링 등 새로운 기술 환경에서도 Modbus는 여전히 중요한 역할을 하고 있습니다.
2. Modbus가 데이터를 주고받는 방식
Modbus의 통신 방식은 생각보다 단순하고 직관적입니다.
복잡한 프로토콜도 많지만, Modbus는 “요청하고 → 응답한다”라는 구조만 이해하면 절반은 끝입니다.
🔷 기본 구조: Master ↔ Slave
Modbus 통신에서는 역할이 분명하게 나뉩니다.
| 역할 | 하는 일 |
| Master | 데이터를 요청하거나 값을 변경하라고 지시하는 주체 |
| Slave | 요청에 응답하거나 값을 실행하는 장비 |
즉, Master가 먼저 요청(Request)을 보내고, Slave가 그에 대한 응답(Response)을 돌려줍니다.
Master → (데이터 요청) → Slave
Slave → (데이터 응답) → Master
예시로 풀어보면:
Master: “온도 센서야! 지금 온도 좀 알려줘.”
Slave: “지금 25.3°C야!”
Master가 주도하고, Slave는 받은 요청에만 반응한다는 점이 포인트입니다.
🔷 여러 장비는 어떻게 구분할까? → 주소(Address) 개념
현장에는 센서가 하나만 있는 게 아니라, 온도 센서, 습도 센서, 전력 계측기, 모터 제어기 등 여러 장비가 함께 연결되어 있을 수 있습니다.
그래서 각 장비는 고유 번호(= 주소, Address)를 가집니다.
Master는 이 주소를 보고 누구에게 요청할지 선택합니다.
| 장비 | 역할 | 주소예시 |
| 온도 센서 #1 | 온도 측정 | 1 |
| 온도 센서 #2 | 온도 측정 | 2 |
| 습도 센서 | 습도 측정 | 3 |
🔷 장비 내부 값은 어디에 저장되어 있을까? → 레지스터(Register)
각 장비 내부에는 수많은 데이터(측정값, 상태값, 설정값)가 저장되어 있는데, 이 값들이 저장된 칸을 레지스터(Register)라고 부릅니다.
이 레지스터는 번호로 위치가 정해져 있고, Master는 어떤 레지스터 값을 읽을지/쓸지를 번호로 지정합니다.
| 레지스터 번호 | 의미 | 값 |
| 30001 | 현재 온도 | 25.3°C |
| 30002 | 현재 습도 | 60% |
Master가 데이터를 요청하는 방식은 매우 단순합니다.
Master는 “어느 장비(Address)”의 “어떤 데이터(Register)”를 읽거나 수정할지를 숫자로 지정해서 요청합니다.
예를 들어
“주소 1번 장비의 30001번 레지스터 값을 읽어줘.”
라고 요청하면
▸ 주소 1번 → 어떤 장비에게 말하는지 (대상 장비)
▸ 레지스터 30001번 → 그 장비 내부의 어떤 데이터를 가리키는지 (데이터 위치)
를 의미합니다.
✔️ 예시
[Master]
↓ 주소 1번, 레지스터 30001 읽기 요청
[Slave (온도 센서)]
↓ 25.3°C 데이터를 응답
[Master]
3. Modbus 통신 방식의 종류
Modbus는 “데이터를 주고받는 규칙” 자체는 동일하지만, 어떻게 장비들을 물리적으로 연결하느냐에 따라 여러 형태로 사용됩니다.
즉, 케이블과 네트워크 구조가 달라질 뿐, 통신 방식(요청/응답 구조)은 동일합니다.
Modbus에서 가장 많이 사용되는 방식은 다음 두 가지입니다.
1. Modbus RTU (RS-485 기반, 시리얼 통신)
2. Modbus TCP (Ethernet 기반, 네트워크 통신)
이 두 방식은 같은 언어(Modbus)를 사용하지만 연결 환경과 설치 목적이 다릅니다.
현장 환경에 따라 적합한 방식을 선택합니다.
🔷 1) Modbus RTU — RS-485 기반, 케이블로 연결
Modbus RTU는 시리얼 통신 방식이며, 특히 RS-485라는 산업용 통신 라인을 사용합니다.
핵심 특징
▸ 장비들을 한 줄로 이어서(데이지 체인) 연결
▸ 노이즈에 강하고, 수십~수백 미터 거리까지 안정적으로 통신 가능
▸ 속도는 빠르지 않지만, 현장 환경에서 운용 안정성이 매우 높음
Master
│
├── Slave 1
│
├── Slave 2
│
└── Slave 3
장점
▸ 공장/설비 환경에서 매우 강력한 내구성
▸ 구축 비용이 저렴 (케이블과 단순한 연결 구조)
▸ 네트워크 환경이 없어도 동작 가능
주로 사용하는 곳
▸ 생산 라인 설비
▸ 온습도/압력/유량 등의 현장 센서 네트워크
▸ 전력/배관/펌프 제어 시스템
즉, 현장에서 장비끼리 직접 연결해야 하는 환경이라면 Modbus RTU는 여전히 최고의 선택지입니다.
🔷 2) Modbus TCP — Ethernet(IP 기반) 네트워크 방식
Modbus TCP는 우리가 익숙한 LAN, 인터넷 네트워크를 사용합니다.
핵심 특징
▸ IP 주소로 장비를 식별
▸ PC, 서버, 클라우드 같은 IT 시스템과 연동하기 쉬움
▸ 스위치/공유기를 통해 여러 장비를 병렬 연결 가능
PC(마스터) ↔ 공유기 ↔ Slave 장비들
장점
▸ 설치가 편하고 기존 네트워크 인프라 활용 가능
▸ 여러 장비를 쉽게 확장 가능 (스위치만 연결하면 됨)
▸ 원격 모니터링 / IoT / 클라우드 연동에 최적화
주로 사용하는 곳
▸ 서버 기반 센서 모니터링 시스템
▸ 빌딩 자동화 시스템 (BAS)
▸ SCADA / MES / IoT / 클라우드 연동 환경
즉, 네트워크 또는 클라우드 시스템과 데이터를 주고받아야 한다면 Modbus TCP가 가장 효율적입니다.
🔷 RTU vs TCP 비교
| 항목 | RTU | TCP |
| 연결 방식 | RS-485 케이블 (시리얼) | LAN / Ethernet / 인터넷 |
| 장비 식별 | 장비 주소 번호(Slave ID) | IP 주소 |
| 연결 구조 | 직렬(데이지 체인) | 병렬(스위치/허브 이용) |
| 장점 | 안정적, 노이즈 강함, 저비용 | 설치 쉬움, 확장성 좋음, IT 연동 강점 |
| 속도 | 상대적으로 느림 | 상대적으로 빠름 |
| 사용 장소 | 공장 현장, PLC/센서 직접 연결 | PC/서버/클라우드 기반 시스템 |
4. 실제로 어떻게 쓰는지 예시로 이해하기
🔷 예시 상황 — 공정 온도 모니터링
공장에서는 생산 품질을 위해 온도를 일정하게 유지하는 것이 매우 중요합니다.
이를 위해 각 공정 위치에 온도 센서가 설치되어 있다고 가정해 봅시다.
| 항목 | 내용 |
| 장비 | 온도 센서(측정 장치) |
| 장비 주소 (Slave ID) | 1번 |
| 온도 데이터 저장 위치 (레지스터) | 30001번 |
| 제어/모니터링 장치 | PC(또는 PLC), Master 역할 |
🔷 데이터 요청 흐름
Modbus의 기본 구조는 Master(요청) ↔ Slave(응답)이었죠.
이번에도 PC(마스터)가 센서(슬레이브)에게 값을 요청합니다.
PC(Master): "주소 1번 장비야, 30001번에 저장된 온도값을 알려줘!"
↓
온도 센서(Slave): "현재 온도는 25.3°C야! → 프로토콜 규칙에 따라 253으로 답할게."
여기서 253처럼 실제 값이 10배 단위로 저장되는 경우는 매우 흔합니다.
이는 소수점을 직접 표현하기 어렵거나, 장비마다 표현 방식이 달라서입니다.
→ PC는 이 값을 받아 25.3°C로 변환해 화면에 표시합니다.
🔷 Python으로 실제 데이터 읽어보기 (Modbus TCP 예시)
여기서는 Python에서 많이 쓰는 pymodbus 라이브러리를 사용합니다.
✔️ 라이브러리 설치
pip install pymodbus
✔️ 예제 코드 — 30001 레지스터 읽기
from pymodbus.client import ModbusTcpClient
# Modbus 장비 IP 주소와 Port
client = ModbusTcpClient(host="192.168.0.10", port=502)
client.connect()
# 주소 1번 장비(Slave ID), 레지스터 30001 → 실제로는 0 기반 index 이므로 30000으로 변환
result = client.read_holding_registers(address=30000, count=1, slave=1)
if result.isError():
print("통신 오류:", result)
else:
raw_value = result.registers[0] # 예: 253
temperature = raw_value / 10.0 # 25.3°C 로 변환
print("현재 온도:", temperature, "°C")
client.close()
| 항목 | 의미 |
| ModbusTcpClient | Modbus TCP 방식으로 장비 연결 |
| read_holding_registers() | 레지스터 값을 읽는 함수 |
| address=30000 | 레지스터 번호 보정 (30001 → 30000) |
| slave=1 | 센서 주소 번호 |
| /10.0 | 소수점 표현 복원 |
※ 게시된 글 및 이미지 중 일부는 AI 도구의 도움을 받아 생성되거나 다듬어졌습니다.
'4. IT기술노트 > 기타' 카테고리의 다른 글
| 선도자(First Mover) vs 추격자(Fast Follower): 전략 차이와 성공 사례 (0) | 2025.11.19 |
|---|---|
| MVP vs MLP: 제품 개발 전략의 차이 이해하기 (1) | 2025.11.19 |
| 기술부채(Technical Debt) - 소프트웨어 개발 속 숨은 비용과 관리 방법 (0) | 2025.11.04 |
| 옵트인(Opt-in) vs 옵트아웃(Opt-out): 내 정보는 내가 선택한다 (0) | 2025.10.24 |
| 모니터링 vs 옵저빌리티: 관찰의 시대, 시스템을 ‘이해하는’ 기술로 (0) | 2025.10.12 |