
なぜ今、Modbusなのか?スマートホームに組み込んで気づいた利点
この記事は、NOT A HOTELのソフトウェア開発連載「Inside the SOFTWARE TEAM」の記事のひとつです。
https://note.com/notahotel_inc/n/n5a29a2c064b5
はじめに
はじめまして、NOT A HOTELでスマートホームエンジニアをしております Soni と申します。 普段は、スマートホーム機器の検証を行っております。今回は、Modbusについてお話しさせていただきます。
Modbusとは
Modbusは、1979年にModicon社(現シュナイダーエレクトリック)が開発した産業用通信プロトコルです。主にPLCなどを接続し、監視・制御のためにデータをやり取りする用途で使われます。Modbusには、シリアル通信に実装したModbus RTU、Modbus ASCII、TCP、UDPに実装したModbus TCP、Modbus UDPなどがあります。
弊社では、今までModbusを使った制御は行ってこなかったのですが、今回、すべての制御を見直す過程で、床暖房、電力メーター、風呂など幅広い範囲でModbusを利用する方針をとりました。
今回は、Modbusとは何かという話と、検証の中で気づいたメリットについてお話しさせていただきたいと思います。
Modbusプロトコルの中身
アドレス種別と関数コード
Modbusでは、4種類のアドレスを扱います。それぞれの種類は役割と読み書きの可否が分かれており、「どの種類のアドレスのデータを、どの関数コードで読む/書くか」を組み合わせて利用します。

書き込みが可能なアドレスの種類はCoilsとHolding Registersの2種類だけです。一方、Discrete InputsとInput Registersは読み取り専用として定義されています。そのため、センサー値や状態監視などの入力系データはDiscrete InputsやInput Registersから参照し、機器の設定値や制御コマンドはCoilsや Holding Registersに対して書き込みを行う、という設計になります。
また、Coils/Discrete Inputsは1ビット単位のON/OFFを扱うアドレスの種類であり、Input Registers/Holding Registersは16ビット幅のレジスタとして扱われます。32ビット整数や浮動小数点を扱いたい場合は、複数レジスタを組み合わせることになりますが、その並び順や形式は機器ベンダごとの仕様に依存するので、レジスタマップの記載に従って実装する必要があります。
局番
Modbusでは、1つの親機が複数の子機と通信することを前提としているため、各子機を識別するための番号として局番が定義されています。マスタは、この局番を指定して「どの機器に対して要求を送るか」を決めます。
下図のようにバスライン上に子機が n 台ぶら下がっている場合でも、各子機は自分に設定された局番と受信した局番を照合し、一致したときだけ親機の命令に応答し、一致しなければ無視するという動作になります。

電文
以下が読み取りを行うModbus通信の例です。局番とファンクションコードが先頭にあり、その後、何番からアドレスを読み取るかの開始アドレスと、何レジスタ読み出すかの読み出し点数が来て、最後のエラーチェックコードが付与されます。

Modbusを採用したメリット
Modbusを採用して感じたメリットをここに書きます。
制御盤の省スペース化やコスト最適化が可能に
Modbusは、産業用に工場などで用いられているため、制御盤に対する悩みである省スペース化に向き合っているデバイスが多く、盤内のモジュールのサイズを小さくすることができました。特に接点入出力では、モジュールサイズを5分の1のサイズまで下げることができました。

専用のデバッグツールでモニタリングすることが可能に
一般的なシリアルモニターを使う場合だと、バイト列の並びと仕様書を見比べて、読み解く必要がありますが、Modbus専用のデバッグツールやモニタを使うことで、シリアルラインの生データを目視で追わなくても、どのレジスタにどの値が入っているかを GUI上で確認できるようになりました。現地でのトラブルシュートやリモートからの状態確認が格段にやりやすくなり、復旧までの時間短縮や、原因切り分けの精度向上につながっています。

協力会社とのスムーズなコミュニケーションが可能に
新しい機器を接続する際も、「Modbusの標準仕様書」を共通の前提として、協力会社とレジスタマップやアドレス割り当てを詰めていくスタイルに変わりました。ゼロベースでプロトコル設計をする必要がなくなり、仕様書の読み違い・書き違いも減少しました。その結果、コミュニケーションコストと開発工数が削減され、新規機器連携のリードタイムも短くなっています。
データ操作・取得可能範囲の拡大
今までは、JEM-A HAコネクタなどの接点通信線を使用するのに比べて、より多くの操作を実行できるようになりました。特に、床暖房では、0.1度単位の温度制御をすることが可能になり、更なる体験向上に向けた取り組みを行うことができるようになりました。また、エラー取得も接点による一括警報ではなく、詳細なエラーコードを取得できるようになり、保守性を向上することができました。
渡り配線による結線の簡易化
Modbus RTUには、局番の説明で示した通り、複数の子機を一つのバスラインに繋いで良いという仕組みがあります。今までは、接点で動かす機器の場合、機器一つ一つに対して、複数の回線を盤まで持ってくる必要があり、機器の数に比例して端子台の数も盤内モジュールも増えていってしまうという問題がありました。今回、Modbusによる通信に置き換え、Modbus回線1回線のみで複数の機器を操作できるようになりました。
最後に
先日は、エアコン制御アルゴリズムについて書きましたが、シリアル通信について深く探求し、最適解を探すという仕事もやっております。興味がある方は是非カジュアル面談にお越しください。