OpenBlocks IoT搭載 FW3.4の新機能 – Modbus対応機能強化について

Modbus機器の仕様の問題点

Modbusは規格とはいえ、ほとんどの機器の仕様において、公式規格から逸脱がみられれます。その為、実際には機器ごとに接続のためのプロトコルを直接プログラムに記述しなければなりませんでした。(ハードコーディング)

FW3.4でのModbus接続機能強化

今回アップデートしたFW3.4では、Modbus機器について、データのモデリングが可能となり、対象Modbus機器のデータに対応したモデルファイルを記述することで、プロトコルを直接プログラムに記述することなく、Modbus機器が接続可能となりました。

一度記述したモデルファイルは、再利用可能のため、既にOpenBlocksで対応済みとなっている機器については、モデルファイル記述も不要で、FW3.4のWeb UIの設定画面でシンプルにプルダウンリストから機種を選ぶだけで済みます。

FW3.4に含まれるPD HandlerによるModbusモデルファイルの取り扱い

従来の PD Handler Modbus では、Modbus のファンクションコードと共にデータのタイプとレジスタのアドレスと個数を直接指定することで、データを整数配列として読み書きしていました。
それに対し、PD Handler Modbus 2 では、モデリングファイルを用意することで、そのインデックスとなるメーカー/プロダクト/モデル/SKU を指定することによりモデルリングファイルの定義に従いデータの読み書きを行います

 

PD Handler Modbus と PD Handler Modbus 2 の比較

モデルファイルの構造

モデルファイルのインデックスは、以下の JSON 文字列に示すようにメーカー名、プ
ロダクト名、モデル名、SKU 名の 4 階層で構成され、各階層が JSON オブジェクトの配
列となっており、各配列要素を maker オブジェクト、product オブジェクト、model オ
ブジェクト、sku オブジェクトと呼びます。sku オブジェクトには、レジスタと出力書式
を定義する幾つかのオブジェクト配列が含まれています。

     [
         {
             "maker": "Maker Name A",
             "products": [
                 {
                     "product": "Product Name",
                     "models":[
                         {
                             "model": "Model Name",
                             "skus": [
                                 {
                                     "sku": "Sku Name",
                                         :
                                 }
                             ]
                         }
                     ]
                 }
             ]
         },
         {
             "maker": "Maker Name B",
                     :
         }
     ] 

モデリングファイルの記述例

この例では、1 つのファイルに 2 つの SKU が記載されています。
SKU ‘0001’ は、電流と電圧を配列 (ex. “current”:[23.1, 45.2], “voltage”:[100.2, 100.3]) で
出力するのに対し、SKU ‘0002’ は個別 (ex. “current0”:23.1, “current1”:45.2,
“voltage0”:100.2, “voltage1”:100.3) に出力します。

{
     "maker":"Example Co.,Ltd.",
     "include":false,
     "products":[
         {
             "product":"Smart Meter",
             "include":false,
             "models":[
                 {
                     "model":"ZZZ1",
                     "include":false,
                     "byteOrder":"lsb",
                     "wordOrder":"lsb",
                     "bitOrder":"msb", 
                     "precision":15, 
                     "skus":[
                         {
                             "sku":"0001",
                             "include":false,
                             "outputBits":[
                                 {
                                     "address":"0x0101",
                                     "enable":false,
                                     "writeOnly":true,
                                     "bitsArray":[
                                         { "include":true, "key":"switch" }
                                     ]
                                 }
                             ],
                             "inputRegisters":[
                                 {
                                     "address":"0x0001",
                                     "enable":true,
                                     "registersArray":[
                                         { "include":true, "type":"int32_t",
                                           "form":"dec", "ratio":0, "key":"power" },
                                         { "include":false, "type":"int32_t",
                                           "form":"dec", "ratio":0, "key":"reversePower" },
                                         { "include":true, "type":"int32_t",
                                           "form":"dec", "ratio":-1,"key":"current", "array":2 },
                                         { "include":true, "type":"int32_t",
                                           "form":"dec", "ratio":-1,"key":"voltage", "array":2 },
                                         { "include":false, "type":"int32_t", 
                                           "form":"dec", "ratio":0, "key":"instPower" },
                                         { "include":false, "type":"uint32_t",
                                           "form":"dec", "ratio":0, "key":"serialNumber"}
                                     ]
                                 }
                             ],
                             "infos": {}
                         },
                         {
                             "sku":"0002",
                             "include":false, 
                             "outputBits":[
                                 {
                                     "address":"0x0101", 
                                     "enable":false, 
                                     "writeOnly":true, 
                                     "bitsArray":[
                                         { "include":true, "key":"switch" }
                                     ]
                                 }
                             ],
                             "inputRegisters":[
                                 {
                                     "address":"0x0001",
                                     "enable":true,
                                     "registersArray":[
                                         { "include":true, "type":"int32_t",
                                           "form":"dec", "ratio":0, "key":"power" },
                                         { "include":false, "type":"int32_t",
                                           "form":"dec", "ratio":0, "key":"reversePower" },
                                         { "include":true, "type":"int32_t",
                                           "form":"dec", "ratio":-1,"key":"current0" },
                                         { "include":true, "type":"int32_t",
                                           "form":"dec", "ratio":-1,"key":"current1" },
                                         { "include":true, "type":"int32_t",
                                           "form":"dec", "ratio":-1,"key":"voltage0" },
                                         { "include":true, "type":"int32_t",
                                           "form":"dec", "ratio":-1,"key":"voltage1" },
                                         { "include":false, "type":"int32_t",
                                           "form":"dec", "ratio":0, "key":"instPower" },
                                         { "include":false, "type":"uint32_t",
                                           "form":"dec", "ratio":0, "key":"serialNumber" }
                                     ]
                                 }
                             ],
                             "infos": {}
                         }
                     ]
                 }
             ]
         }
     ]
 }

詳しくは以下をご覧ください。

OpenBlocksデータハンドリング設定リファレンスガイド

お問い合わせはこちらから

お問い合わせ窓口 | ぷらっとホーム株式会社
ぷらっとホーム株式会社のお問い合わせ窓口のページです。製品や各種サービス、会社に関するお問い合わせなど、専用フォームやメール、お電話からご利用いただけます。
星 賢志

1985年生まれ、2児のパパです。
日頃、マーケティング部署でメンバーと試行錯誤しています。ブログ記事を一番書いているのは僕だったりします。
マーケティングは奥が深すぎて日々勉強の毎日ですが、子どもからプレゼントされたポケモンカードも奥が深すぎて参っています(笑)
移住するなら、宮古島できれいな海を見て、美味しいものを食べて生活したいですね(^O^)

IoTゲートウェイ
シェアする
ぷらっとブログ

コメント

タイトルとURLをコピーしました