author
Bobby Brown
업데이트 2024-12-02
Modbus 통신 프로토콜이란 무엇인가요? Modbus RTU 한 번에 이해하기

본문 목차


1. 통신 프로토콜(Protocol)이란?

통신 프로토콜(Communication Protocol)은 산업 자동화 분야에서 서로 다른 장비 간 데이터 교환 방식을 규정하는 데 사용됩니다. 간단히 말해, 통신 프로토콜은 전자 장비 간 소통의 언어와 같습니다. 일상생활에서 우리가 상대방의 언어를 이해하지 못하면 의사소통이 불가능한 것처럼, 산업용 전자 장비도 서로 다른 통신 프로토콜을 사용하면 정보를 전달할 수 없습니다.

2. Modbus 통신 프로토콜이란?

통신 프로토콜은 여러 가지가 있으며, Modbus는 산업 자동화에서 널리 사용되는 프로토콜 중 하나입니다. 이는 서로 다른 장비 간 통신을 가능하게 하는 공통 언어와 같습니다.
인간이 의사소통을 위해 언어뿐만 아니라 공기를 매개로 소리를 전달해야 하듯, 전자 장비 간에도 데이터를 교환하기 위한 통신 프로토콜 외에 구문, 의미 및 형식을 정의하는 통신 표준(Communication Standards)이 필요합니다.
산업 통신에서 흔히 접하는 RS232, RS485, RS422, 이더넷(Ethernet) 등은 물리적 계층에 해당하는 통신 표준이고, Modbus는 이러한 물리적 계층에서 다양한 환경에 적용할 수 있는 통신 프로토콜입니다. 본 글에서는 Modbus 통신 프로토콜에 대해 자세히 설명하겠습니다.
 
[1]

3. Modbus 통신 프로토콜 종류

Modbus RTU vs Modbus TCP
Modbus 통신 프로토콜은 사용되는 통신 표준에 따라 직렬 통신과 이더넷 통신 두 가지로 나눌 수 있습니다.
직렬 통신은 데이터를 비트 단위로 하나씩 전송하는 방식이며, Modbus RTU와 Modbus ASCII 두 가지 프로토콜로 구성됩니다:
1. Modbus RTU: 통신 표준은 직렬 통신 방식이며, 이진법으로 데이터를 전송합니다. 주로 RS232, RS485, RS422 직렬 인터페이스와 함께 사용되며, 짧은 거리와 다중 장비 환경에 적합합니다.
2. Modbus ASCII: 통신 표준은 직렬 통신 방식이며, ASCII(미국 표준 코드)를 사용하여 데이터를 인코딩합니다. ASCII 인코딩은 사람이 읽을 수 있는 텍스트로 변환이 용이하지만, 더 많은 저장 공간을 요구합니다.
3. Modbus TCP: 통신 표준은 이더넷 통신 방식이며, TCP/IP 프로토콜에 기반하여 네트워크를 통해 데이터를 전송합니다. 주로 네트워크 연결이 필요한 자동화 장비나 원격 모니터링 시스템에서 사용됩니다.
Modbus RTU와 Modbus ASCII의 실제 전송 속도는 RTU가 항상 더 빠르다고 단정할 수 없으며, 이는 사용된 직렬 인터페이스(RS232, RS485 등)의 보드레이트 설정에 따라 달라집니다. Modbus RTU는 이진법으로 데이터를 더욱 간결하게 인코딩하여 적은 데이터 양을 전송하므로 대역폭이 제한된 환경에 적합합니다. 반면 Modbus ASCII는 ASCII 문자를 사용하여 더 많은 정보를 전송하므로 데이터 전송 속도가 상대적으로 느립니다.

[2][3]

4. 왜 많은 PLC가 Modbus 프로토콜을 선택하는가?

