# Modbus

Modbus는 1979년 Modicon(현재 Schneider Electric의 일부)에서 처음 개발한 통신 프로토콜이다. 주로 산업 자동화 시스템에서 널리 사용되며, 마스터-슬레이브 구조를 기반으로 데이터를 전송한다. Modbus는 직렬 통신, 이더넷을 포함한 여러 물리적 통신 매체에서 동작할 수 있다. 로봇 통신에서는 효율적이고 신뢰성 높은 데이터 전송을 위해 Modbus를 채택할 수 있다.

#### Modbus 프로토콜의 구조

Modbus 프로토콜은 메시지 프레임의 구성에 대해 명확한 정의를 제공한다. 기본적으로 요청(request)와 응답(response)으로 구성되며, 각 메시지는 주소, 함수 코드, 데이터, 그리고 오류 검출 코드로 이루어진다.

* **주소 필드**: 8비트 필드로, 메시지를 수신할 장치의 주소를 나타낸다.
* **함수 코드**: 슬레이브가 수행해야 할 작업을 정의한다. 예를 들어, 레지스터 값을 읽거나 쓰는 작업이 있다.
* **데이터 필드**: 명령에 필요한 추가 정보를 포함한다. 읽기 작업의 경우, 시작 주소와 읽어올 레지스터의 수를 포함한다.
* **오류 검출 필드**: CRC(Cyclic Redundancy Check) 방식으로 오류를 검출한다.

#### Modbus 통신의 모드

Modbus는 여러 통신 모드를 제공한다. 주요 모드는 RTU(모드 버스 원격 터미널 유닛)와 ASCII(모드 버스 ASCII) 모드가 있다.

* **RTU 모드**: 이 모드는 이진 형식으로 데이터를 전송하며, 각 바이트는 8비트로 구성된다. 효율적이며, 데이터 전송 속도가 빠르다. 메시지 사이에 정확한 간격이 요구된다.
* **ASCII 모드**: 각 바이트가 2개의 ASCII 문자로 표현된다. 메시지가 가독성이 높으며, 데이터 전송이 상대적으로 느리다. 주로 오래된 시스템에서 사용된다.

#### Modbus 통신의 물리적 계층

Modbus는 다양한 물리적 계층에서 작동할 수 있다. 대표적으로 RS-232, RS-485, 그리고 TCP/IP가 있다.

* **RS-232**: 포인트 투 포인트 통신에 사용된다. 짧은 거리에서 신호 전송이 안정적이다. 하나의 마스터와 하나의 슬레이브 간 통신에 적합한다.
* **RS-485**: 멀티 드롭 네트워크에서 사용된다. 여러 장치 간 통신이 가능하며, 최대 32개의 장치가 하나의 네트워크에 연결될 수 있다. 장거리 통신에도 적합한다.
* **TCP/IP**: 이더넷 기반 통신에 사용된다. 네트워크 확장성이 높으며, 인터넷을 통한 원격 제어가 가능한다.

#### Modbus의 전송 계층 및 응용 계층

Modbus의 전송 계층은 데이터 패킷의 올바른 전송을 보장하며, 응용 계층은 특정 장치에 대한 명령을 처리한다. 전송 계층은 패킷의 유효성을 검사하며, 오류 발생 시 재전송을 요청한다. 응용 계층에서는 프로토콜이 정의한 함수 코드에 따라 특정 동작을 수행한다.

#### Modbus 통신의 시간 지연 및 오류 처리

로봇과 같은 실시간 시스템에서 통신의 시간 지연은 중요한 요소이다. Modbus는 슬레이브가 응답을 준비할 수 있는 타임아웃 메커니즘을 가지고 있다. 슬레이브가 정해진 시간 내에 응답하지 않으면, 마스터는 통신 오류로 간주하고 재전송을 시도할 수 있다. CRC 기반의 오류 검출 방식은 신뢰성을 높인다.

#### Modbus의 장점과 한계

Modbus는 간단하고 확장성이 뛰어나며, 다양한 하드웨어와 호환된다. 그러나 데이터 전송 속도가 상대적으로 느리고, 보안 기능이 부족한다. 특히, 로봇 통신에서는 실시간성과 보안성이 중요한데, 이러한 면에서 Modbus는 추가적인 보완이 필요하다.

#### 관련 자료

* Modicon. "MODBUS Protocol Reference Guide". 1996.
* Lawrence M. Thompson. "Industrial Data Communications". ISA, 2008.
* S. Mackay, E. Wright, D. Reynders, J. Park. "Practical Industrial Data Networks: Design, Installation and Troubleshooting". Newnes, 2004.
