工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial Internet of Things >> モノのインターネットテクノロジー

Raspberry Pi上のEdgeX FoundryによるModbusセンサーのシームレスな統合

Raspberry Pi上のEdgeX FoundryによるModbusセンサーのシームレスな統合

産業用IoT(IIoT)の導入では、Modbus対応周辺機器とクラウド分析を橋渡しするエッジゲートウェイへの依存が増しています。独自ゲートウェイの構築はコストと時間がかかります。このケーススタディでは、オープンソースフレームワークであるEdgeX FoundryをRaspberry Piに導入し、Modbus温湿度センサーを接続、データをクラウドにストリーミングし、最小限の労力でリアルタイム制御をトリガーする方法を示します。

なぜModbusとEdgeXなのか

Modbusは安価なRS-485リンク上で動作するオープンで軽量なプロトコルです。アナログ値にはシンプルなレジスタ(16ビット符号なし整数)、バイナリ状態にはコイルを使用し、産業デバイスに最適です。オープンソースのエッジミドルウェアであるEdgeX Foundryは、物理センサーとITシステムの間の橋渡し役を果たし、デバイス管理、データ変換、クラウド接続を標準で提供します。

ハードウェア構成

図1: Raspberry Pi上のEdgeX FoundryによるModbusセンサーのシームレスな統合 図1. EdgeX Foundry – オープンソースエッジミドルウェア

図2: Raspberry Pi上のEdgeX FoundryによるModbusセンサーのシームレスな統合 図2. EdgeX導入のハイレベルブロック図

ステップバイステップ統合

  1. Raspberry Piのセットアップ
    • Dockerとdocker-composeを用いてUbuntu 20.04 LTSをインストール。
    • EdgeX Foundryリポジトリをクローンし、docker-composeでスタックを起動。
  2. Modbusデバイスのシミュレーション
    • ModbusPal(GPL)を使用し、最大247台のModbusスレーブをエミュレート。
    • 温度(アドレス2)と湿度(アドレス3)の保持レジスタを持つスレーブを設定。各レジスタは16ビット整数にマッピングされ、°Cと%RHにスケーリング。
    • ModbusPalをTCPまたはシリアル(USB-RS485)で起動し、通信を確認。
  3. デバイスプロファイルのアップロード

    https://localhost:48081/api/v1/deviceprofile/uploadfile にYAMLファイルを含む POST リクエストを送信(詳細は下記)。レスポンスで一意のプロファイルIDが返されます。

  4. デバイスの登録

    https://localhost:48081/api/v1/device に以下のJSONを POST してセンサーエントリを作成。protocols.modbus-rtu セクションは /dev/ttyUSB0(9600ボー)を指定。

    { "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ステータス変更をトリガーし、低コストRaspberry Pi上での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
M2MMachine 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. エッジAI推論をマスター:実用的なインサイトを得るための実践ガイド
  2. オープンソース用語入門:プロジェクトからライセンスまで
  3. シスコ、エンタープライズとエッジをシームレスに接続するCatalyst 5G産業用ルーターを発表
  4. AT&TとTech Mahindra、オープンソースAIプラットフォーム「Acumos」を発表
  5. インダストリー4.0で製造卓越性を高める:クオリティ4.0の台頭
  6. IoTにおけるオープンソースソフトウェアの保護:ソフトウェアリスクの軽減
  7. インダストリー4.0を昇華:エッジアナリティクスでよりスマートで速い製造を実現
  8. IICとOpenFogが合併、エッジコンピューティング革新を加速
  9. オープンソース vs ベンダーサポートIoT開発ツール:企業に適したスタックの選び方
  10. オープンソースがエッジでのイノベーションを駆動する理由──必携eBook
  11. オープンソースがIoTとエッジコンピューティングの台頭を支える