Modbus TCP 프로토콜이란?



Modbus TCP 프로토콜이란?

Modbus TCP는 RTU와 똑같은 Modbus 명령을 RS-485 대신 이더넷(TCP/IP) 위로 주고받는 프로토콜입니다.

오늘은 Modbus TCP가 무엇인지, 이더넷/TCP/IP와 어떤 관계인지부터 시작해서 RTU와의 차이 3가지, MBAP 헤더 구조, LS Electric PLC 이더넷 설정, RS-485 장비를 잇는 게이트웨이까지 순서대로 짚어보겠습니다.

Modbus TCP 이더넷 네트워크 — PLC와 인버터 이더넷 통신 구성
▲ Modbus TCP는 RS-485 없이 이더넷(LAN)으로 PLC·인버터·계기를 연결한다 — 기존 사무용 네트워크 인프라를 그대로 활용할 수 있다



Modbus TCP 프로토콜이란?

같은 Modbus, 다른 물리 계층

Modbus TCP는 Modbus 프로토콜을 RS-485 시리얼 선 대신 이더넷 TCP/IP 위에서 동작하도록 확장한 버전입니다.
3편에서 다룬 Modbus RTU는 RS-485 물리 계층 위에서 동작합니다.
Modbus TCP는 물리 계층만 이더넷으로 바꾼 것이고, 레지스터 주소 체계·기능코드·데이터 구조는 RTU와 동일합니다.
RTU를 이미 이해했다면 TCP는 “같은 명령어를 LAN 케이블로 보내는 것”이라고 생각하면 됩니다.
Modbus TCP는 1999년 Schneider Electric이 표준화했으며, 현재 IDA(Modbus Organization)에서 관리합니다.
이더넷이 공장까지 보급된 지금은 신규 설비에서 Modbus TCP 채택이 빠르게 늘고 있습니다.

클라이언트·서버 모델 — 마스터·슬레이브와 다른 점

Modbus TCP에서는 마스터를 클라이언트(Client), 슬레이브를 서버(Server)라고 부릅니다.
RTU의 마스터-슬레이브 개념과 동일하지만 용어가 TCP 네트워크 관례를 따라 바뀌었습니다.
PLC가 클라이언트 역할로 서버(인버터, 계기 등)에 연결해 레지스터를 읽고 씁니다.
결정적인 차이는 동시 연결 수입니다.
RTU는 버스에 마스터가 1개뿐이지만, Modbus TCP는 여러 클라이언트가 같은 서버에 동시에 TCP 연결을 열 수 있습니다.
PLC와 SCADA 서버가 동시에 같은 인버터 데이터를 읽는 구성이 가능해집니다.
Modbus TCP 서버는 포트 502번에서 대기하며, 클라이언트가 이 포트로 TCP 연결을 맺어 통신합니다.

이더넷(TCP/IP)과의 관계

Modbus TCP는 “무엇을”, 이더넷/TCP/IP는 “어떻게” 보내는가

Modbus TCP와 이더넷을 같은 것으로 헷갈리기 쉽지만, 둘은 역할이 다른 계층입니다.
이더넷과 TCP/IP는 데이터를 어떤 신호로, 어떤 경로로 실어 나를지 담당하는 하부 계층(물리·전송)입니다.
반면 Modbus TCP는 그 위에 올라타 “어느 레지스터를 읽고 쓸지”를 정하는 응용 계층 프로토콜이죠.
RTU가 RS-485라는 좁은 도로 위를 달렸다면, Modbus TCP는 이더넷이라는 더 넓은 고속도로 위를 달리는 셈입니다.
명령의 내용(기능코드·레지스터)은 그대로고 도로만 바뀐 겁니다.

주소 체계와 포트 502 — RTU와 무엇이 달라지나

