사용자 도구

사이트 도구

English

tcpport:modbus-tcp_프로토콜이란:index

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값을 나타냅니다.

  • Transaction ID [2Bytes] : 마스터(Client)가 최초 0x0000값 부터 통신시작 시 1씩 증가시키며 슬래이브(Server)는 그 값을 그대로 복사해서 사용합니다. 쿼리및 응답에 대해 한쌍으로 작업이 이루어 졌는지를 확인하는 부분입니다.
  • Protocol ID [2Bytes] : 프로토콜의 ID를 나타내며 MODBUS-TCP는 0x0000의 고정값을 사용합니다.
  • Length [2Bytes] : Length 필드위치에서 프레임 마지막까지의 길이를 나타냅니다. 즉 Unit ID ~ Data끝까지의 Byte의 수를 나타냅니다.
  • 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비트 워드 읽기/쓰기 상위장치에서 메모리 읽고, 쓰기 가능

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의 형태를 가지고 있습니다.

  • Start Address [2Bytes] : 접근하려는 메모리의 시작번지를 나타냅니다. 2Byte로 표현되면 상위 Byte 우선순입니다. (예 0x4001번지 접근 시 0x40 0x01)
  • Length [2Bytes] : 시작번지부터 값을 읽거나 쓸 길이를 나타냅니다.
  • Byte Count [1Bytes] : Request, Response에따른 메모리 Data의 byte 수를 나타냅니다. 즉, 읽어거나 쓸려는 메모리 데이터의 Byte의 개수를 말합니다.
  • DATA [N Byte] : Request, Response에 따른 메모리 Data의 값 나타냅니다. 즉, 읽어거나 쓸려는 메모리 값입니다.

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

tcpport/modbus-tcp_프로토콜이란/index.txt · 마지막으로 수정됨: 2016/12/20 21:59 저자 Comfile Technology