많은 제조업체가 PLC에서 Modbus 통신 프로토콜을 선택하는 이유는 먼저 Modbus가 구조가 간단하고, 라이선스 없이 무료로 사용할 수 있기 때문입니다.
구조의 단순성과 무료 라이선스 외에도 Modbus의 주요 장점은 다양한 인터페이스(RS232, RS485, TCP/IP 등)를 지원하며, 트위스트 페어, 광섬유, 무선 등 여러 물리적 계층 전송 방식에 적합하다는 점입니다.
3장에서 언급한 바와 같이, Modbus 프로토콜은 여러 종류로 나뉘며, 각각 특정 네트워크와 결합하여 사용할 수 있습니다. 예를 들어, 현장 네트워크에서 Modbus-RTU, Profibus, CC-Link, CAN은 주로 RS485 네트워크를 통해 통신하며, 주-종 구조(master-slave) 또는 컨트롤러와 장비, 노드 간 연결을 지원합니다.
반면, 이더넷 환경에서는 Modbus-TCP, PROFINET, EtherCAT, EtherNet/IP 등의 프로토콜이 클라이언트와 서버, 또는 컨트롤러와 장비 간의 효율적인 통신을 수행할 수 있습니다.
종합적으로 Modbus는 이더넷 및 RS485 네트워크와의 호환성이 뛰어나 산업 자동화 시스템의 요구에 매우 적합하며, 이러한 이유로 Modbus는 현재 많은 제조업체에서 PLC의 주요 통신 프로토콜로 선택되고 있습니다.
프로토콜 종류 프로토콜 이름 네트워크 역할
산업용 이더넷 Modbus-TCP 이더넷 클라이언트와 서버
PROFINET 이더넷 컨트롤러와 장비
EtherCAT 이더넷 마스터와 슬레이브
EtherNet/IP 이더넷 컨트롤러와 장비
현장 네트워크 Modbus-RTU RS485 마스터와 슬레이브
Profibus RS485 마스터와 슬레이브
CC-Link RS485 마스터와 슬레이브
CAN RS485 컨트롤러와 노드

*주요 프로토콜 및 기능 역할

[4]

5. Modbus RTU 동작 원리

