Intern

Modbus Master / Slaveの検証

はじめに

今回はModbus MasterとModbus Slaveをインストールし、シミュレーション・検証を行った。

Modbusとは

Modbusは、工場やビルなどの機器同士が通信するためのシンプルな方法である。1つのマスター(例: コントローラー)がデータを要求し、複数のスレーブ(例: センサー)がその要求に応える仕組みである。Modbusには、シリアル通信(RTUやASCII)とネットワーク通信(TCP/IP)の種類がある。簡単に使えるため多くの機器が対応しているが、セキュリティ対策が必要である。工場の自動化やエネルギー管理でよく使われている。

Modbusのインストール

・下記リンクからmsiファイル「ModbusTool.msi」をダウンロードしてインストール

  ModbusTool.ms

・インストール方法はこちら

  Home · ClassicDIY/ModbusTool Wiki · GitHub

 →インストールするとModbusMaster(Active)とModbusSlave(Active)というアイコンが生成される

検証手順

1. Modbus Slaveの設定

  • ・Modbus SlaveでTCPポート502でリスニング(接続受付)を行う
  • 詳細:
    • 通信方法は初期設定のまま (TCP、ポート:502)
    • 「Listen」ボタンをクリックしてスレーブがリスニングを開始させる
    • 下部の「Communication Log」に「Listening to TCP port 502」と表示され、スレーブが接続待機中であることが確認できる

2. Modbus Masterの設定と接続

  • ・Modbus Masterソフトウェアで127.0.0.1(ローカルホスト)にTCP接続する
  • 詳細:
    • 通信方法は初期設定のまま (TCP、ポート:502、IPアドレス:127.0.0.1)
    • 「Connect」ボタンをクリックしてスレーブに接続する
    • 下部の「Communication Log」に「Connected using TCP to 127.0.0.1:502」と表示され、マスターがスレーブに接続されたことが確認できる

3. Modbus Slaveでデータの設定

  • ・Modbus Slaveソフトウェアで開始アドレスを0 → 100に変更してみる
  • 詳細:
    • メモリアドレス「0」に「100」と入力する
    • 「Apply」ボタンをクリックして設定を適用する
    • 「Communication Log」に「Accepted connection」と表示され、マスターからの接続が受け入れられたことが確認できる

4. Modbus Masterでデータの読み取り

  • ・Modbus MasterソフトウェアでSlaveのコイルデータを読み取る
  • 詳細:
    • 「Start」アドレスのテキストボックスに「100」と入力する
    • 「Read coils」ボタンをクリックしてコイルデータを読み取る
    • 「Communication Log」に「Read succeeded: Function code: 1」と表示され、データの読み取りが成功したことが確認できる
    • スレーブで設定したアドレス0の値(100)がマスター側でも反映されている

・画像には0~87までのメモリアドレスが表示されているが、今回はStartを0、Sizeを64に設定しているため、0から3までのコイルデータ(メモリアドレス)を一度に読み取るということになる。

・16進数のため、以下の範囲までのメモリアドレスが反映される
〇:0~3 (3×16=48) → 「0~48」 で 0~63までの64個の値の範囲内
✕:4~ (4×16=64) → 「64~」 は 0~63までの64個の値の範囲外

→ 4以降のメモリアドレスの値はマスター側に反映されない

5. 通信ログの詳細

  • ・Modbus MasterとSlaveの通信ログの確認
  • 詳細:
    • スレイブ側のTXとマスター側のRXが一致していることから、正常にデータのやり取りができていることが分かる

・TX … 送信データ
・RX … 受信データ

・データ詳細
例)TXデータ:”00 00 00 00 00 0b 01 01 08 00 64 00 00 00 00 00 00 00”
 ・”00 00 00 00 00 0b” = 通信の識別情報
 ・”01” = どのFunctionCodeか (今回はコイルの読み取り=”01″)
 ・”08 00 64 00 00 00 00 00 00 00” = 実際のデータ
  → ”00 64” = 16進数の値で10進数の100に相当する

・Modbusマスター

・Modbusスレイブ

6. ポーリング設定

  • ・Modbus Masterソフトウェアでポーリング間隔を2000ミリ秒に設定する
  • 詳細:
    • 「Poll」チェックボックスをオンにし、間隔を2000ミリ秒に設定する
    •  → マスターがスレーブから上記の間隔でデータを読み取るようになる
    • 「Communication Log」にポーリングによって複数回の読み取りに成功していることが確認できる

7. データの読み取り結果

  • ・データ確認
  • 詳細:
    • スレーブソフトウェアでメモリアドレス1にも値「100」を入力する
    • マスター側の「Communication Log」でメモリ1の値が反映されていることが確認できる