목차

MODBUS-TCP란

MODBUS-TCP는 산업용 필드버스 분야에서 자주 사용되는 통신 프로토콜 입니다. TCP/IP 네트워크 상에서 상위장치와 하위장치간의 인터페이스를 위하여 고안된 통신방법입니다.



MODBUS-TCP 통신규격에는 마스터(Client)와 슬레이브(Server)의 역할이 나누어져 있습니다. 슬레이브(Server)는 마스터(Client)가 요청하는 데이터에 대해 응답을 해줍니다. 주로 마스터(Client)에는 산업용터치 HMI 기기, 또는 PC 와 같은 상위 기기가 위치합니다. 그리고 슬레이브(Server)에는 TCPPORT 나 PLC 등이 위치합니다.
슬레이브(Server)는 상위기기에서 요청하는 동작만을 하는 수동적인 위치에 있습니다. 반면 마스터(Client)쪽에서는 원하는 데이터를 읽어오거나, 원하는 데이터를 기입하는 등 적극적으로 슬레이브(Server) 기기를 다루어 주어야 합니다.

프로토콜 개요

마스터(Client)와 슬레이브(Server)간의 정상적인 Data 통신을 하기위해서는 MODBUS-TCP 프레임구조에 맞는 데이터 페킷을 전송해야 합니다. MODBUS-TCP 프레임구조는 범용MODBUS(RTU, ASCII) 프레임구조와 상당히 비슷합니다.

· 범용 MODBUS(RTU, ASCII ) 프레임 구조

· MODBUS-TCP 프레임 구조

MODBUS-TCP는 위의 같은 프레임형식의 프로토콜을 이용하여 슬래이브(Server)의 메모리에 접근하여 해당 어드레스의 데이터의 값을 읽어오거나 원하는 값으로 쓸수 있습니다.

- MBAP Header

MODBUS-TCP는 MBAP(Modbus Application Protocol)를 선두로 Function code, Data로 순으로 이루어져 있습니다. MBAP는 총 7 Byte이고 아래와 같은 내용의 Byte값을 나타냅니다.


- Function Code

Function Code는 Modbus 프로토콜에서 제공하는 명령어 집합코드 입니다. Function Code를 이용하여 슬레이브 Memory(Coil, Register )에 값을 읽어오거나 쓸수있는 서비스입니다. 실제로 Function Code코드 1~127사이의 값을 사용하고있지만 TCPPORT에서는 1, 2, 4, 5, 6, 15, 16 값을 지원합니다. 그 이유는 실질적으로 사용되는 서비스이기 때문입니다.

MODBUS 데이터 모델은 입력과 출력 그리고 비트 단위 접근과 워드 단위 접근을 기준으로 총 4가지 형태로 나누어집니다. 데이터 모델은 제조사마다 각기 다를수있습니다. 예를 들어 데이더 종류별로 데이터 블록을 각각 지정하여 4개의 데이터 블록으로 사용하거나 비트영역, 워드영역을 나누어 두게의 데이터 블록을 사용할 수 있습니다.

메모리 데이터모델 접근형태 읽기/쓰기 설명
Coil Discrete Input 비트 읽기 상위장치에서 메모리 읽기 가능
Coil Coils 비트 읽기/쓰기 상위장치에서 메모리 읽고, 쓰기 가능
Register Input Registers 16비트 워드 읽기 상위장치에서 메모리 읽기 가능
Register Holding Resisters 16비트 워드 읽기/쓰기 상위장치에서 메모리 읽고, 쓰기 가능

TCPPORT는 16비트 워드영역(Resisters)과 비트영역(Coils)으로 두게의 데이터 메모리로 나누어져 있습니다. 여기서 말하는 메모리는 Slave(server)장비의 메모리를 말하며 Master(Client)는 위의 평션코드를 이용하여 Slave(server)장비의 메모리를 읽거나 원하는 값으로 변경할 수 있습니다.

· TCPPORT의 MODBUS 데이터 메모리 구조

위의 그림 처럼 해당 Function Code에 따라 어떤 메모리를 접근할 것인지, 어떤 작업수행(Read, Write)을 행할 것인지가 나누어져 있습니다.

- Data

Data는 Function Code에 따라 그 구조가 조금식 달라집니다. Data는 기본적으로 Start Address, Length, Byte Count, Data의 형태를 가지고 있습니다.

각 Function Code에 따른 Data 구조는 다음 링크에서 확인하실 수 있습니다. (링크: Funtion Code별 DATA 구조 및 디바이스 제어)