이더넷 위로 올라오면서 장치를 찾는 주소 방식이 ‘IP 주소 + 포트 502 + Unit ID’ 조합으로 바뀝니다.
RTU는 RS-485 한 라인에서 슬레이브 국번(1~247)만으로 상대를 구분했습니다.
Modbus TCP는 먼저 IP 주소로 장치를 찾아가고, 그 장치의 502번 포트로 TCP 연결을 맺은 뒤, 게이트웨이 뒤에 여러 RTU 슬레이브가 있을 때 Unit ID로 최종 대상을 가립니다.
오류 검출 방식도 달라집니다.
RTU는 프레임 끝 CRC로 직접 확인했지만, Modbus TCP는 TCP/IP 전송 계층이 체크섬과 재전송을 처리해주기 때문에 CRC가 빠집니다.
덕분에 같은 Modbus 명령을 사무용 이더넷 인프라 위에서 그대로 쓸 수 있죠.
RS-485 물리 계층 자체에 대한 내용은 RS-232와 RS-485 차이 — 배선·종단 저항 가이드를 참조하세요.

Modbus TCP와 RTU 차이 비교 — 이더넷 vs RS-485, MBAP 헤더 vs CRC
▲ Modbus TCP는 RTU와 같은 기능코드·레지스터 구조를 쓰되 전송 매체가 이더넷이고 MBAP 헤더가 CRC를 대체한다



Modbus TCP vs RTU 3가지 차이점

1. 전송 매체와 배선

RTU는 RS-485 꼬임쌍선, TCP는 이더넷 UTP 케이블(RJ45)을 씁니다.
RTU에서는 A·B·SG 단자에 케이블을 연결하고 종단 저항, 노이즈 대책까지 신경 써야 했습니다.
TCP는 일반 이더넷 스위치와 UTP Cat.5e 이상 케이블이면 충분합니다.
공장에 이미 이더넷 인프라가 깔려 있다면 추가 배선 없이 IP 설정만으로 연결할 수 있습니다.
거리 제한도 달라집니다.
RS-485 RTU는 보드레이트에 따라 최대 1,200m가 한계였지만, 이더넷은 스위치를 거쳐 이론상 무제한으로 확장됩니다.

원격지 현장과 중앙 SCADA를 WAN 또는 VPN으로 연결하는 구성도 가능합니다.

2. 오류 검출 방식

RTU는 프레임 끝에 CRC 2바이트를 붙여 오류를 검출했지만, Modbus TCP에는 CRC가 없습니다.
TCP/IP 자체가 전송 계층에서 체크섬(Checksum)으로 데이터 무결성을 보장하기 때문에 애플리케이션 레벨의 CRC가 불필요합니다.
이더넷 물리 계층과 TCP 전송 계층이 오류 검출과 재전송을 처리해주는 덕분입니다.
반대로 말하면, 이더넷 네트워크 자체가 불안정하거나 패킷 손실이 잦은 환경이라면 RTU보다 TCP가 더 취약할 수 있습니다.
공장 내 이더넷 스위치 품질과 네트워크 부하를 함께 관리해야 합니다.

3. 동시 연결과 응답 속도

RTU는 단일 마스터만 가능하지만, Modbus TCP는 여러 클라이언트가 동시에 서버에 연결할 수 있습니다.
PLC + SCADA + 모바일 HMI가 동시에 같은 서버 장비 데이터를 읽는 구성이 가능합니다.
또한 RTU는 요청→응답을 순서대로 기다리는 폴링 방식이지만, Modbus TCP는 Transaction ID 덕분에 여러 요청을 동시에 날리고 응답을 비동기로 처리할 수 있어 빠른 폴링이 가능합니다.

Modbus TCP vs Modbus RTU 비교
항목Modbus RTUModbus TCP
전송 매체RS-485 / RS-232이더넷 (RJ45, WiFi)
통신 모델마스터 / 슬레이브클라이언트 / 서버
포트 / 주소슬레이브 국번 (1~247)IP 주소 + 포트 502 + Unit ID
오류 검출CRC-16 (2바이트)TCP 체크섬 (자동 처리)
동시 마스터1개만 가능여러 클라이언트 동시 연결 가능
최대 거리최대 1,200m (9,600bps)스위치 경유 시 사실상 무제한
기능코드·레지스터동일 (FC03, FC06 등 — 3편 참조)
설치 난이도중간 (종단 저항, 노이즈 대책)낮음 (이더넷 스위치 + IP 설정)
주요 사용처인버터·계기 직접 연결, 기존 설비SCADA·MES 연동, 신규 설비
Modbus TCP MBAP 헤더 7바이트 구조 — Transaction ID·Protocol ID·Length·Unit ID
▲ Modbus TCP 프레임의 MBAP 헤더는 7바이트다 — RTU의 슬레이브 주소 1바이트·CRC 2바이트가 각각 Unit ID와 TCP 체크섬으로 대체된다



