MODBUS

Modbus TCP/IP

기하 2021. 11. 12. 08:58

TCP/IP

TCP는 Transmission Control Protocol,

IP는 Internet Protocol입니다.

 

이러한 프로토콜은 함께 사용되며 인터넷을 위한 전송 프로토콜입니다.
이러한 프로토콜을 사용하여 Modbus 정보를 보내면

데이터가 TCP로 전달되어 추가 정보가 첨부되어 IP에 제공됩니다.

그런 다음 IP는 데이터를 패킷(또는 데이터그램)에 넣고 전송합니다.

TCP는 연결 기반 프로토콜이므로 
데이터를 전송하기 전에 연결을 설정해야 합니다. 
마스터(또는 Modbus TCP의 클라이언트)는 슬레이브(또는 서버)와 연결을 설정합니다. 
서버는 클라이언트로부터 들어오는 연결을 기다립니다. 
연결이 설정되면 서버는 클라이언트가 연결을 닫을 때까지 클라이언트의 쿼리에 응답합니다.

TCP를 통한 Modbus RTU

간단히 말해서 
이것은 TCP/IP 래퍼(wrapper)로 전송되고 직렬 회선 대신 네트워크를 통해 전송되는
Modbus RTU 메시지입니다. 서버는 IP 주소를 사용하기 때문에 SlaveID가 없습니다.

모드버스 TCP

Schneider Automation에서 제공하는 Modbus 메시징 구현 가이드는 
TCP/IP를 통한 사용을 위해 특별히 수정된 프로토콜에 대해 설명합니다. 
공식 Modbus 사양은 modbus.org/specs.php에서 찾을 수 있습니다. 
Modbus RTU와 Modbus TCP의 주요 차이점은 여기에 설명되어 있습니다.

ADU 및 PDU

위에서 언급한 직렬 연결과 네트워크 연결 간의 주요 차이점 외에도 
메시지 내용에는 몇 가지 차이점이 있습니다.

Modbus RTU 메시지로 시작하고 처음에서 SlaveID를 제거하고 끝에서 CRC를 제거하면 PDU, 
프로토콜 데이터 단위가 생성됩니다.

다음은 주소가 17인 슬레이브 장치에서 
아날로그 출력 홀딩 레지스터 #40108 ~ 40110의 내용에 대한 
Modbus RTU 요청의 예입니다.

 

11 03 006B 0003 7687

11:     슬레이브 주소 (17 = 11 hex)
03:     기능 코드 (read Analog Output Holding Registers)
006B:  The Data Address of the first register requested. (40108-40001 = 107 =6B hex)
0003:  The total number of registers requested. (read 3 registers 40108 to 40110) 
7687:  The CRC (cyclic redundancy check) for error checking.

 

SlaveID 와 CRC 제거하면  PDU:

   03 006B 0003

 

MBAP 헤더

MBAP 헤더(Modbus Application Header)라고 하는
새로운 7바이트 헤더가 메시지 시작 부분에 추가됩니다.
이 헤더에는 다음 데이터가 있습니다.

Transaction Identifier 2 바이트 각 요청을 고유하게 식별하기 위해 클라이언트가 설정한 2바이트. 
이러한 바이트는 서버의 응답이 요청과 동일한 순서로
수신되지 않을 수 있으므로 서버에 의해 반향됩니다.
Protocol Identifier 2 바이트 클라이언트가 설정한 2바이트, 항상 = 00 00
Length 2 바이트 뒤따를 메시지의 바이트 수를 식별하는 2바이트
Unit Identifier 1 바이트 클라이언트에 의해 설정되고 직렬 회선이나 다른 버스에 연결된 
원격 슬레이브를 식별하기 위해 서버에 의해 반향되는 1바이트.

요  약

 

The equivalent request to this Modbus RTU example

                 11 03 006B 0003 7687

in Modbus TCP is:

  0001 0000 0006 11 03 006B 0003

0001: Transaction Identifier
0000: Protocol Identifier
0006: Message Length (6 bytes to follow)
11: The Unit Identifier  (17 = 11 hex)
03: The Function Code (read Analog Output Holding Registers)
006B: The Data Address of the first register requested. (40108-40001 = 107 =6B hex)
0003: The total number of registers requested. (read 3 registers 40108 to 40110)



TCP/IP Wrapper