「Modbus Slabe」と「Modbus_Tool」でRS485/Modbus RTU通信テストをする方法について紹介します。
「Modbus Slave」と「Modbus_Tool」でRS485/Modbus RTU通信テスト
Modbus(モドバス)とは、Modicon社がPLC (プログラマブルロジックコントローラ) 用途に開発したシリアル通信プロトコルです。 通信方式はマスタ・スレーブ方式で、マスターからのクエリー(コマンド:通信の開始)とスレーブからの応答メッセージで通信します(詳細は以下記事参照)。
「Modbus Slave」とは、その名の通りModbusのスレーブ機用シミュレータソフトです。
「Modbus_Tool」は、Modbusのマスタ機用シミュレータソフトです。
両方とも無料で使用できます(「Modbus Slave」は無料だと起動後10分間のみ使用可能という制限あり)。
今回は、以下のフローで「Modbus Slave」「Modbus_Tool」を対抗させて通信し、その動作検証を行いました。
● 「Modbus_Tool」を以下のリンクから入手します。
Modbus_Tool:https://www.fa.hdl.co.jp/jp/html/app/Modbus_Tool/index.html
Modbus Slave:https://www.modbustools.com/modbus_slave.html
● 1台のWindows PCにUSB/RS485変換器(CH340)を2台USBで接続します。
(Windows10だとネットに繋がっていれば自動でドライバをインストールしてくれます)
そして、2台の「USB/RS485変換器(CH340)」のAとBをそれぞれ接続します。
● 「Modbus Slave」を起動し、以下の通信設定を行います。
● 「Modbus_Tool」を起動し、接続設定を以下のようにします。
項目 | 設定値 |
---|---|
USB | ポートを選択(Modbus Slaveで選択したポートと異なる方を選びます) |
通信速度 | 9600bps |
データ | 8bit |
パリティー | なし |
ストップビット | 1 |
フロー制御 | なし |
● 「Modbus Slave」のトップ画面で「スレーブID:1」「ファンクションコード:03」に設定し、レジスタ0に「226」、レジスタ1に「498」を入れます。
● 「Modbus_Tool」の送信クエリ欄に以下の内容を入力し[送信]をクリックし、下画像のようにメッセージが返ってきたら通信成功です。
●送信クエリ(Tx)
01 03 00 00 00 02
項目 | 概要 |
---|---|
スレーブID | 01 |
ファンクションコード | 03 |
レジスタアドレス | 00 00 |
読み出すデータの長さ(データ数) | 00 02 |
【補足】
※1 C4 0B(CRCチェック)が送信クエリの末尾に自動的に付加されるので送信ボックスには入力しません
※2 RS485 Modbus-RTU での測定データの読み出しは Read Holding Register function で、開始アドレス 0x0000 から2 つのレジスター値を取得する方法を使います。
●受信メッセージ(Rx)
01 03 04 00 E2 01 F2 DA 10
項目 | 概要 |
---|---|
スレーブID | 01 |
ファンクションコード | 03 |
データ長さ(byte数) | 04 |
データ1 | 00 E2(10進数:226) |
データ2 | 01 F2(10進数:498) |
CRC | DA 10 |
なお、このクエリと応答メッセージは「温度湿度センサ(WTR10-E)とModbus_ToolでRS485/Modbus RTU通信テスト」での検証結果を模擬したものです(このときと同じ送信クエリと受信メッセージを、同じ通信設定でやり取りしています)。
これで、温度湿度センサ(WTR10-E)のModbusスレーブとしての機能をシミュレーションすることができました。
コメント