산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial Internet of Things >> 사물 인터넷 기술

라즈베리 파이에서 EdgeX Foundry로 Modbus 센서 원활하게 통합하기

라즈베리 파이에서 EdgeX Foundry로 Modbus 센서 원활하게 통합하기

산업용 IoT(IIoT) 배포는 점점 더 에지 게이트웨이에 의존하여 Modbus 지원 주변 장치를 클라우드 분석과 연결합니다. 독점 게이트웨이를 구축하는 것은 비용이 많이 들고 느립니다. 이 사례 연구는 오픈 소스 프레임워크인 EdgeX Foundry를 라즈베리 파이에 배포하여 Modbus 온습도 센서를 연결하고, 데이터를 클라우드로 스트리밍하며, 최소한의 노력으로 실시간 작동을 트리거하는 방법을 보여줍니다.

왜 Modbus와 EdgeX인가?

Modbus는 저렴한 RS-485 링크에서 실행되는 개방적이고 가벼운 프로토콜입니다. 아날로그 값에는 단순 레지스터(16비트 부호 없는 정수)를, 바이너리 상태에는 코일을 사용하여 산업용 디바이스에 이상적입니다. 오픈 소스 에지 미들웨어인 EdgeX Foundry는 물리적 센서와 IT 시스템 사이의 다리 역할을 하며, 디바이스 관리, 데이터 변환, 클라우드 연결을 즉시 제공합니다.

하드웨어 스택

그림 1: 라즈베리 파이에서 EdgeX Foundry로 Modbus 센서 원활하게 통합하기 그림 1. EdgeX Foundry – 오픈 소스 에지 미들웨어

그림 2: 라즈베리 파이에서 EdgeX Foundry로 Modbus 센서 원활하게 통합하기 그림 2. EdgeX 배포의 고수준 블록 다이어그램

단계별 통합

  1. 라즈베리 파이 설정
    • Docker와 docker-compose가 설치된 Ubuntu 20.04 LTS를 설치합니다.
    • EdgeX Foundry 저장소를 복제하고 docker-compose로 스택을 실행합니다.
  2. Modbus 디바이스 시뮬레이션
    • ModbusPal(GPL)을 사용하여 최대 247개의 Modbus 슬레이브를 에뮬레이트합니다.
    • 온도(주소 2)와 습도(주소 3)에 대한 홀딩 레지스터를 가진 슬레이브를 구성합니다. 각 레지스터는 °C와 %RH로 스케일링될 16비트 정수에 매핑됩니다.
    • TCP 또는 시리얼(USB-RS485)로 ModbusPal을 시작하여 통신을 확인합니다.
  3. 디바이스 프로필 업로드

    아래 YAML 파일을 포함하여 POST 요청을 https://localhost:48081/api/v1/deviceprofile/uploadfile로 보냅니다. 응답은 고유한 프로필 ID를 반환합니다.

  4. 디바이스 등록

    다음 JSON을 https://localhost:48081/api/v1/device로 게시하여 센서 항목을 생성합니다. protocols.modbus-rtu 섹션은 9600 보드에서 /dev/ttyUSB0을 가리킵니다.

    { "name": "TemperatureHumiditySensor", "description": "Industrial Grade Temperature & Humidity Transmitter SHT20", "adminState": "UNLOCKED", "operatingState": "ENABLED", "protocols": { "modbus-rtu": { "Address": "/dev/ttyUSB0", "BaudRate": "9600", "DataBits": "8", "StopBits": "1", "Parity": "N", "UnitID": "1" } }, "labels": ["TemperatureHumiditySensor","modbusRTU"], "service": {"name": "edgex-device-modbus"}, "profile": {"name": "TemperatureHumiditySensor"}, "autoEvents": [ {"frequency": "5s", "onChange": false, "resource": "TemperatureDegC"}, {"frequency": "5s", "onChange": false, "resource": "HumidityPercentRH"} ] }
  5. 데이터 흐름 확인
    • EdgeX의 디바이스 서비스는 5초마다 데이터를 가져와 코어 서비스에 기록하며, 이는 Redis에 저장됩니다.
    • 애플리케이션 서비스는 데이터를 IBM Cloud(또는 원하는 클라우드)로 전달합니다.
    • Modbus 요청/응답 패킷을 보여주는 예시 로그 항목.
  6. Kuiper 규칙 엔진으로 LED 작동
    • 규칙 정의: 온도 > 30°C면 빨간 LED 켜기, < 30°C면 끄기; 마찬가지로 파란 LED는 28°C에서 제어.
    • Kuiper가 명령을 EdgeX core-command로 푸시하고, 이는 GPIO 디바이스 서비스를 업데이트합니다.
    • GPIO 출력은 /sys/class/gpio/gpio12/value와 /sys/class/gpio/gpio14/value로 확인됩니다.

주요 구성 스니펫

디바이스 프로필 (YAML)

