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-TCP는 MBAP(Modbus Application Protocol)를 선두로 Function code, Data로 순으로 이루어져 있습니다. MBAP는 총 7 Byte이고 아래와 같은 내용의 Byte값을 나타냅니다.
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)장비의 메모리를 읽거나 원하는 값으로 변경할 수 있습니다.
Data는 Function Code에 따라 그 구조가 조금식 달라집니다. Data는 기본적으로 Start Address, Length, Byte Count, Data의 형태를 가지고 있습니다.
각 Function Code에 따른 Data 구조는 다음 링크에서 확인하실 수 있습니다. (링크: Funtion Code별 DATA 구조 및 디바이스 제어)