본문 바로가기
Communication Interface&Protocol/시리얼 통신

시리얼 통신 : MODBUS

by 누워있는말티즈 2022. 9. 3.

MODBUS 통신 프로토콜은 1997년 현재의 Schneider Electric의 modicon사에서 공장 내 기계 자동화 및 제어를 위해 만든 산업용 통신 프로토콜이다. 네트워크 7계층 중 응용프로그램 계층에 속한다.


MODBUS 통신은 크게 세 가지로 나누어진다.

1) MODBUS 시리얼

  1. MODBUS Plus
  2. MODBUS TCP/IP

위 세 가지 중 현재 시리얼 통신에 대한 이야기를 이어나가 1) MODBUS 시리얼에 대한 내용을 다루도록 한다. 시간이 나면 나머지도 정리해보겠다.


MODBUS 시리얼 통신은 사용하는 통신 규격에 따라 RS-232C기반, RS-422기반, RS-485기반의MODBUS로 분류되며 인코딩 방식에 따라 MODBUS-RTU와 MODBUS-ASCII가 있다.

  • ASCII : 1바이트에 2개의 아스키 코드를 기록하여 전송하여 패킷에 담긴 데이터량이 적다. 다만 디버깅 등의 과정에서 사람이 내용을 읽어내기 수월하다. LRC 에러 체크를 사용한다.
  • RTU : binary 데이터를 그대로 bit 단위로 전송한다. CRC 에러체크를 사용한다.

일반적인 산업 현장에서는 MODBUS-RTU가 주로 사용된다.

MODBUS Serial 구성/특징

  1. Master/Slave 구조
  • 하나의 Master가 Request하면 해당되는 Slave가 Response 하는 방식
  • I2C처럼 하나의 Master에 여러 개의 Slave가 MODBUS Address로 식별되어 연결이 가능하다.
  • 최대 247개까지 연결 가능
  1. Master Request Mode
  • Unicast : 1 ~ 247번 Slave 중 하나를 지정하여 request
  • Broadcast : request address 0 , 모든 slave에 동시 request
  1. Address
  • Slave Address는 1 ~ 247 을 사용한다.
  • 248 ~ 256 : reserved
  1. Baud Rate
  • 1200, 2400, 4800, 9600, 19200, 115200

Message Format

일반적인 MODBUS 메시지의 frame은 slave address, data의 의미를 결정하는 function code, data, 그리고 error check 영역으로 구성된다.

Function Code에 따라 디바이스에 접근하는 레지스터가 달라지는데 이는 아래와 같은 메모리맵을 보면 이해가 쉽다.

데이터를 효율적으로 사용하기 위해 16진수의 구성이 주로 사용된다.

Example : WIT-MOTION WT901C485 Inclinometer

MODBUS Write : 센서에 명령 전달(baud 변경, modbus addr 변경, calibration 등)

MODBUS Read : 센서 데이터 읽어옴

위 프로토콜을 이용한 제어 코드는 아래 링크에서 확인할 수 있다.

https://github.com/wkdalswns0427/WIT_Motion_gyroscope/tree/master/ESP32_FIRMWARES/WT2_OnlySensing_NO_ETH

 

GitHub - wkdalswns0427/WIT_Motion_gyroscope: WIT-motion made gyroscope source code (WT901*, HWT905* compatible)

WIT-motion made gyroscope source code (WT901*, HWT905* compatible) - GitHub - wkdalswns0427/WIT_Motion_gyroscope: WIT-motion made gyroscope source code (WT901*, HWT905* compatible)

github.com

Error Check - CRC

CRC(Cyclic Redundancy Check)

K비트의 메시지에 N비트의 Frame Check을 더하여 미리 정해진 숫자로 나누었을 때 나머지가 0이면 에러가 없는 것으로 판단하는 Error check 방법이다. 메시지 마지막 두 비트를 주로 싸용하여 CRC high, CRC low 비트로 나누어 전송한다.

아래 링크가 CRC 계산 맛집이다.

Sunshine's Homepage - Online CRC Calculator Javascript

반응형

'Communication Interface&Protocol > 시리얼 통신' 카테고리의 다른 글

시리얼 통신 : UART  (0) 2022.11.11
시리얼 통신 : UART  (0) 2022.09.02
시리얼 통신 : I2C(IIC)  (0) 2022.09.02
시리얼 통신 (개요)  (0) 2022.08.31

댓글