ESP32 - 모드버스 | ESP32 - Modbus

이 튜토리얼은 ESP32를 Modbus 프로토콜로 사용하는 방법을 안내합니다.

Modbus에 관하여

Modbus는 장치 간, 장치에서 소프트웨어/앱으로, 그리고 장치에서 HMI로의 통신을 가능하게 하는 프로토콜입니다. 이는 산업용 장치에서 널리 사용됩니다.

우리는 Modbus가 장치, 소프트웨어/앱, 그리고 HMI 간의 통신 언어라고 상상할 수 있습니다.

모드버스에는 세 가지 널리 사용되는 유형이 있습니다: 모드버스 RTU, 모드버스 ASCII, 모드버스 TCP:

  • Modbus RTU와 Modbus ASCII는 직렬선(RS-232/RS-422/RS-485)을 통해 사용됩니다.
  • Modbus TCP는 이더넷이나 WiFi를 통해 사용됩니다.

모드버스를 사용하는 이유는 무엇인가요?

구체적인 예를 들어봅시다:

  • 스위치에 연결된 ESP32 #1
  • LED에 연결된 ESP32 #2
  • ESP32 #1ESP32 #2는 서로 멀리 떨어져 있습니다
  • 스위치를 ON으로 전환하면 LED를 켭니다.
  • 스위치를 OFF로 전환하면 LED를 끕니다.
button control led via Modbus

위 예를 구현하는 가장 쉬운 방법은 우리 스스로 간단한 프로토콜을 정의하는 것입니다:

  • ESP32 #1은 스위치의 상태 변화에 대해 ESP32 #1에게 정보를 전달하기 위해 1바이트의 데이터를 보냅니다. 데이터 바이트의 값은 다음과 같습니다:
    • 1: 스위치를 켤 때
    • 0: 스위치를 끌 때
  • ESP32 #2ESP32 #1로부터 1바이트의 데이터를 받았을 때, 값이 다음과 같으면:
    • 1: LED를 켭니다
    • 0: LED를 끕니다

    위의 정의는 ESP32 #1의 스위치로 ESP32 #2의 LED를 제어하게 합니다. 그러나, 몇 가지 경우를 상상해 봅시다:

    • ESP32 #1은 명령이 ESP32 #2에 의해 성공적으로 수신되고 실행되었는지 확인하고 싶어 합니다.
    • ESP32 #1ESP32 #2에 있는 여러 개의 LED를 제어하고 싶어 합니다.
    • ESP32 #2ESP32 #1에 있는 스위치의 상태를 적극적으로 읽고 싶어 합니다.
    • ESP32 #2는 스위치를 사용하여 ESP32 #1의 LED를 제어하고 싶어 합니다.
    • 그리고 더 많은 경우들도 있습니다.

    우리 스스로 모든 사용 사례를 지원하는 것은 쉽지 않습니다.

    우리 자신이 프로토콜을 사용할 때 또 다른 문제가 발생합니다. ESP32는 다른 프로토콜을 사용하는 다른 장치와 통신할 수 없습니다.

    ⇒ 우리는 위의 모든 문제를 해결할 수 있는 표준 프로토콜이 필요합니다 ⇒ Modbus 프로토콜은 사용할 수 있는 표준 프로토콜입니다.

    Modbus 프로토콜이 사용자 정의 프로토콜보다 가지는 장점:

    • 명령을 정의할 필요가 없습니다. Modbus가 모든 사용 사례에 대해 정의했습니다.
    • ESP32는 Modbus를 사용하는 모든 장치/소프트웨어와 함께 작동할 수 있습니다.

Modbus를 사용해야 할 때와 사용해서는 안 될 때

Modbus 프로토콜은 이해하고 구현하기 쉽지 않으며, Modbus 라이브러리가 있더라도 마찬가지입니다. 위에서 설명한 대로 간단한 자체 정의 프로토콜을 사용할 수 있습니다:

  • 시스템은 간단합니다. ESP32 #1의 스위치가 ESP32 #2의 LED를 제어합니다.
  • ESP32는 다른 장치/소프트웨어와 작동할 필요가 없습니다.

