HMIでCONEXIOBlackBearのデータを読み出してみる

コネクシオのテックブログをご覧いただきありがとうございます。
テックブログでは、ちょっと役立つ技術情報やコネクシオの製品を使ってできることを紹介しています。

当社のエッジコンピューティング・ゲートウェイ「CONEXIOBlackBear」はIoTゲートウェイとして利用されることが多いため、PLCのような下位のデバイスからデータを読み出すことしか出来ないと思われがちです。

しかし「CONEXIOBlackBear」をModbusスレーブとして利用することで、逆にPLCやHMIなどのデバイスが「CONEXIOBlackBear」のデータを読み出すことも可能です!今回はModbusを利用してHMIデバイス(Human Machine Interface、今回の場合タッチパネル)が「CONEXIOBlackBear」のデータを読み出す例をご紹介します。


目次[非表示]

  1. Modbusとは
  2. システム構成
  3. サンプルコード
  4. 実行

▼おすすめの関連記事
BLEセンサーをCONEXIOBlackBearにつなげてみる
【プログラミング不要】Node-REDでメール送信ロジックを作ってみる
Webカメラの画像を取り込んで処理してみる」​​​​​​​​​​​​​​

Modbusとは

ModbusとはPLC向けに開発された通信プロトコルです。PLCに限らずModbusに対応したHMIやセンサーなどのデバイスもあります。Modbusの通信モードにはEthernetを使用したModbus TCPとシリアル通信を使用したModbus RTUがあり、いずれのモードでもマスター対スレーブで1対nの通信を行うことができます。今回の例ではModbus TCPを利用します。

Modbusは仕様が公開されているため、メーカーを問わず広く汎用的に使われています。しかし仕様を認定する組織が存在しないということもあり、機器同士が実際に接続出来るかどうかは動作検証をする必要が有るので注意が必要です。
​​​​​​​


システム構成

今回ご紹介する構成は上図の通りです。「CONEXIOBlackBear」 (Modbusスレーブ)上に、PythonでModbus TCPの保持レジスター(値の保管場所)を作成します。そして保持レジスターに代入した値を、Modbus TCPで接続したHMIデバイス(Modbusマスター)が取得して、そのディスプレイに表示する、というものです。

サンプルコード

まず「CONEXIOBlackBear」でModbus TCPを使用できるようにするため、Pythonのpymodbusライブラリを、「CONEXIOBlackBear」にインポートします。

from pymodbus.server.sync import StartTcpServer
from pymodbus.datastore import ModbusSequentialDataBlock
from pymodbus.datastore import ModbusSlaveContext, ModbusServerContext


次に値を保管するための保持レジスターを定義します。

store = ModbusSlaveContext(
            hr = ModbusSequentialDataBlock(0, [0, 0, 0, 0, 0, 0]),
            zero_mode=True
        )
context = ModbusServerContext(slaves=store, single=True)


さらに保持レジスターに値を代入する関数を作成します。この関数をタイマー処理などで定期的に呼び出すと、上記で定義した保持レジスターの値が、関数内の変数1~変数6の値で更新されます。
保持レジスターに保管された変数1はアドレス400001で、変数2はアドレス400002で...というように、アドレスを指定してHMIデバイスからアクセスすることができます。

def SetData(arg1, args2):
    store.setValues(0x06, 0 ,[変数1, 変数2, 変数3, 変数4, 変数5, 変数6])


そして「CONEXIOBlackBear」のModbus TCPスレーブを起動します。下記サンプルコードの「IP_ADDR」と「PORT」はModbusマスターからModbus TCPでアクセスするIPアドレスとポート番号を指定します。(ちなみにIPアドレスはCONEXIOBlackBearのIPアドレス、ポート番号のデフォルト値は502です)

StartTcpServer(context, address=(IP_ADDR, PORT), defer_reactor_run=True)



実行

上記サンプルコードの変数1~6へ、「CONEXIOBlackBear」のメモリー/CPU/ネットワーク/ストレージの状態と、時刻および起動時間を代入してレジスターに保管し、これをModbus TCPでHMIデバイスが読み出してそのディスプレイに表示しました。下図がその実行結果です。


​​​​​​​※今回HMIデバイスはシュナイダーエレクトリック社のPro-face GP-4203Tを使用しました。
​​​​​​​
この例で使用した値は全て「CONEXIOBlackBear」内部の情報ですが、クラウドから取得した値やNTPサーバーと同期した時刻など、 「CONEXIOBlackBear」がネットワーク上から取得した値をPLCが読み出すことも可能となりますので、ぜひさまざまな活用方法をご検討ください!



▼今回使用したIotゲートウェイ【CONEXIOBlackBear】の詳細はこちら

  CONEXIOBlackBear | コネクシオIoTソリューション コネクシオは”海外利用可能”・”車載可能”な堅牢性、AI連携を想定したエッジコンピューティング・ゲートウェイ『CONEXIOBlackBear』を開発しました。IoTゲートウェイ|エッジコンピューティング|海外利用|車載利用|コネクシオブラックベア コネクシオ IoT

▼おすすめの関連記事
BLEセンサーをCONEXIOBlackBearにつなげてみる
【プログラミング不要】Node-REDでメール送信ロジックを作ってみる
Webカメラの画像を取り込んで処理してみる」​​​​​​​​​​​​​​

​​​​​​​

Mr.Bear

Mr.Bear

コネクシオのIoTシステム開発課に所属し、10年以上にわたりIoTシステムの開発に携わってきた有識者。積み上げてきた知見を駆使し、お客様のご要望に合わせたシステムの提案を行います。 CONEXIOBlackBearを使って色々な実証実験を行っています。
コネクシオのソリューションが5分でわかる!
工業・農業・オフィス・車両・インフラなど、
各分野から抜粋した代表例をご紹介
ご質問やご要望はこちらから
お気軽にお問い合わせください

お役立ち資料
最新記事
サイト内検索