HMIでCONEXIOBlackBearのデータを読み出してみる
コネクシオのテックブログをご覧いただきありがとうございます。
テックブログでは、ちょっと役立つ技術情報やコネクシオの製品を使ってできることを紹介しています。
当社のエッジコンピューティング・ゲートウェイ「CONEXIOBlackBear」はIoTゲートウェイとして利用されることが多いため、PLCのような下位のデバイスからデータを読み出すことしか出来ないと思われがちです。
しかし「CONEXIOBlackBear」をModbusスレーブとして利用することで、逆にPLCやHMIなどのデバイスが「CONEXIOBlackBear」のデータを読み出すことも可能です!今回はModbusを利用してHMIデバイス(Human Machine Interface、今回の場合タッチパネル)が「CONEXIOBlackBear」のデータを読み出す例をご紹介します。
▼おすすめの関連記事
「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」にインポートします。
次に値を保管するための保持レジスターを定義します。
さらに保持レジスターに値を代入する関数を作成します。この関数をタイマー処理などで定期的に呼び出すと、上記で定義した保持レジスターの値が、関数内の変数1~変数6の値で更新されます。
保持レジスターに保管された変数1はアドレス400001で、変数2はアドレス400002で...というように、アドレスを指定してHMIデバイスからアクセスすることができます。
そして「CONEXIOBlackBear」のModbus TCPスレーブを起動します。下記サンプルコードの「IP_ADDR」と「PORT」はModbusマスターからModbus TCPでアクセスするIPアドレスとポート番号を指定します。(ちなみにIPアドレスはCONEXIOBlackBearのIPアドレス、ポート番号のデフォルト値は502です)
実行
上記サンプルコードの変数1~6へ、「CONEXIOBlackBear」のメモリー/CPU/ネットワーク/ストレージの状態と、時刻および起動時間を代入してレジスターに保管し、これをModbus TCPでHMIデバイスが読み出してそのディスプレイに表示しました。下図がその実行結果です。
※今回HMIデバイスはシュナイダーエレクトリック社のPro-face GP-4203Tを使用しました。
この例で使用した値は全て「CONEXIOBlackBear」内部の情報ですが、クラウドから取得した値やNTPサーバーと同期した時刻など、 「CONEXIOBlackBear」がネットワーク上から取得した値をPLCが読み出すことも可能となりますので、ぜひさまざまな活用方法をご検討ください!
▼今回使用したIotゲートウェイ【CONEXIOBlackBear】の詳細はこちら
▼おすすめの関連記事
「BLEセンサーをCONEXIOBlackBearにつなげてみる」
「【プログラミング不要】Node-REDでメール送信ロジックを作ってみる」
「Webカメラの画像を取り込んで処理してみる」