Modbus를 사용해야 할 때:

  • 시스템이 복잡합니다.
  • 시스템은 높은 신뢰성이 필요합니다.
  • ESP32는 다른 장치/소프트웨어와 함께 작동해야 합니다.

Modbus 프로토콜 작동 방식

개념들

Modbus에서 여섯 가지 중요한 개념이 있습니다:

  • 마스터슬레이브
  • 요청응답
  • 함수 코드 (FC) 와 주소

두 ESP32가 Modbus를 사용하여 서로 통신할 때:

  • 한 ESP32는 마스터로 작동합니다.
  • 다른 ESP32는 슬레이브로 작동합니다.

마스터슬레이브에게 요청을 보내고, 슬레이브응답마스터에게 보낸다.

modbus Master Slave

마스터슬레이브에게 보낸 요청에는 다음 정보가 포함됩니다:

  • 기능 코드 (FC): 1바이트로, 슬레이브에게 무엇을 해야 하는지를 명령합니다. 예를 들어, 디지털 입력 핀, 디지털 출력 핀 또는 아날로그 입력 핀의 상태를 읽거나, 디지털 출력 핀을 제어합니다.
  • 주소: 2바이트로, 슬레이브에게 어디에서 작업을 해야 하는지를 알려줍니다. 예를 들어, 각각의 디지털 입력/출력 및 아날로그 입력 핀에는 고유한 주소가 부여됩니다.
  • 데이터 (예: 제어값)

마스터로부터 요청을 받을 때, 슬레이브는 해당하는 조치를 취하고 응답으로 결과를 되돌려 보냅니다.

함수 코드

모드버스 표준은 많은 기능 코드를 정의합니다. 초보자를 과부하시키지 않기 위해 몇 가지 필수 기능 코드를 살펴봅시다:

  • FC 01 (Read Coils): 디지털 출력 핀의 상태를 읽는 명령입니다.
  • FC 02 (Read Discrete Inputs): 디지털 입력 핀의 상태를 읽는 명령입니다.
  • FC 05 (Write Single Coil): 디지털 출력 핀의 상태를 제어(쓰기)하는 명령입니다.

FC 01기능 코드의 값이 0x01임을 나타냅니다.

ESP32 Modbus 라이브러리를 사용할 때, 다음 사항을 결정해야 합니다:

  • 사용할 함수 코드
  • 사용할 주소

우리가 처음에 언급한 예를 실현해 봅시다:

  • ESP32 마스터는 LED #M, SWITCH #M에 연결되어 있습니다
  • ESP32 슬레이브는 LED #S, SWITCH #S에 연결되어 있습니다
  • SWITCH #M으로 LED #S를 제어하고, SWITCH #S로 LED #M을 제어합시다
ESP32 modbus led switch

방법:

  • ESP32 마스터가 스위치 #M의 상태를 읽어 슬레이브로 LED #S를 제어하라는 요청을 보냅니다 → 슬레이브는 LED #S를 제어하고 응답을 보냅니다.
  • ESP32 마스터가 스위치 #S의 상태를 읽으라는 요청슬레이브에 보냅니다 → 슬레이브는 스위치 #S의 상태를 응답으로 보내고 → 마스터는 LED #M을 제어합니다.

Modbus RTU/ASCII 및 Modbus TCP

앞에서 언급했듯이, 널리 사용되는 Modbus 유형에는 Modbus RTU, Modbus ASCII, Modbus TCP가 있습니다.

시스템 다이어그램

modbus tcp vs modbus rtu/ascii

프로토콜 스택

modbus tcp vs modbus rtu/ascii

ESP32용 Modbus 라이브러리가 제공됩니다. Modbus 라이브러리 사용법에 대한 자세한 안내는 다른 튜토리얼에서 제공될 예정입니다. 업데이트를 받으려면 페이스북 페이지를 좋아해주세요.

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!