name: TemperatureHumiditySensor
manufacturer: ROBOKITS
model: RKI-4879
labels:
  - SHT20
description: Industrial Grade Temperature & Humidity Transmitter SHT20 Sensor High Precision Monitoring Modbus RS485
deviceResources:
  - name: TemperatureDegC
    description: Room Temperature in Degrees Celsius.
    attributes: { primaryTable: INPUT_REGISTERS, startingAddress: 2, rawType: INT16 }
    properties:
      value: { type: Float32, readWrite: R, scale: 0.1, floatEncoding: eNotation }
      units: { type: String, readWrite: R, defaultValue: degrees celsius }
  - name: HumidityPercentRH
    description: Room Humidity in %RH.
    attributes: { primaryTable: INPUT_REGISTERS, startingAddress: 3, rawType: INT16 }
    properties:
      value: { type: Float32, readWrite: R, scale: 0.1, floatEncoding: eNotation }
      units: { type: String, readWrite: R, defaultValue: %RH }
deviceCommands:
  - name: TemperatureDegC
    get: [{ index: 1, operation: get, deviceResource: TemperatureDegC }]
  - name: HumidityPercentRH
    get: [{ index: 2, operation: get, deviceResource: HumidityPercentRH }]
coreCommands:
  - name: TemperatureDegC
    get:
      path: /api/v1/device/{deviceId}/TemperatureDegC
      responses:
        - code: 200
          description: Get the temperature in degrees C
          expectedValues: [TemperatureDegC]
  - name: HumidityPercentRH
    get:
      path: /api/v1/device/{deviceId}/HumidityPercentRH
      responses:
        - code: 200
          description: Get the humidity in %RH
          expectedValues: [HumidityPercentRH]

device-modbus TOML 설정 (발췌)

[DeviceList]
Name = "TemperatureHumiditySensor"
Profile = "TemperatureHumiditySensor"
Description = "Industrial Grade Temperature & Humidity Transmitter SHT20"
labels = ["TemperatureHumiditySensor","modbusRTU"]
[DeviceList.Protocols.modbus-rtu]
Address = "/dev/ttyUSB0"
BaudRate = 9600
DataBits = 8
StopBits = 1
Parity = "N"
UnitID = 1
[[DeviceList.AutoEvents]]
Frequency = "5s"
OnChange = false
Resource = "TemperatureDegC"
[[DeviceList.AutoEvents]]
Frequency = "5s"
OnChange = false
Resource = "HumidityPercentRH"

결과

엔드투엔드 흐름은 실시간 온습도 데이터가 IBM Cloud에 도착하고, 규칙 기반 LED 상태 변경을 트리거하며, 저비용 라즈베리 파이에서 EdgeX의 모든 기능을 시연합니다.

결론

EdgeX Foundry는 최소한의 개발 오버헤드로 Modbus 기반 IIoT 솔루션의 빠른 배포를 가능하게 합니다. 디바이스 관리, 데이터 저장, 클라우드 연결을 추상화함으로써 엔지니어가 도메인 로직과 분석에 집중할 수 있게 합니다.

약어

약어확장
AOFAppend Only File
APIApplication Program Interface
AWSAmazon Web Services
BACnetBuilding Automation and Control Network
BLEBluetooth Low Energy
CURLClient Uniform Resource Locator
GPIOGeneral Purpose Input Output
HTTPHypertext Transfer Protocol
IBMInternational Business Machines
IIoTIndustrial Internet of Things
IoTInternet of Things
ITInformation Technology
LEDLight Emitting Diode
LTSLong Term Support
M2MMan to Machine
MQTTMessage Queuing Telemetry Transport
RDBRedis Database
RedisREmote DIctionary Server
RESTRepresentational State Transfer
RS-485Recommended Standard – 485
SCADASupervisory Control and Data Acquisition
SQLStructured Query Language
TCP/IPTransmission Control Protocol/Internet Protocol

사물 인터넷 기술

  1. 초보자를 위한 오픈소스 용어 가이드
  2. 시스코, 엔터프라이즈·엣지 네트워크 원활 연결 위한 카탈리스트 5G 산업용 라우터 출시
  3. AT&T와 테크 마힌드라, 아쿠모스(Acumos) 출시: 신속 배포 위한 오픈소스 AI 플랫폼
  4. Industry 4.0으로 제조 우수성 제고: Quality 4.0의 부상
  5. IoT에서 오픈소스 소프트웨어 보안: 소프트웨어 위험 완화
  6. 인더스트리 4.0 격상: 엣지 분석으로 더 스마트하고 빠른 제조 실현
  7. IIC와 오픈포그 합병으로 엣지 컴퓨팅 혁신 가속화
  8. 오픈소스 vs 벤더 지원 IoT 개발 도구: 기업에 적합한 스택 선택
  9. 오픈소스가 엣지 혁신을 주도하는 이유 - 필독 전자책
  10. 오픈소스가 IoT와 엣지 컴퓨팅 부상 견인