2017年10月24日火曜日

OpenBlocks IoTシリーズ 基本ソフトウェアにより提供されるPLCクライアント(Modbus)機能について

PLCクライアント(Modbus)機能は、OpenBlocks IoT 基本ソフトウェア2.12より大幅に機能追加されました。

主として以下の項目があげられます。

・データタイプとして、符号のありなし、データサイズ(16bit/32bit)、ビッグ/リトルエンディアンの設定を追加
・データ取得の基準時刻の設定
・CSVファイルを用いた取得PLC対象の拡張

本機能の実装により、1入出力インタフェーズに対し、複数のデバイス、レジスタが割り付けられる場合に、基準時刻を指定してまとめてデータを取得することが可能となり,例えば、RS-485インタフェースに接続される複数のデバイスや、無線メッシュであるOKI SmartHopのRS-232C経由のmodbusペイロードなどでも、1つのデバイスインタフェースから複数個所のデータ(温度や電力データなど)を一定時間にまとめて取得出来るようになります。



本機能はOpenBlocks IoTシリーズすべてのモデルで使用が可能です。ご利用の際は、2.12あるいは今後実施されるそれ以降のアップデートバージョンであることを確認してください。
また、PLCとの接続には、対応したハードウェアインタフェースが必要となります。
各モデル別に、標準もしくは標準オプションとして用意される接続は以下の通りです。
  • OpenBlocks EX1/VX1
    イーサネット、Wifiによる有線/無線ネットワーク、RS-232C/RS-485によるシリアルインタフェースを標準搭載
  • OpenBlocks BX1/BX3(L)/BX5
    Wifiでのネットワーク接続を標準搭載。有線ネットワーク接続にはオプションのUSB二股ケーブルにUSBネットワークアダプタ、RS232C/RS485接続には、オプションのRS232C二股ケーブル、RS-485二股ケーブルを使用
  • BX0
    標準搭載のWifiとPoEケーブルによる、無線/優先のネットワーク接続

    (*) RS-485接続は2線式のみを標準もしくはオプション品にてサポート

今回は、本機能の設定方法について紹介します。
内容に関しては、OpenBlocks IoTシリーズデータ収集ガイドからの抜粋となりますので、詳細に関しては以下のドキュメントをご参照ください。




・PLCクライアント(マスター)の設定方法


本機能は、OpenBlocks IoT Family から Modbus プロトコルを用いて PLC 機器のレジスタ、コイルもしくはステータスを用いて定期的に読み込む(ポーリングを行う)場合に用います。


WEB UI の「サービス」→「基本」タブにおいて、「PD Handler PLC Client」 が「使用する」に設定されている場合、同タブの「取得
PLC 対象数」に応じた入力フォームが表示されます。

※「取得 PLC 対象」(PLC デバイス)とは、PLC 機器そのものではなく、対象となる PLC機器への接続方法の他、データを取得するため
の「読込方法」や「読込開始アドレス」、「読込レジスタ数」等の設定の組み合わせを意図します。
PLC デバイス毎に送信対象項目にて”送信する”を選択すると、PLC デバイスの送信設定の詳細を設定できます。

※「使用プロトコル」としてModbus TCP(ネットワーク)を選択した場合の表示


※「使用プロトコル」としてModbus RTUを選択した場合の表示



”送信する”を選択した場合には、左のように各項目が表示されます。

デバイス番号:
OpenBlocks IoT Family の WEB UI 内で管理している番号です。変更はできません。

ユーザーメモ:
PLC デバイスにデータに付加する任意の文字列を設定します。データを処理する際の識別子等に利用して下さい。

読込方法:
「レジスタ」(レジスタ出力)、「入力レジスタ」(レジスタ入力)、「コイル」(ディジタル出力)、「入力ステータス」(ディジタル入力)から選択します。
「コイル」または「入力ステータス」を選んだ場合は、”0”または”1”の並びが出力されます。

