본문 바로가기
Embedded System/통신

[프로토콜] Modbus(모드버스)

by MachineJW 2022. 12. 27.

모드버스 프로토콜

1. Modbus(모드버스)란 무엇인가?

모드버스는 프로토콜이다. 즉, 어떤 통신을 위한 규약이라는 것이다.

모드버스는 산업 설비기기와의 통신을 위해 만들어진 프로토콜이다.

만약, 어떠한 산업용 장비와 연동을 하려고 한다면 모드버스 프로토콜을 이용하는것이 매우 쉬운 방법이 될 것이다.

모드버스 프로토콜을 사용하기 위해서는 물리적으로 RS485, RS232, TCP/IP 인터페이스가 있어야 한다.

즉, 설비 인터페이스와 설비와 연동하려는 디바이스가 기본적으로 위의 물리적 인터페이스 중 하나라도 있어야 한다는 것이다. 또한 설비인터페이스는 RS485 인데 연동하려는 IoT 디바이스가 TCP/IP라면 중간에 프로토콜 변환 역할을 하는 게이트웨이가 필요하다. 

 

2. Modbus(모드버스)의 종류

 

(1) Modbus RTU

RS485, RS232, RS422 통신을 사용하며, 대부분 모드버스 RTU는 RS485 통신을 많이 사용한다.

RS232은 1대1 통신만 가능하고, RS422은 1대다 전이중 통신이지만 산업현장에서 비용적으로 비효율적이기 떄문에,

가장 저렴하고 무난한 방식인 RS485 통신을 많이 사용한다.

 

(2) Modbus ASCII

RTU와 똑같은 통신규격인 RS485, RS232, RS422 통신을 사용한다. 그러나 주고받는 데이터가 아스키코드의 데이터형식이라는 것에 큰 차이점이 있다.

 

(3) Modbus TCP

TCP/IP를 사용하는 프로토콜이다. 즉, 인터넷 망을 사용하는 것처럼 LAN(RJ45) 이더넷이나, 무선 WiFi를 사용하여 통신하는 프로토콜이다. RTU 프로토콜에서는 마스터/슬레이브로 동작하지만, TCP에서는 서버/클라이언트로 동작한다.

 

*만약 RTU와 TCP로 통신하려고 한다면, 중간에 프로토콜을 변환해주는 게이트웨이 장비가 필요하다.

  

3. Modbus(모드버스) 프로토콜의 동작

모드버스 프로토콜은 Master와 Slave의 구조로 동작한다

모드버스 TCP만 부르는 말이 조금 다른데, Server와 Client로 부를 뿐, 동작하는 구조 방식은 똑같다.

* Master가 Server, Slave가 Client로 생각 할 수 있지만,  모드버스에서는 어떠한 요청에 의한 응답의 구조를 갖는다.

   모드버스에서 Master는 요청하는 쪽이므로 Client가 되고, Slave는 응답하는 쪽이므로 Server가 된다.

 

RTU나 ASCII 방식에서는 어떤 Slave에게 요청을 할지 Slave ID (국번,S-ID) 로 구분하고

TCP방식에서는 IP주소와 포트번호로 어떤 Server에게 요청을 할지 구분한다.

4. Modbus(모드버스) 슬레이브 메모리 맵

모드버스 프로토콜에서 메모리 맵은 어떤 주소로, 어떤 값을 주면 그에 맞은 응답을 할 수 있도록 사전에 정의한 설계도와 같다. 설비연동하려는 장비(슬레이브)마다 각각의 기능이 다 다르기 때문에 메모리 맵도 다 다르다.

설비연동을 하려는 장비가 모드버스를 지원한다면, 이 메모리 맵 테이블도 같이 제공되어야 한다.

그래야 개발자가 어떤 주소로 어떤 값을 주고, 읽거나 쓸 수 있기 때문이다. 연동하려는 장비(슬레이브)의 메모리맵이 제공되지 않거나, 구할 수 없다면 다른 방향으로 연동을 해야하는 것이 현명하다.

 

코일/ 레지스터 용도 기능함수
1~10000 코일 읽기/쓰기 전용 1,5,15
10001~20000 코일 읽기 전용 2
30001~40000 레지스터 읽기 전용 4
40001~50000 레지스터 읽기/쓰기 전용 3,6,16

어떤 요청에 응답할 슬레이브에서는 이 영역에 따라서 메모리 맵을 구성한다.

마스터는 기능함수를 사용하여 그 메모리 영역에 접근하게 되고, 메모리 영역의 용도에 맞게 읽기와 쓰기를 할 수 있다.

읽기는 말 그대로 그 해당 영역의 데이터를 읽을 수 있다는 것이고, 쓰기는 수정이 가능하다는 데이터 영역이라는 것이다.

코일(Coil) : 1비트 단위의 Boolean 데이터 (0또는1) ex.슬레이브 장비의 on/off

레지스터(Register) : 2byte 단위의 정수 형태의 데이터 ex.슬레이브 장비의 온도 값

5. Modbus(모드버스) 마스터 기능 함수

위에서 설명했다시피, 슬레이브의 메모리 맵에 따라서 데이터를 읽고 쓸수 있는 것은 마스터이다.

마스터에서는 기능 함수를 통하여, 슬레이브의 메모리 영역의 데이터를 가져오거나, 수정 할 수 있다.

슬레이브 쪽에서는 그 메모리 영역이 수정되면 어떠한 동작을 할 수 있게 설계를 하였을 것이다.

그러므로, 마스터는 알맞은 기능함수를 통하여 수정하여 연동하려는 해당 장비(슬레이브)를 제어도 할 수 있을 것이다.

코드 01 :  1~10000 까지의 슬레이브 메모리 영역(코일 읽기/쓰기가 가능한 영역)에 있는 코일 데이터를 읽는 함수

코드 02 : 10001~20000까지의 슬레이브 메모리 영역(코일 읽기만 가능한 영역)에 있는 코일 데이터를 읽는 함수

코드 05 : 1~10000까지의 슬레이브 메모리 영역 (코일 읽기/쓰기가 가능한 영역)에 있는 코일 데이터를 수정하는 함수

코드 15 : 1~10000까지의 슬레이브 메모리 영역 (코일 읽기/쓰기가 가능한 영역)에 있는 여러개의 데이터를 수정하는 함수

코드 03 : 40001~50000까지의 슬레이브 메모리 영역 (레지스터 읽기/쓰기가 가능한 영역)에 있는 데이터를 읽는 함수

코드 04 : 30001~40000까지의 슬레이브 메모리 영역 (레지스터 읽기만 가능한 영역)에 있는 데이터를 읽는 함수

코드 06 : 40001~50000까지의 슬레이브 메모리 영역 (레지스터 읽기/쓰기가 가능한 영역)에 있는 데이터를 수정하는 함수

코드 16 : 40001~50000까지의 슬레이브 메모리 영역 (레지스터 읽기/쓰기가 가능한 영역)에 있는 여러개의 데이터를 수정하는 함수