MBAP 헤더 구조 — CRC가 없는 이유

MBAP 헤더 4개 필드 상세

Modbus TCP는 RTU 프레임 앞에 7바이트짜리 MBAP(Modbus Application Protocol) 헤더를 붙입니다.
RTU는 [슬레이브 주소 1B + 기능코드 1B + 데이터 NB + CRC 2B]였다면, TCP는 [MBAP 헤더 7B + 기능코드 1B + 데이터 NB]입니다.
CRC 2바이트는 빠지고 MBAP 헤더 7바이트가 추가되는 구조입니다.

Modbus TCP MBAP 헤더 필드 상세
필드크기설명예시값
Transaction ID2바이트요청-응답 쌍 매칭용 번호. 클라이언트가 증가시키며 서버는 그대로 복사해 응답0x0001
Protocol ID2바이트Modbus 프로토콜 식별자 — 항상 0x0000 고정0x0000
Length2바이트이후 바이트 수 (Unit ID + 기능코드 + 데이터). 큰 패킷은 값이 커짐0x0006
Unit ID1바이트RTU의 슬레이브 주소 역할. 단독 장치면 0x01, 게이트웨이 경유 시 슬레이브 국번0x01

Modbus TCP 요청 프레임 전체 예시

슬레이브 1번(Unit ID=1)의 홀딩 레지스터 40001번(오프셋 0x0000) 1개를 FC03으로 읽는 전체 프레임은 다음과 같습니다.
RTU와 비교하면 앞에 MBAP 7바이트가 추가됐고, 끝에 CRC 2바이트가 없어진 것을 확인할 수 있습니다.

Modbus TCP FC03 요청 프레임 예시 — 40001번 레지스터 1개 읽기
위치필드바이트 값설명
MBAP 헤더Transaction ID0x00 0x01요청 번호 1번
Protocol ID0x00 0x00Modbus 고정값
Length0x00 0x06이후 6바이트
Unit ID0x01슬레이브 국번 1
PDU기능코드0x03Holding Register 읽기
시작 주소0x00 0x0040001번 레지스터
읽을 개수0x00 0x011개
※ CRC 없음 — TCP 자체 체크섬으로 대체
LS Electric XGT PLC 이더넷 모듈 Modbus TCP 설정 화면
▲ LS Electric XGT PLC에 이더넷 통신 모듈(XGL-EFMT)을 장착하면 Modbus TCP 클라이언트로 동작시킬 수 있다



LS Electric XGT PLC 이더넷 Modbus TCP 설정

이더넷 모듈 준비 — XGL-EFMT 기준

LS Electric XGT PLC에서 Modbus TCP를 쓰려면 이더넷 통신 모듈(XGL-EFMT 등)이 필요하거나, 최신 기종(XGK-CPUE, XGB-XBMS 등)의 내장 이더넷 포트를 활용합니다.
XG5000 소프트웨어에서 [프로젝트] → [파라미터] → [이더넷 파라미터]로 들어가 모듈 슬롯과 IP 주소를 설정합니다.
PLC IP와 연결할 슬레이브 서버 IP가 같은 서브넷에 있어야 통신이 됩니다.
예를 들어 PLC IP가 192.168.1.10이면 인버터 IP는 192.168.1.11~254 범위에 있어야 합니다.
서버(슬레이브) 장치 측에서는 IP 주소와 Modbus TCP 포트(502)를 설정합니다.
포트는 변경 가능하지만 표준값 502를 그대로 쓰는 게 호환성 면에서 안전합니다.
TCP 연결은 통신 세션 동안 유지(Keep-alive)되는 게 일반적입니다.
PLC가 처음 접속할 때 TCP 연결을 맺고, 이후 폴링 주기마다 새로 연결을 맺는 게 아니라 기존 연결을 재사용합니다.
연결이 끊어지면 PLC가 자동으로 재접속 시도를 합니다.
이 재접속 로직이 없는 구현이라면 통신이 한 번 끊기면 복구가 안 되는 문제가 생깁니다.

XG5000 래더에서 Modbus TCP 읽기·쓰기 블록

