본문 바로가기
전자

MODBUS 통신 표준규격

by Begi 2019. 7. 12.
반응형

MODBUS

MODBUS 규격은 다음 웹 페이지에서 볼수 있다.

http://www.modbus.org/specs.php

 

MODBUS는 RS-485 (또는 RS-232)을 사용하는 방식과 TCP/IP를 사용하는 MODBUS TCP/IP가 있다. MODBUS TCP/IP는 IP를 사용하기 때문에 MODBUS에서 Address가 삭제되었다.

 

MODBUS는 바이너리를 사용하는 RTU 모드와 텍스트를 사용하는 ASCII 모드가 있다.

 

MODBUS 동작

MODBUS는 하나의 Master와 다수의 Slave로 구성된다. Master에서 Request하고 Slave에서 Response하는 방식으로 통신한다.

 

EOT (End of Transmission) 검출

RTU 모드에서는 3.5 character 시간 동안 데이터가 없을 때를 End of Frame으로 판단한다. 한 프레임 내에서 character 사이는 1.5 character 시간 이하여야 한다. Character는 UART에서 1개 데이터를 의미한다.

 

ASCII 모드에서는 CR + LF (0x0D + 0x0A)의 2 바이트를 EOT 문자로 사용한다.

 

Modbus ASCII

Modbus ASCII의 프레임은 다음과 같다.

 

Start  Address  Function  Data  LRC  End 

(3Ah)
2 char  2 char  N char  2 char  CR LF 
(0Dh 0Ah)

 

Modbus RTU와 다른 점은 Start 문자와 End 문자가 있고 CRC 대신 LRC을 사용하는 것이 다른다. Modbus RTU에서는 3.5 char 동안 데이터가 없으면 프레임의 끝으로 인식하지만 Modbus ASCII에서는 CR LF으로 프레임 끝을 인식한다.

 

LRC는 Address부터 Data까지의 모든 바이트를 더한 후 2's complement하여 계산한다. (Checksum)

 

Address, Function, Data는 Hi 바이트, Low 바이트 순서로 전송되지만 LRC는 반대로 Low 바이트, Hi 바이트 순서로 전송된다.

 

Modbus TCP/IP

TCP/IP를 통해 Modbus 통신을 하는 규격이다. TCP 포트번호는 502번을 사용한다.  Mac 프로토콜에서 CRC가 있기 때문에 Modbus TCP/IP에서는 CRC가 제거되었다.

 

Modbus 구현

Modbus 프로토콜은 비교적 단순하기 때문에 외부 라이브러리를 사용하지 않고 프로그래머가 직접 프로그래밍할 수 있다. CRC 코드는 Modbus 스펙에 나와있다.

 

자료

https://www.modbustools.com/modbus.html

 

반응형

댓글