データタイプ:
読込方法を「レジスタ」、「入力レジスタ」を選択した際に、出力のデータタイプを以下から選択します。

・符号なし 16 ビット整数
・符号付き 16 ビット整数
・符号なし 32 ビット整数/リトルエンディアン
・符号付き 32 ビット整数/リトルエンディアン
・符号なし 32 ビット整数/ビッグエンディアン
・符号付き 32 ビット整数/ビッグエンディアン

読込開始アドレス:
読み込みたいデータが格納されている PLC 機器上の開始アドレスを設定します。

読込レジスタ数:
「読込方法」として「コイル」または「入力ステータス」は、読み込まれるビット数と解釈されます。
「開始アドレス」に設定されるアドレスから読み込むレジスタ数もしくビット数を設定します。


取得時間間隔[sec]:
PLC デバイスからデータを取得する時間間隔を数字で設定します。単位は秒です
後述の基準時刻制御を使用する場合、時間間隔は以下の値へと内部的に変更されます。

・86400[sec]使整数倍
・43200[sec]
・28800[sec]
・21600[sec]
・14400[sec]
・10800[sec]
・7200[sec]
・3600[sec]
・1800[sec]
・900[sec]
・60[sec]

基準時刻制御:
毎日定時にデータを取得する場合、本機能を有効とし基準時刻を設定しください。

基準時刻:
定時にデータを取得する際の基準時刻を設定します。HH:MM 形式となります。

タイムアウト[msec]:
PLC デバイスからデータを取得する際のタイムアウトを設定します。単位はミリ秒です。

使用プロトコル:
「Modbus TCP」、「Modbus RTU」のいずれかを選択します。
「Modbus TCP」はネットワーク、「ModbusRTU」はシリアルです。

ユニット ID:
PLC 機器の Modbus ユニット ID を設定します。ユニット ID は、1~247 または 255 の数値です。


PLC 接続アドレス(Modbus TCP)
接続する PLC 機器の IP アドレスを設定します。

PLC 接続ポート(Modbus TCP)
接続する PLC 機器の TCP ポート番号を設定します。 デフォルト値は、502 です。

読込デバイスファイル(ModbusRTU)
PLC 機器を接続するシリアルポートのデバイスファイル名を設定します。

ボー・レート(Modbus シリアル):
PLC 機器を接続するシリアルポートのボー・レートを選択します。

パリティビット(Modbus シリアル):
PLC 機器を接続するシリアルポートのパリティビットを選択します。

データビット(Modbus シリアル):
PLC 機器を接続するシリアルポートのデータビット数を選択します。

ストップビット(Modbus シリアル):
PLC 機器を接続するシリアルポートのストップビット数を選択します。

送信先設定:
“使用する”を選択した送信先に対してチェックボックスが選択できるようになります。
チェックを付けたクラウド等に対して、送信を行います。


デバイス ID サフィックス(PD):
PD Exchange に送信する際のデバイス ID のサフィックスを設定します。

クライアント ID (AWSIoT):
AWSIoTに送信する際のクライアント ID を設定します。Thing Shadows を使用する場合、クライアント ID が Thing Name となります。

Thing Shadows(AWSIoT):
AWSIoT に送信する際の Thing Shadows を使用するかの設定を選択します。

トピック名(AWSIoT):
AWSIoT に送信する際のトピックを設定します。Thing Shadows を使用する場合、トピックはクライアントIDをThing Nameとして自動生成されます。

証明書(AWSIoT):
AWSIoT に送信する際に使用するデバイスの証明書を設定します。

プライベートキー(AWSIoT):
AWSIoT に送信する際に使用するデバイスのプライベートキーを設定します。

デバイスタイプ(Watson IoT/Device):
Watson IoT(Device)に送信する際のデバイスタイプを設定します。

デバイス ID(Watson IoT/Device):
Watson IoT(Device)に送信する際のデバイスID を設定します。

