About Modbus

Modbus란?

modbus에 대한 이미지 검색결과

1979년 Schneider Electric (구 Modicon) 에서 개발한 Serial 통신 프로토콜

PLC와 산업 자동화 장비 간 제어를 위한 목적으로 개발

  • PLC : Programmable Logic Controller
  • 초기에는 제조공장 및 놀이공원의 기계들을 자동화하고 제어하기 위해 사용
  • 단순하지만 장비 제어와 모니터링에 필요한 기능을 갖춤
  • 현재에는 사실 상의 표준 프로토콜 지위를 얻음

Modbus가 산업용으로 널리 이용되는 이유

  • 개발 목적 – 산업용 통신 프로토콜을 목적하여 개발됨
  • 비용 – 프로토콜이 공개되어 있으며, 무료로 사용 가능
  • 구조 – 간단한 구성으로 설치와 유지보수가 용이
  • 제어 – 비트 단위 또는 워드 (16bit) 단위로 정보 조작이 용이

Modbus는 약 240개의 장비들을 서로 연결할 수 있다. 예를 들면, 온도와 습도를 측정하는 여러 장비들이 모니터링 서버로 현재 상태를 보고하도록 할 수 있다. 일반적으로 서버에서 센싱 장비들에게 질의를 보내고 장비들은 이에 대해 응답하는 형태로 동작한다. Supervisory control and data acquisition (SCADA) 시스템에서도 모니터링 서버와 remote terminal unit (RTU)을 연결하기 위해 Modbus protocol을 자주 사용한다.

Modbus의 종류

  • Modbus RTU – Serial 통신을 이용, 프레임에 이진(binary) 정보를 사용
  • Modbus ASCII – Modvus RTU와 동일하나, 프레임에 ASCII 코드를 사용한다는 점이 차이
  • Modbus TCP – Standard Ethernet based TCP/IP 프로토콜 상에서 동작

Modbus의 특징

Master – Slave 기반의 요청(Request)과 응답(Response) 구조

Modbus는 master/slave 기반 프로토콜이다. 시리얼 통신에서는 master로 설정된 장비만이 slave로 정보를 요청할 수 있는 반면, 이더넷 통신에서는 네트워크상의 어떤 노드도 정보를 요청할 수 있다. 요청정보는 읽기와 쓰기 모두 가능하다. 하지만, 대부분의 경우 master는 하나만 존재한다.

네트워크상에 연결된 모든 노드들이 요청을 받을 수는 있지만, 요청정보에 들어있는 목적주소 장비만이 이에 응답한다. 물론 목적지 주소가 브로드캐스트 주소일 때는 예외이다. 목적지 주소를 0으로 설정하면, 수신한 모든 노드에서 요청을 처리하지만, 응답은 보내지 않는다. 또한, Modbus 요청 정보에는 통신 오류를 검출하기 위한 코드를 포함한다.

Modbus의 Frame Format

통신 네트워크의 종류와 요청 정보의 형식에 따라 여러가지 프레임 포맷이 존재한다. Modbus RTU는 시리얼 통신망을 이용하며, 프레임에서는 이진정보를 사용한다. Modbus Ascii도 시리얼 통신망을 이용하지만, 프레임에 ascii 문자를 넣어 통신한다. 즉 0을 넣으면, 실제 프레임에는 0의 ascii 코드인 48이 한 바이트를 차지하게 된다.

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 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

Modbus/TCP의 unit identifier는 modbus 게이트웨이 내부의 RTU 장비들을 지칭할 목적으로 사용되며, 이런 경우가 아니라면 IP 주소를 사용해 목적지를 인식할 수 있으므로 사용되지 않는다. 바이트 순서는 빅 엔디언을 사용한다. 즉 첫번째 바이트가 MSB이다.

프레임 포멧의 Function code와 data부분을 특별히 Protocol Data Unit (PDU)라고 부르며, 위 프레임 포맷 표에서 Name 부분에 푸른색으로 표시된 부분이 PDU이다. PDU는 Request PDU, Response PDU, Exception Response PDU의 3가지 종류가 정의되어 있다.

Modbus에서 지원하는 기능 코드

읽기와 쓰기를 비롯한 다른 몇몇 기능들이 아래 표에 정리되어 있다. 프로토콜이 만들어진 초창기부터 있었던 기능들은 굵은 글자로 표시되어 있으며, 1~6까지의 기능 코드를 갖는다.

Function type . . Function name Function code
Data Access Bit access Physical Discrete Inputs Read Discrete Inputs 2
. . Internal Bits

or Physical Coils

Read Coils 1
. . . Write Single Coil 5
. . . Write Multiple Coils 15
. 16-bit access Physical Input Registers Read Input Register 4
. . Internal Registers

or Physical Output Registers

Read Holding Registers 3
. . . Write Single Register 6
. . . Write Multiple Registers 16
. . . Read/Write Multiple Registers 23
. . . Mask Write Register 22
. . . Read FIFO Queue 24
. File Record Access . Read File Record 20
. . . Write File Record 21
Diagnostics . . Read Exception Status 7
. . . Diagnostic 8
. . . Get Com Event Counter 11
. . . Get Com Event Log 12
. . . Report Slave ID 17
. . . Read Device Identification 43
Other . . Encapsulated Interface Transport 43

modbus는 센서나 LED등을 모니터링하고 제어하기 위한 특수한 data type들을 제공한다. 다음 표에 data type들을 정리하였다. 이 표는http://jamod.sourceforge.net/kbase/protocol.html 에서 가져온 것이다. java 로 구현한 modbus에 대한 문서이며, 볼 만한 내용들이 있다.

 

Name Type Access Visual
Discrete Input single bit read-only discrete_input
Discrete Output (Coils) single bit read-write discrete_output
Input Registers 16-bit word read-only input_register
Holding Registers (Registers) 16-bit word read-write holding_register

출처: http://system-monitoring.readthedocs.io/en/latest/modbus.html

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중