Modbus RTU 통신 프로토콜은 "마스터-슬레이브 구조"를 기반으로 데이터 교환 방식을 정의합니다. 이는 모든 데이터 교환 및 통신이 하나의 주 장치(master)에 의해 제어되고 시작되며, 하나 이상의 종 장치(slave)가 주 장치의 명령을 수신하고 응답합니다.
마스터 장치(master)가 슬레이브 장치(slave)에 요청을 보낼 때, 요청에는 특정 슬레이브 주소가 포함됩니다. 이 주소는 모든 슬레이브 장치에 이 명령이 어떤 장치에 보내지는지 알려줍니다. 모든 슬레이브가 요청을 수신하지만, 지정된 주소의 슬레이브만 응답합니다.
예를 들어, 3개의 슬레이브 장치가 있고 주소가 각각 1, 2, 3이라고 가정합니다:
  • 마스터가 주소 2의 슬레이브에 요청을 보내면, 주소 2의 슬레이브만 응답하고 나머지는 응답하지 않습니다.
  • 방송 모드(요청 중 슬레이브 주소가 0인 경우)를 사용할 경우, 모든 슬레이브(1, 2, 3)가 해당 명령을 실행하지만 마스터에 응답하지 않습니다.
  • Modbus RTU 마스터-슬레이브 구조

    5-1. Modbus 통신 패킷

    Modbus RTU 통신에서 패킷 구조는 다음과 같은 요소로 구성됩니다:
    • 주소: 명령을 수신할 슬레이브의 주소를 식별합니다.
    • 기능 코드: 슬레이브가 수행해야 할 작업을 나타냅니다. 예: 레지스터 읽기 또는 쓰기.
    • 데이터: 요청과 관련된 데이터를 포함합니다. 예: 읽거나 쓸 레지스터의 주소 및 개수.
    • 오류 검증 코드(CRC): 데이터가 전송 중 손상되지 않았음을 보장합니다. (Modbus TCP는 유사한 패킷 구조를 사용하지만, CRC 대신 TCP/IP 레이어의 검증에 의존합니다.)
    * 이후 섹션에서 실례로 설명됩니다.
    [5]

    5-2. Modbus 프로토콜 데이터 레지스터 유형

    (아래 내용은 Modbus Tools를 바탕으로 작성되었습니다. 더 자세한 레지스터 유형 및 기능 코드 설명은 참고 자료를 참조하세요)
    Modbus 프로토콜은 데이터를 네 가지 주요 유형으로 분류하며, 각 데이터는 기능 코드로 관리됩니다:
    • 디스크리트 입력(Discrete Inputs): 읽기 전용 바이너리 입력 데이터로, 기능 코드 0x02에 해당하며, 장비 상태를 읽는 데 사용됩니다.
    • 코일(Coils): 읽기 및 쓰기가 가능한 바이너리 출력 데이터로, 기능 코드 0x01에 해당하며, 장비의 스위치 제어에 주로 사용됩니다.
    • 입력 레지스터(Input Registers): 읽기 전용 아날로그 입력 데이터로, 기능 코드 0x04에 해당하며, 센서나 기타 입력 장비를 모니터링하는 데 사용됩니다.
    • 홀딩 레지스터(Holding Registers): 읽기 및 쓰기가 가능한 아날로그 데이터로, 기능 코드 0x03 및 0x06에 해당하며, 장비의 설정값이나 상태를 관리하는 데 사용됩니다.
     
    [6]

    5-3. Modbus 기능 코드: 다양한 코드 및 작업

    Modbus 프로토콜은 장비가 데이터를 읽거나 쓰는 방법을 제어하는 여러 기능 코드를 정의합니다. 자주 사용되는 기능 코드와 그 적용은 다음과 같습니다:
    1. 0x01 - 코일 상태 읽기(Read Coils): 장비의 스위치 상태를 읽습니다. 주로 스위치나 릴레이를 모니터링하는 데 사용됩니다.
    2. 0x02 - 디스크리트 입력 상태 읽기(Read Discrete Inputs): 버튼이나 센서 상태와 같은 바이너리 입력을 모니터링합니다.
    3. 0x03 - 홀딩 레지스터 읽기(Read Holding Registers): 장비의 실행 매개변수나 상태를 모니터링합니다. 주로 장비의 설정값이나 실행 데이터를 읽는 데 사용됩니다.
    4. 0x04 - 입력 레지스터 읽기(Read Input Registers): 온도, 압력 등 센서 데이터를 모니터링하는 데 사용됩니다.
    5. 0x05 - 단일 코일 쓰기(Write Single Coil): 단일 장비의 스위치 상태를 제어합니다.
    6. 0x06 - 단일 홀딩 레지스터 쓰기(Write Single Holding Register): 장비 설정값(예: 속도 또는 온도)을 수정합니다.
    7. 0x0F (15) - 다중 코일 쓰기(Write Multiple Coils): 여러 장비의 스위치 상태를 한 번에 제어합니다.
    8. 0x10 (16) - 다중 홀딩 레지스터 쓰기(Write Multiple Holding Registers): 여러 장비의 실행 매개변수를 동시에 설정합니다.
     

    5-4. Modicom 포맷이란?

    Modicom 포맷은 Modbus의 주소 지정 형식을 정의합니다. 이는 특정 주소 범위를 사용하여 서로 다른 레지스터 유형과 기능 코드를 매핑합니다.
    이 설계의 목적은 사용자가 주소를 입력하기만 하면 기능 코드를 수동으로 지정할 필요가 없도록 하여 조작 실수를 줄이고 통신을 더 편리하게 만드는 것입니다.
     
    원본 자료 참조: Modicon Modbus Protocol Reference Guide

    5-5. Modbus 기능 코드에서 40001 / 30001의 의미는?

    Modicom 포맷에 따르면, Modbus는 서로 다른 주소 범위를 사용하여 서로 다른 유형의 레지스터를 표시합니다. 예를 들어, 주소 범위 30001-39999는 입력 레지스터(기능 코드 0x04)를 나타내며, 40001-49999는 홀딩 레지스터(기능 코드 0x03)를 나타냅니다. 사용자가 특정 코드를 입력하면, Modbus는 주소 코딩 논리를 기반으로 이러한 관계를 자동으로 인식합니다.

    +40001의 의미는?
    Modicom 포맷에 따르면, 40001-49999는 Modbus 기능 코드 0x03에 해당하는 홀딩 레지스터(Holding Registers)의 주소 범위입니다. 기능 코드 0x03의 논리는 "40001"을 기준으로 계산되며, 예를 들어 40001은 첫 번째 레지스터를 나타내고, 오프셋은 0000입니다. 사용자가 40005를 입력하면, Modbus는 주소 범위 40001~49999를 기능 코드 0x03과 매핑하며, 40005는 0004(오프셋)+40001로 계산됩니다. 이는 기능 코드 0x03에 의해 정의된 0004번 위치를 읽는 것으로 해석됩니다.

    Modbus 기능 코드
    [7]

    6. PLC와 유량계 간 RS485 및 Modbus RTU를 활용한 유량 모니터링 구현

    Modbus 프로토콜에서는 각 데이터 필드에 고유의 의미와 위치가 있습니다. 사용자는 특정 코드(슬레이브 주소, 기능 코드, 레지스터 주소, 읽을 레지스터 수, CRC 코드)를 입력해야 하며, Modbus 마스터는 이러한 데이터를 수신한 후 각 필드를 순차적으로 분석하여 목표 슬레이브에서 수행할 작업(읽기 또는 쓰기)을 결정합니다. 다음은 PLC와 유량계 간 RS485 및 Modbus RTU를 사용한 유량 모니터링의 예입니다:
    하드웨어 설정: 유량계와 PLC가 RS485 인터페이스를 지원하며 Modbus RTU 통신이 가능해야 합니다. PLC와 유량계를 RS485 통신 케이블로 연결합니다.
    Modbus RTU 설정 및 프로그램 설계: 유량계의 Modbus 주소(예: 슬레이브 주소)와 보드레이트 등의 매개변수를 설정하고, PLC에서 Modbus 마스터 기능을 정의하여 읽을 데이터를 설정합니다. PLC와 유량계 간 통신 매개변수(보드레이트, 데이터 비트, 정지 비트, 패리티 비트)가 일치하도록 설정합니다.
     
    컴퓨터 작업 예시
    유량계는 RS485 인터페이스를 통해 데이터를 PLC로 전송하며, PLC는 Modbus RTU 프로토콜을 사용하여 유량계의 데이터를 읽습니다. 컴퓨터 모니터링 인터페이스에서 유량계가 반환한 데이터 곡선을 실시간으로 표시할 수 있습니다.
    Modbus RTU 통신에서는 Modbus 통신 패킷이 주소 필드, 기능 코드, 데이터 필드, 오류 검증 코드(CRC)를 포함하며, TX는 요청 신호, RX는 반환 신호를 나타냅니다.
    요청 신호 TX 01 04 00 64 00 01 70 15
    01: 슬레이브 주소 (slave address).
    04: 기능 코드 (입력 레지스터 읽기).
    00 64: 레지스터 주소 (주소 100).
    00 01: 읽을 레지스터 수량 (1개).
    70 15: CRC 검증 코드로, 데이터의 정확성을 확인합니다.
    반환 신호 RX 01 04 02 04 00 BB F0
    01: 슬레이브 주소로, 주소 1의 장치에서 응답이 왔음을 나타냅니다.
    04: 기능 코드로, "입력 레지스터 읽기" 응답임을 나타냅니다.
    02: 반환 데이터 길이로, 반환된 데이터가 2바이트임을 나타냅니다.
    00 BB: 반환된 데이터 값으로, 16진수로 00BB이며, 10진수로 변환 시 187입니다.
    F0: CRC 검증 코드로, 패킷의 정확성을 확인합니다.
    이 데이터는 게이트웨이를 통해 다른 프로토콜(예: Modbus TCP)이나 물리 계층(예: Wi-Fi)으로 변환하여 이더넷을 통해 원격 서버에 전송될 수 있습니다. 이는 클라우드에 저장되어 생산 상태를 원격으로 모니터링하고, 자동화된 데이터 보고서를 생성할 수 있습니다. 예를 들어, 유량 데이터가 비정상적인 경우 시스템은 알림 시스템을 통해 경고를 자동으로 전송하여 생산 효율성을 높이고 관리를 더 편리하게 할 수 있습니다.
    [8]
    관련 상품
    관련 기사

    연락하기