4. IT기술노트/기타

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

쿼드큐브 2025. 11. 10. 22:49
반응형
반응형

 

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

modbus 이해하기 삽화 이미지
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 도구의 도움을 받아 생성되거나 다듬어졌습니다.

반응형