Modbus TCP에서는 RTU용 MODRD·MODWR 블록 대신 MBUS_RD·MBUS_WR 또는 TCP 전용 펑션블록을 사용합니다.
기종에 따라 블록 이름이 다르니 XG5000 매뉴얼을 확인해야 합니다.

공통적으로 입력 파라미터에는 서버 IP 주소(또는 연결 번호), Unit ID, 기능코드, 시작 레지스터 주소, 읽기/쓰기 개수가 들어갑니다.
RTU 블록과 구조가 거의 같고 국번 대신 IP 주소를 넣는 방식으로 이해하면 됩니다.
LS Electric 기술 자료실(sol.ls-electric.com)에서 기종별 이더넷 모듈 사용 설명서와 Modbus TCP 래더 예제를 제공합니다. 이더넷 모듈 초기 설정은 반드시 해당 모듈 사용 설명서를 먼저 확인하세요.

Modbus TCP 클라이언트 설정 항목 (XGT PLC 이더넷 모듈 기준)
설정 항목설명비고
PLC IP 주소192.168.1.10 (예시)서버와 같은 서브넷에
서버 IP 주소192.168.1.20 (예시, 인버터)서버 장치에서 설정
포트 번호502Modbus TCP 표준, 변경 가능
Unit ID1 (단독 장치) / RTU 국번 (게이트웨이 경유)서버 장치 설정과 일치
기능코드FC03 (읽기) / FC06·FC16 (쓰기)RTU와 동일
응답 Timeout200~1,000ms네트워크 지연에 따라 조정
MOXA MGate Modbus RTU↔TCP 게이트웨이 — RS-485 장비를 이더넷에 연결
▲ MOXA MGate MB3180 시리즈 게이트웨이는 RS-485 Modbus RTU 장치를 Modbus TCP 이더넷 네트워크에 투명하게 연결해준다



RTU↔TCP 게이트웨이 — 기존 RS-485 장비를 이더넷에 연결하기

NPort vs MGate — 역할이 다릅니다

MOXA 제품 중 NPort는 RS-485 장비를 TCP/IP 네트워크에 연결해주지만, Modbus RTU↔TCP 프로토콜 변환은 하지 않습니다.
NPort는 시리얼 데이터를 그대로 TCP로 터널링하는 디바이스 서버입니다.
SCADA가 Modbus TCP로 직접 통신하려면 프로토콜 변환이 필요한데, 이 역할을 하는 게 MOXA MGate MB3180·MB3280 시리즈입니다.
MGate는 이더넷 쪽에서는 Modbus TCP 서버로, RS-485 쪽에서는 Modbus RTU 마스터로 동작해서 두 네트워크를 투명하게 잇습니다.
한 대의 MGate에 RS-485 슬레이브 여러 대를 연결해두면, SCADA나 PLC가 이더넷으로 MGate에 Modbus TCP 요청을 보내는 것만으로 RS-485 인버터·계기 데이터를 읽을 수 있습니다.

게이트웨이 설정 시 핵심 포인트

게이트웨이를 쓸 때 Unit ID 설정이 핵심입니다.
TCP 쪽 클라이언트가 보내는 Unit ID가 게이트웨이 뒤편 RTU 슬레이브의 국번으로 매핑되어야 합니다.

예를 들어 MGate 뒤에 RTU 인버터가 국번 1·2·3으로 연결돼 있다면, TCP 클라이언트는 Unit ID 1·2·3으로 각각 요청을 보내면 됩니다.
MGate가 Unit ID를 국번으로 번역해서 해당 인버터에 RTU 요청을 보내고, 응답을 받아 TCP로 돌려줍니다.
게이트웨이 보드레이트와 RTU 슬레이브 보드레이트가 반드시 일치해야 합니다.
이 부분을 놓쳐서 응답이 없는 경우가 현장에서 종종 생깁니다.
RS-485 배선 방법 2편에서 RTU 파라미터 설정을 함께 참고하세요.

FAQ — 현장에서 자주 막히는 것들

Q1. Modbus TCP 연결 자체가 안 됩니다 — 포트 502로 연결이 거부됩니다.