パスワード(Watson IoT/Device):
Watson IoT(Device)に送信する際のパスワードを設定します。

デバイスタイプ(Watson IoT/Gateway):
Watson IoT(Gateway)に送信する際のデバイスタイプを設定します。


デバイス ID(Watson IoT/Gateway):
Watson IoT(Gateway)に送信する際のデバイス ID を設定します。

Event hubs 名:
Event hubs に送信する際の Event hubs 名を設定します。

SAS ポリシー:
Event hubs に送信する際の SAS ポリシーを設定します。

SAS キー:
Event hubs に送信する際の SAS キーを設定します。

デバイス ID(IoT Hub):
IoT Hubに送信する際のデバイス ID を設定します。

デバイスキー(IoT Hub):
IoT Hub に送信する際のデバイスキーを設定します。

Gatway Name(T4D):
Toami for docomo に送信する際に用いるGateway Name を設定します。

App key(T4D):
Toami for docomo に送信する際に用いる AppKey を設定します。

イベントタイプ(IoT デバイスハブ):
IoT デバイスハブ(Nifty)に送信する際に用いるイベントタイプを設定します。

デバイス ID(IoT デバイスハブ):
IoT デバイスハブ(Nifty)に送信する際に用いるデバイス ID を設定します。

API キー(IoT デバイスハブ):
IoT デバイスハブ(Nifty)に送信する際に用いる API キーを設定します。

ユニーク ID (MQTT):
MQTT サーバに送信する際のユニーク ID を設定します。ユニーク ID は、トピックのサフ
ィックスとして扱われます。トピックのプレフィックスは、MQTT サーバに設定されるトピ
ックプレフィックスです。プレフィックスとサフィックスの間は '/' で区切られ送信されます。

※一部を除くクラウドに紐付く設定情報は編集ボタンにより編集可能になります。既存の
デバイス不良等の差し替え時に以前のものと同様に扱う為に設定を同一にすることを推奨
します。(不良となったデバイスは送信対象設定を“送信しない”へ変更してください。)
※証明書及びプライベートキーはシステム→ファイル管理タブからアップロードしてくだ
さい。

・CSV ファイルを用いた「取得 PLC 対象」の拡張


/var/webui/upload_dir ディレクトリに pd-handler-plc-client.csv というファイル名の CSVファイルを置くことで、WEB UI 管理にて割り当てされた 1 デバイス番号に対して複数の「取得 PLC 対象」を割り当てることが可能です。
尚、pd-handler-plc-client.csv ファイルは WEB UI の「システム」→「ファイル管理」タブのアップロード機能により置くことが可能です。
また、CSV ファイルの書式は、次の通りです。

デバイス番号,ユニット ID,読込方式,データタイプ,読込開始アドレス,読込レジスタ数

※行の先頭が#または/の場合、コメント行として扱います。
※CSV 内の”等での動作は保証いたしません。

パラメタデータの形式説明
デバイス番号半角英数字WEB UIによりれたデバイス番号記載します
WEB UIに設定されていないデバイス番号無視されます
ユニット番号半角英数字PLC機器のModbusユニットIDを設定します。
ユニットIDは、1~247 または 255 を記載します。
方式半角英数字読込方式として、以下のいずれかを記載します
設定内容Web UI表記
bitsコイル
input_bits入力ステータス
registerレジスタ
input_register入力レジスタ
データタイプ半角英数字データタイプとして以下設定してください
なお、読込方式を"bits"または"input_bits"を設定した場合カラムは無視されます
設定内容WEB UI表記
u_int16符号なし16ビット整数
int16符号き16ビット整数
u_int32lsb符号なし32ビット整数
リトルエイディアン
int32lsb符号き32ビット整数
リトルエイディアン
u_int32msb符号なし32ビット整数
ビッグエイディアン
int32msb符号き32ビット整数
ビッグエイディアン
読込開始アドレス半角英数字みたいデータが格納されているPLC機器開始アドレスを設定します。先頭が"0x"の場合は16進数解釈されます
読込レジスタ半角数字みたいレジスタ記載します。


