산업용 프로토콜인 Modbus 시리즈에대해 알아본다.
본 페이지의 상단부는 자주 사용하여 외워야할 이미지를 넣어두었으며
하단부에는 자세한 설명을 하였다.
모드버스는 PLC들과의 통신에 사용할 목적으로 만들어졌다. 프로토콜은 단순하나 장비 제어와 모니터링에 필요한 기능들을 수행할 수 있다. 산업용 전자 장치들을 서로 연결하는 목적으로 널리 사용된다.
본 페이지의 상단부는 자주 사용하여 외워야할 이미지를 넣어두었으며
하단부에는 자세한 설명을 하였다.
< Modbus Protocol's Function Type > |
< Function Code List Table > |
모드버스는 PLC들과의 통신에 사용할 목적으로 만들어졌다. 프로토콜은 단순하나 장비 제어와 모니터링에 필요한 기능들을 수행할 수 있다. 산업용 전자 장치들을 서로 연결하는 목적으로 널리 사용된다.
모드버스가 널리 이용되는 이유 :
- 산업용 통신 프로토콜로 개발됨
- 프로토콜이 공개되어 있고 공짜
- 설치와 유지보수가 용이
- 비트단위 또는 워드(16bits) 단위로 정보조작이 용이
모드버스는 약 240개 정도의 장비들을 서로 연결할 수 있다. 일반적으로 서버에서 센싱 장비들에게 질의를 보내고 장비들은 이에 대해 응답하는 형태로 동작한다. SCADA에서도 모니터링 서버와 RTU를 연결하기 위해 자주 사용한다.
1. 통신과 장비
모드버스는 마스터-슬레이브 기반 프로토콜이다. 시리얼 통신에서는 마스터로 설정된 장비만이 슬레이브로 정보를 요청할 수 있는 반면 이더넷 통신에서는 네트워크상의 어떤 노드도 정보를 요청할 수 있다. 요청정보는 읽기와 쓰기가 모두 가능하지만 대부분 마스터는 하나다.
네트워크상에 연결된 노드(컴퓨터)들이 요청을 받을 수는 있지만, 요청정보에 들어있는 목적주소 장비만이 이에 응답한다. 물론 목적지 주소가 브로드캐스트 주소 일 때는 예외이다.
2. 프레임 포맷
통신 네트워크의 종류와 요청정보의 형식에 따라 여러가지 프레임 포맷이 존재한다. Modbus RTU는 시리얼 통신을 이용하며 프레임에서는 이진정보를 사용한다.
Modbus Ascii도 시리얼 통신망을 이용하지만, 프레임에 ascii문자를 넣어 통신한다.
-Modbus RTU Frame Format
Name | Length(bits) | Function |
Start | 28 | at least 3 1?2 character times of silence (mark condition) |
Address | 8 | Station Address |
Function | 8 | Indicates the function code, eg read coils / inputs |
Data | n * 8 | Data + length will be filled depending on the message type |
CRC | 16 bits | Error checks |
End | 28 | at least 3 1?2 character times of silence between frames |
-Modbus ASCII Frame Format
Name | Length (char.) | Function |
Start | 1 | starts with colon ( : ) (ASCII hex value is 0x3A) |
Address | 2 | Station Address |
Function | 2 | Indicates the function codes like read coils / inputs |
Data | n | Data + length will be filled depending on the message type |
LRC | 2 | Error checks |
End | 2 | carriage return ? line feed(CR/LF) pair (ASCII values of 0x0D & 0x0A) |
-Modbus TCP Frame Format
Name | Length (bytes) | Function |
Transaction Identifier | 2 | For synchronization between messages of server & client |
Protocol Identifier | 2 | Zero for Modbus/TCP |
Length Field | 2 | Number of remaining bytes in this frame |
Unit Identifier | 1 | Slave Address (255 if not used) |
Function code | 1 | Function codes as in other variants |
Data bytes | n | Data as response or commands |
모드버스/TCP의 unit identifier는 모드버스 게이터웨이 내부의 RTU 장비들을 지칭할 목적으로 사용되며, 이런 경우가 아니라면 IP 주소를 사용해 목적지를 인식할 수 있으므로 사용되지 않는다. 바이트 순서는 빅 엔디언을 사용한다.
프레임 포멧의 Function code와 data부분을 특별히 Protocoal Data Unit (PDU)라고 부르며, 위 프레임 포맷 표에서 노란색으로 표시된 부분이 PDU이다.
PDU는 Request PDU, Response PDU, Exception Response PDU의 3가지 종류가 정의되어 있으며, 아래는 요청과 응답의 과정을 해당 주체와 함께 간단히 표시한 그림이다.
Slave에서 메세지를 해석할수 없거나 주소를 찾을수 없는 오류 잘생시에는 요청의 Function code에 0x80을 더한 값을 오류코드로 설정하여 Exception Response로 응답한다.
3.지원되는 기능 코드들
- 프로토콜이 만들어진 초창기부터 있었던 기능들은 굵은 글자로 표시되어 있으며, 1~6까지의 기능 코드를 갖는다.
- 모드버스가 센서나 LED등을 모니터링하고 제어하기 위해 제공하는 특수한 data type
4. 구현
모드버스의 구현은 시리얼 통신에 사용할 수 있는 모드버스와 IP 통신망에서 사용할 수 있는 모드버스가 존재한다.
시리얼 통신에 사용되는 대표적인 규격은 RS-232와RS-485가 있다. RS-232는 가까운 거리에 놓인 두 장비를 1:1로 연결하는 용도로 사용된다. RS-485는 여러 장비들을 하나의 망을 묶을 수 있으며, 하나의 마스터에서 여러 개의 slave들과 통신할 수 있다.
시리얼 전송 모드는 데이터의 인코딩 방식에 따라 아스키와 RTU로 다시 나누어 진다. 아스키 모드에서는 바이트는 두개의 아스키 문자로 기록되어 데이터 전송 효율이 떤어진다, 하지만 디버깅에사 사람이 데이터를 읽기에는 더 편리하다. 반면에 RTU 모드는 이진 데이터를 그대로 사용한다.
- Data types
- Floating point IEEE
- 32-bit integer
- 8-bit data
- Mixed data types
- Bit fields in integers
- Multipliers to change data to/from integer. 10, 100, 1000, 256 ...
- Protocol extensions
- 16-bit slave addresses
- 32-bit data size (1 address = 32 bits of data returned.)
- Word swapped data
5. 특징
- 1970년대의 PLC장비들에서 사용되던 data type들 만을 지원한다.
- data object는 오직 주소에 의해서만 결정되며, 설명을 넣을 수 없다.
- 마스터의 요청없이 슬레이브에서 특정 이벤트에 의해 마스터로 메세지를 전달할 수 있는 방법이 없다, 다만 모드버스 TCP에서는 방법이 있다.
- 시리얼 네트워크에서는 247개의 노드까지만 네트워크에 연결할 수 있다.
- 데이터는연속적으로 전송해야 한다.
- 통신 보안을 제공하지 않는다.
libmodbus : 모드버스를 구현한 대표적인 라이브러리이다.
c 로 구현된 라이브러리로 리눅스, 맥, 윈도우 등 대부분의 OS에서 사용할 수 있으며, 꾸준히 업데이트가 되고 있다.
댓글 없음:
댓글 쓰기