본문 바로가기
Study/Network & Protocol

[MODBUS] MODBUS ?

by v-ni 2022. 11. 15.

MODBUS는 client/server 또는 request/reply 아키텍처 기반의 응용계층 프로토콜이다.

 

MODBUS 는 산업용 프로토콜로 PLC통신등에 주로 사용되는 표준이 되는 프로토콜이다.

MODBUS 직렬 라인 프로토콜(Serial Line protocol)마스터(master)슬레이브(slave) 사이의 프로토콜이다. 

MODBUS 어플리케이션(application) 레이어 전달 프로토콜은 OSI 모델의 7 레벨에 위치하며, 버스(bus)나 네트워크(network)로 연결된 장비들간의 클라이언트(client)/서버(server) 통신을 제공한다. 

 

클라이언트 역할의 MODBUS 직렬 선로는 직렬 버스의 마스터에 의해 제공되며, 슬레이브 노드는 서버 역할을 한다.

MODBUS 는 마스터(예: PC)와 다수의 슬레이브(예: 측정 및 제어 시스템)를 연결한다.

 

MODBUS에는 오직 하나의 마스터가 버스에 연결되어 있으며, 최대 247개의 슬레이브가 같은 직렬 버스에 연결될 수 있다.

MDOBUS 통신은 항상 마스터에 의해 시작된다. 슬레이브 노드는 마스터 노드로부터의 요청없이 데이터를 전송할 수 없다. 또한 슬레이브 노드들 간에 통신이 이루어질 수 없다. 

 

마스터 노드는 오직 한번에 하나의 MODBUS 처리를 수행한다.

유니캐스트(unicast) 모드마스터개개의 슬레이브를 호출한다. 요청을 받고 처리한 후 슬레이브마스터에게 메시지(응답)을 보낸다. 

이 모드에서 MODBUS 트랜잭션(transaction)은 두 메시지로 구성된다. 

 

마스터로부터의 요청과 슬레이브의 응답이다. 슬레이브단일 주소(1~247)를 가지며, 슬레이브 노드로부터 독립적으로 호출된다.


방송(broadcast)모드마스터모든 슬레이브를 호출할 수 있다.

마스터가 보낸 방송에 대한 응답은 돌아오지 않는다.방송 요청은 반드시 명령을 작성한다.

모든 장비들은 함수(function)작성을 위해 방송을 반드시 수신해야 한다. 주소가0이 되면 방송으로 간주한다.

 


다음은 모드 버스에 사용되는 modbus 통신의 종류는 크게 Modbus Serial, Modbus plus, Modbus TCP/IP 등 세 가지로 나누어집니다. 

 

Modbus Serial

- RS 232C 기반의 Modbus와

- RS 422 기반의 Modbus 

- RS 485 기반의 Modbus 

 

Modbus의 전송방식에 따라

- RTU(Remote Terminal Unit)  : 일반적으로 산업현장에서 많이 사용하는 바이너리 데이터형 전송 방식이다.

- ASCII(American Standard Code For Information Interchange)  : ASCII문자를 사용하는 텍스트형 전송방식이다.

- TCP/IP : Modbus RTU 방식과 유사하지만 TCP/IP 계층에서 사용된다.

 

일반적으로 산업현장에서는 Modbus RTU 전송방식이 주로 사용되고 있으나 RTU와 ASCII 전송방식을 선택하여 사용하는 제품도 많이 사용 되어 지고 있습니다. 요즘에는 TCP방식도 나와있습니다.

 

MODBUS 256개의 서로 다른 주소 공간을 가진다.


프레임의 구성은 Application Data Unit인 ADU와 Protocol Data Unit 인 PDU 로 구성되어 있다.

* ADU = Address + PDU +CRC

* PDU = Function code + Data

 


MODBUS 어플리케이션 프로토콜은 아래와 같은 통신 레이어와 독립된 단순한 PDU(Protocol Data Unit)으로 정의된다.


특정 버스나 네트워크의 MODBUS 프로토콜 맵핑(mapping)PDU의 몇 개의 추가 필드에 삽입한다.

MODBUS 트랜잭션을 시작하는 클라이언트는 MODBUS PDU를 만들고, 적절한 통신 PDU를 만들기 위해 필드를 추가한다.
MODBUS 직렬 선로에서 주소 필드는 오직 슬레이브 주소를 포함한다.
이전 부분에서 표시된 대로 슬레이브 노드 주소들의 범위는 0에서 247이다. 

개개의 슬레이브 장비들은 1~247의 범위에서 주소가 할당된다. 

마스터는 메시지의 주소 필드(Address field)에 슬레이브 주소로 대신함으로써 슬레이브를 호출한다. 

 

슬레이브가 응답을 보내면, 슬레이브가 가지고 있는 주소가 응답 주소 필드에 위치하고, 

마스터슬레이브가 응답한 것을 알게 된다.


Function code는 어떤 종류의 기능에 따른 동작인지에 대한 서버를 가리킨다.

Function code는 요청과 응답 파라미터의 데이터 필드(data field)가 뒤따라오게 할 수 있다.

 

에러 확인 필드(error checking field)는 메시지 내용에 따라 동작되는 Redundancy Checking 계산의 결과다. 

계산 방법은 두 종류가 있는데 RTU(Remote Terminal Unit)는 CRC(Cyclic Redundancy Check)를, ASCII는 LRC(Longitudinal Redundancy Check)를 사용한다.


RTU : bit 단위로 전송
ASCII : character 단위로 전송
CRC : FCS(Frame Check Sequence)를 더하여 미리 정한 숫자로 나누어 나머지 값으로 판별
LRC : 송신 측과 수신 측 LRC를 서로 비교

 

 

Modbus Function
 
Modbus Control 기능은 Modbus 에 특정 데이터를 읽고 쓰는 기능을 하는 프로그램으로 세부 내용은 다음과 같다.

 

 

데이터 정보는 SLAVE DEVICE에 네 가지 다른 테이블들로 저장 된다. 

두 가지 테이블은 on/off 값을 가지는 0,1을 저장 하는 coils,  

워드를 저장 할 수 있는 registers로 나뉘어 지며 

 

coils : read-only

registers :  read-write table

로 구성된다.
 


각 테이블은 9999 values를 가지며 

coil은 1bit이며 address 는 0000~ 270E 이며 

register 는 1word = 16 bits = 2bytes 이고 address 0000 and 270E이다
 
이 구조에 맞게 Modbus Control은 데이터 주소를 입력 받아 사용 한다.

 

 

본 내용은 다른 블로거의 내용을 가져와서 학습하며 재배치 하는 과정에서 +- 되기도 합니다.

원본은 아래 링크를 확인해 주세요

참조 : https://m.blog.naver.com/unizang/221223726282