포트 502 연결이 거부되면 서버 장치의 Modbus TCP 기능이 활성화됐는지부터 확인하세요.
일부 인버터·계기는 기본값이 Modbus RTU만 지원하고 TCP는 별도 옵션 카드나 펌웨어 설정이 필요한 경우가 있습니다.
장비 매뉴얼에서 “Modbus TCP 지원”을 먼저 확인해야 합니다.
또한 PLC와 서버 장치가 같은 서브넷에 있는지, IP 주소가 중복되지 않는지 확인하세요.
방화벽이나 보안 장비가 포트 502를 차단하는 경우도 있습니다.

Q2. TCP로 연결은 됐는데 데이터를 못 읽습니다.

연결은 성공했는데 데이터를 못 읽는다면 Unit ID와 레지스터 주소를 먼저 확인하세요.
단독 장치(게이트웨이 없음)라면 Unit ID를 1 또는 장치 설정값으로 맞춰야 합니다.
어떤 장치는 Unit ID를 0으로 받기도 하고, 어떤 장치는 특정 값을 요구하기도 합니다.
레지스터 주소와 기능코드는 RTU와 완전히 동일하게 사용하면 됩니다.
RTU에서 작동했던 주소·FC를 그대로 쓰면 됩니다.

Q3. Modbus Poll로 TCP 통신을 테스트할 수 있나요?

네, Modbus Poll은 RTU뿐 아니라 Modbus TCP도 지원합니다.
[Connection] → [Connect]에서 Mode를 “Modbus TCP/IP”로 선택하고, 서버 IP 주소와 포트(502)를 입력하면 됩니다.
COM 포트 설정 없이 IP만으로 바로 연결됩니다.
레지스터 읽기·쓰기 방법은 RTU 모드와 동일합니다.
PC에 별도 USB-RS485 컨버터가 없어도 이더넷 카드만 있으면 테스트할 수 있어서 편리합니다.

Q4. RTU와 TCP 중 어느 걸 선택해야 하나요?

기존 설비에 RS-485가 이미 있으면 RTU를 유지하고, 신규 설비거나 SCADA 연동이 목적이면 TCP가 유리합니다.
RTU는 추가 인프라 없이 시리얼 선 하나로 연결되는 단순함이 강점입니다.
인버터·온도조절기 등 장비가 RTU만 지원하는 경우도 많습니다.
TCP는 이더넷 인프라가 이미 있는 환경이나 SCADA·MES와 연동, 여러 클라이언트에서 동시 접근이 필요할 때 적합합니다.
혼용이 필요하면 게이트웨이(MGate 등)로 두 세계를 잇는 방법을 씁니다.

Q5. Modbus TCP에서 여러 장치를 폴링할 때 RTU보다 빠른가요?

조건에 따라 다릅니다.
이더넷 속도 자체는 빠르지만, 폴링 구조의 한계는 TCP도 동일합니다.

기가비트 이더넷이라 데이터 전송 속도는 RTU(최대 115,200bps)보다 월등히 빠릅니다.
하지만 Modbus 자체가 폴링 방식이라 슬레이브 수가 많을수록 스캔 주기가 길어지는 건 마찬가지입니다.
다만 TCP는 비동기 Transaction ID 덕분에 여러 요청을 동시에 보내는 구현이 가능해서, 잘 구현된 Modbus TCP 스택은 RTU보다 높은 폴링 성능을 낼 수 있습니다.

Q6. Modbus TCP와 이더넷은 같은 말인가요?

아닙니다.
이더넷(TCP/IP)은 데이터를 실어 나르는 하부 네트워크 계층이고, Modbus TCP는 그 위에 올라타는 데이터 규약입니다.

즉 “이더넷으로 연결하고, 그 위에서 Modbus TCP로 대화한다”가 정확한 표현입니다.
같은 이더넷 망에 물려 있어도 양쪽 기기가 Modbus TCP를 지원하고 포트 502로 연결돼야 통신이 됩니다.
같은 이더넷 위에는 EtherNet/IP·PROFINET 같은 다른 산업용 프로토콜도 함께 돌 수 있습니다.

본 글은 일반적인 기술 정보 제공을 목적으로 작성되었으며, 실제 설계 및 시공 시에는 반드시 자격을 갖춘 전문가와 상담하시기 바랍니다. 현장 조건과 법규에 따라 적용 방법이 달라질 수 있습니다.



Similar Posts