◈ 정의
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(RTU, ASCII ) 프레임 구조
MODBUS-TCP는 위의 같은 프레임형식의 프로토콜을 이용하여 슬래이브(Server)의 메모리에 접근하여 해당 어드레스의 데이터의 값을 읽어오거나 원하는 값으로 쓸수 있습니다.
◈ MBAP Header
MODBUS-TCP는 MBAP(Modbus Application Protocol)를 선두로 Function code, Data로 순으로 이루어져 있습니다. MBAP는 총 7 Byte이고 아래와 같은 내용의 Byte값을 나타냅니다.
1) Transaction ID [2Bytes] : 마스터(Client)가 최초 0x0000값 부터 통신시작 시 1씩 증가시키며 슬래이브(Server)는 그 값을 그대로 복사해서 사용합니다. 쿼리및 응답에 대해 한쌍으로 작업이 이루어 졌는지를 확인하는 부분입니다.
2) Protocol ID [2Bytes] : 프로토콜의 ID를 나타내며 MODBUS-TCP는 0x0000의 고정값을 사용합니다.
3) Length [2Bytes] : Length 필드위치에서 프레임 마지막까지의 길이를 나타냅니다. 즉 Unit ID ~ Data끝까지의 Byte의 수를 나타냅니다.
4) Unit ID [1 Byte] : TPC/IP가 아닌 다른 통신선로의 연결되어있는 Slave를 구분하는 정보입니다. Tcpport는 0x01로 고정입니다.
◈ 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비트 워드 |
읽기/쓰기 |
상위장치에서 메모리 읽고, 쓰기 가능 |
위의 그림 처럼 해당 Function Code에 따라 어떤 메모리를 접근할 것인지, 어떤 작업수행(Read, Write)을 행할 것인지가 나누어져 있습니다.
◈ Data
Data는 Function Code에 따라 그 구조가 조금식 달라집니다. Data는 기본적으로 Start Address, Length, Byte Count, Data의 형태를 가지고 있습니다.
1) Start Address [2Bytes] : 접근하려는 메모리의 시작번지를 나타냅니다. 2Byte로 표현되면 상위 Byte 우선순입니다. (예 0x4001번지 접근 시 0x40 0x01)
2) Length [2Bytes] : 시작번지부터 값을 읽거나 쓸 길이를 나타냅니다.
3) Byte Count [1Bytes] : Request, Response에따른 메모리 Data의 byte 수를 나타냅니다. 즉, 읽어거나 쓸려는 메모리 데이터의 Byte의 개수를 말합니다.
4) DATA [N Byte] : Request, Response에 따른 메모리 Data의 값 나타냅니다. 즉, 읽어거나 쓸려는 메모리 값입니다.
각 Function Code에 따른 Data 구조는 다음 링크에서 확인하실 수 있습니다. (링크: Funtion Code별 DATA 구조 및 디바이스 제어)
'통신' 카테고리의 다른 글
[정보] MQTT (0) | 2018.07.04 |
---|---|
[정보] PLC(Programmable Logic Controller) (0) | 2018.07.03 |
[정보] TCP 통신과 UDP 통신 차이 (0) | 2018.07.03 |
시리얼 포트란? (0) | 2018.07.03 |
[프로토콜] 통신프로토콜 종류 (0) | 2018.07.02 |