Modbusを使用したIoTデータ取得

# はじめに
Siemens社のPaaS（Platform as a Service）であるMindSphereへ汎用プロトコルを用いたデータのアップロードモデルを検討しました。

# デモ機の構成
以前、本Qiitaで紹介しました二酸化炭素モニタリングシステムではSiemens社のIoTゲートウェイであるMindConnectNanoとSiemens社のPLCをSiemens社独自のプロトコルS7を使用してデータ通信を行っていました。これまでの構成図（一部抜粋）を図１に示します。

![Modbus_図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/3672f810-a89a-7955-64ee-f63fcbadce47.png)

# 今回の構成
当社二酸化炭素濃度モニタリングシステムではPaaSのゲートウェイ（MindConnectNano）へデータを送っていました。このゲートウェイはS7プロトコルの他に汎用的なプロトコルにも対応しています。今回は汎用的なプロトコルの一つであるModbus RTUおよびModbus TCPを用いて各種センサーで取得したデータをPaaSへ送るための接続モデルを検討しました。
図2にその構成図を示します。

![Modbus_図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/2c31fd03-3853-b19c-e96e-4c7404f7e7ff.png)

# Modbus通信
Modbus通信はModicon社のPLC向けに同社が策定したシリアル通信プロトコルです。このプロトコルは仕様が公開されており、実装も容易であることから多くのファクトリ向けの機器で使用されております。
Modbus通信はシリアル通信とTCP/IP通信に分けられ、前者はModbus RTUおよびModbus ASCII、後者はModbus TCPと呼ばれるものが使われます。
MindConnectNanoにおいてシリアル通信はRS232、RS422、RS485に対応しておりその仕様は表1の通りです。

![Modbus_表1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/42e0636e-892b-1914-b6f8-bf59fc204fcf.png)

Modbus通信を使用する各機器には一意なアドレスが付与されます。Modbusコマンドにはこのアドレスが含まれており、アドレス指定された機器のみが通信を行います。Modbusプロトコルは​マスター/​スレーブ​アーキテクチャ​を​採用​し​て​おり、​一般的にマスタ​が​スレーブ​に​要求​を​送信​し​て応答​を​待ち​ます。図2の構成においてはマスターはMindConnectNano、スレーブはセンサー①～センサー④となります。

# Modbus RTU設定
MindSphere、MindConnectNanoにおけるModbus RTU通信を設定パラメータについて以下に記述します。
①データソース設定
MindSphere、MindConnectNanoではセンサー、PLCなどデータの取得元のデバイスをデータソースと呼んでいます。データソースの設定ではシリアル通信のパラメータを指定します。標準のパラメータは表2、オプションのパラメータは表3の通りです。

![Modbus_表2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/226ae37f-22b3-bd3b-89cb-8b4d884d1f65.png)

![Modbus_表3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/228c1f3b-c839-f8de-a8e5-e13458130f00.png)

②データポイント設定
データソース内のデータの所在地（アドレス）をデータポイントと呼んでいます。データポイントの設定ではデータに関わる各パラメータを指定します。データポイントの各パラメータを表4に示します。

![Modbus_表4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/2e64a07e-2914-cc87-c46e-dd1f99ab529e.png)

![Modbus_表5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/d11c7345-bcb8-b11c-32eb-57c151737c02.png)

![Modbus_表6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/9795742f-ae65-411d-890f-d23abaea9bf6.png)

![Modbus_表7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/9e247f2f-f183-b9d4-03c5-13c3e41835a0.png)

情報は Modbus スレーブ デバイスの 4 つの異なるテーブルに保存されます。 2 つのテーブルにオン/オフの離散値 (コイル) が格納され、他の2 つのテーブルに数値 (レジスタ) が格納されます。 各コイルのサイズは 1 ビットで、0 ～ 65535 のデータ アドレスが割り当てられます。各レジスタのサイズは 1 ワード (16 ビット / 2 バイト) で、データ アドレスは 0 ～ 65535 となります。

③設定例
設定例を表8に示します。

![Modbus_表8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/3a55e358-d99d-2f0a-d955-6b2e7dabb30e.png)

# Modbus TCP設定
MindSphere、MindConnectNanoにおけるModbus TCP通信を設定パラメータについて以下に記述します。
①データソース設定
Modbus RTUと同様にModbus TCPにおいてもデータソースの設定を行います。標準のパラメータは表9、オプションのパラメータは表10の通りです。

![Modbus_表9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/24cc8071-d60c-1126-1245-c52eaae9b2af.png)

![Modbus_表10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/1e7d56b6-5c6d-5e25-afcd-c73034c19783.png)

②データポイント設定
Modbus RTUと同様にModbus TCPにおいてもデータポイントの設定が必要です。データポイントの各パラメータを表11に示します。

![Modbus_表11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/dafab8ef-8d76-f052-1adf-9cc231619931.png)

![Modbus_表12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/e4ee1d41-97ee-2792-6d52-03fff105296f.png)

![Modbus_表13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/62ed1bff-e84d-ba1b-0135-5b270cd2be4d.png)

![Modbus_表14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/79038313-e657-e8b4-581a-e98d343b1d16.png)

情報は Modbus スレーブ デバイスの 4 つの異なるテーブルに保存されます。 2 つのテーブルにオン/オフの離散値 (コイル) が格納され、他の2 つのテーブルに数値 (レジスタ) が格納されます。 各コイルのサイズは 1 ビットで、0 ～ 65535 のデータ アドレスが割り当てられます。各レジスタのサイズは 1 ワード (16 ビット / 2 バイト) で、データ アドレスは 0 ～ 65535 となります。

③設定例
設定例を表15に示します。

![Modbus_表15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/138d6910-19e0-0a77-0db4-f19d7de0f617.png)

# おわりに
プログラマブルロジックコントローラ（PLC）で広く使われれているプロトコルであるModbusでPaaSへセンサーデータをアップロードする方法について検討しました。
イーサネット通信だけでなくシリアル通信にも対応できることから、旧型の装置、設備からも容易にDXを推進することが可能となります。
今後は実センサーを用いた環境の構築を検討したいと思います。

※SiemensおよびMindSphereは、Siemensの登録商標または商標です