・記載例

#localname,unit_id,read_function,data_type,read_addr,read_registers
device_plc_client_0000001,15,bits,u_int16,0x130,37
device_plc_client_0000001,15,input_bits,u_int16,0x1c4,22
device_plc_client_0000001,15,registers,u_int16,0x160,3
device_plc_client_0000001,16,input_registers,u_int32lsb,0x108,1
device_plc_client_0000002,17,bits,u_int16,0x130,37
device_plc_client_0000002,18,input_bits,u_int16,0x1c4,22
device_plc_client_0000002,19,registers,int16,0x160,3
device_plc_client_0000002,20,input_registers,int32lsb,0x108,1
device_plc_client_0000003,30,bits,u_int16,0x130,37
device_plc_client_0000003,30,input_bits,u_int16,0x1c4,22
device_plc_client_0000003,31,registers,u_int16,0x160,3
device_plc_client_0000003,31,input_registers,u_int32msb,0x108,1
device_plc_client_0000004,32,bits,u_int16,0x130,37
46/80
device_plc_client_0000004,32,input_bits,u_int16,0x1c4,22
device_plc_client_0000004,33,registers,int16,0x160,3
device_plc_client_0000004,33,input_registers,int32msb,0x108,1

CSV ファイルに定義したデバイス番号の「取得 PLC 対象」は、WEB UI の設定内容(CSVの定義内容)は破棄され、CSV ファイルの内容が使用されます。そのため、CSV ファイルに定義したデバイス番号の設定ついては、1 デバイス番号として取得対象とする全ての「取得PLC 対象」を記載してください。


最後に


今回の機能強化は、ビルや、工場などでの環境測定や、機器データの取得に際し、必要と思われるものをほぼ実装した形となります。
当社IDMアプライアンスなどと合わせてご利用いただき、環境測定やモニタリングシステムの構築に役立てていただければと思います。

2017年6月23日金曜日

[.tested][IoT] Omron ヒューマンビジョンコンポ (HVC-P2) 評価用カスタムハンドラ

Omron HVC-P2は、人の状態を認識できる画像センサモジュールです。


HVC-P2|HVC(Human Vision Components )シリーズ|製品ラインナップ|オムロン人画像センシングサイト:+SENSING

SwapImage





OBDN技術ブログによる動作検証は、該当するデバイスやソフトウェアの動作について、保証およびサポートを行うものではありません。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。

<検証環境>
OpenBlocks IoT BX1/EX1/VX1 基本ソフトウェア Ver2.11 / kernel 3.10.17-poky-edison

githubに評価用ソースコードをcommitしましたので、ご利用ください。
本コードは、IoT基本ソフトウェア向けのカスタムハンドラとして動作します。
ユーザハンドラを定義して、WebUIにて送信先などの設定を行ってください。
すでに別のカスタムハンドラをご利用の場合は、ソースコードのunix domain socket名を変更する必要があります。

https://github.com/goto2048/hvcp2_for_openblocksiot


・注意点

OpenBlocks IoT BX1で使用する場合、内蔵のモデムが/dev/ttyACM0から始まるモデムデバイスとなります。
HVC P2も同様にttyACMxxというデバイスとして認識されるため、udev等で/dev/ttyACM7に固定しないと、本デバイスが先に認識されてしまう関係上、3G通信が出来なくなる可能性があります。
それぞれdmesgでデバイス名の確認をし、ソースコード上のSERIAL_PORTの定義を変更してください。


顔認識の最大数は35ですが、35人分のJSONデータは基本ソフトウェアの機能で送信出来るペイロードのサイズ(4KB)を超えますので、適宜、最大数を設定する/定義したkey名を短くするなどのパッチをソースコードに当ててください。

評価用として、gotoがquick hackしたものですので、未サポートとなります。