Modbus Protocol

dyeon-dev·2023년 8월 3일
0

Modbus란?

자동화 시스템 및 산업용 장비를 위한 통신 프로토콜이다.
Modbus는 간단하고 효율적인 통신을 위해 설계되었으며, 주로 센서와 액추에이터를 포함한 장치들 간의 데이터를 전송하기 위해 SCADA 식의 네트워크 통신에 사용된다. 다양한 응용분야에서 사용되며, 컴퓨터 기반 시스템과 장치들 간의 통신에 널리 사용된다.

요청-응답 구조

Master-Slave 구조를 따르며, Master는 Slave에 요청을 보내고 응답을 기다린다. Master는 정보의 흐름을 전적으로 컨트롤할 수 있고, 현대식 TCP/IP 네트워크에서도 상당 부분을 컨트롤 할 수 있어 일부 디자인에 유용하다.

Modbus에서 요청은 여러 층으로 된 데이터 세트이다. 첫 번째 계층은 Application Data Unit(ADU)으로 ASCII, Remote Terminal Unit(RTU), TCP/IP 세 가지가 있다.
TCP는 소프트웨어에서 Modbus의 요청과 응답을 효율적으로 처리하고, 각 요청에 대한 전용 연결과 식별자를 통해 보다 효율적인 네트워킹을 구현하는 현대식 포맷이다.
RTU와 ASCII는 좀 더 오래된 시리얼 ADU 포맷으로, 차이점은 RTU는 바이너리 형식으로 데이터를 표현하고, ASCII는 ASCII 문자로 요청을 보낸다.
각 ADU 내에는 Modbus 프로토콜의 핵심인 Protocol Data Unit(PDU)이 있다. 각 PDU에는 함수 코드와 연관 데이터가 포함된다. 각 함수 코드에는 잘 정의된 응답이 있고, 이 함수 코드를 슬레이브에 보내지는 명령이라고 생각하면 된다.
-> Modbus 시리얼의 경우 사전에 전송속도(1200bps ∼ 115.2Kbps)를 설정하거나 전송방식(RTU, ASCII)을 선택할 수 있어야 함

Modbus는 예외를 위한 특정 PDU를 정의함으로써 에러 발생을 마스터에게 알린다.
-> 시나리오 작성 생성 및 편집 기능 구현

Modbus를 사용하는 어플리케이션의 관점에서 보면, 마치 ADU가 존재하지 않는 것처럼 데이터가 표시되어야 한다. PDU 변환!
-> GUI 인터페이스 구현

Modbus 데이터 모델

데이터의 접근을 간단하고 유연하게 처리한다.
원래 Modbus는 두 가지 데이터 타입(boolean 값, 부호없는 16비트 정수) 지원한다.
SCADA 시스템에서 일반적으로 임베디드 장치는 입력으로 정의된 특정 값(게인 또는 PID 설정 등)을 가지며, 다른 값으로는 전류 온도 또는 밸브 위치와 같은 출력값이 있다. 이러한 요구를 충족하기 위해 Modbus 데이터 값은 4개의 범위로 나뉜다. (표 1 참조) 슬레이브는 각 범위에서 많게는 65,536개의 요소를 정의한다.


여러 경우, 센서 및 기타 장치는 단순히 불리언 및 부호 없는 정수가 아닌 다른 타입의 데이터를 생성한다. 일반적으로 슬레이브 장치는 이러한 더욱 큰 데이터 타입을 레지스터로 변환한다. 예를 들어, 압력 센서는 32비트 부동점 값을 2개의 16비트 레지스터로 나눌 수 있다.

슬레이브는 지원하는 각 데이터 타입을 개별 메모리에 저장하며, 마스터가 접근할 수 있는 데이터 요소의 개수를 제한한다. 이러한 유연성은 Modbus 함수 코드의 잘 정의된 동작을 통해 데이터가 표시되기 때문에 가능한 옵션이다.

Modbus 함수 코드

Modbus 함수 코드는 마스터가 데이터에 어떻게 접근하며 변경하는지를 결정한다. 슬레이브가 함수 코드를 수행하도록 요청받으면, 함수의 파라미터를 사용하여 정의된 동작을 실행한다.

1개의 댓글

comment-user-thumbnail
2023년 8월 3일

개발자로서 성장하는 데 큰 도움이 된 글이었습니다. 감사합니다.

답글 달기