覚えていれば役に立つ!Modbusを知ろう
前回の「タッチパネルは怖くない!?メッセージの処理方法」の「Modbusの通信方式」の続きです。
ModbusはPLC(プログラマブルロジックコントローラ)用の通信規格で、とても普及しているプロトコルです。
物理層はRS485規格に準拠していますので、インターフェース回路を作成するのも簡単です。
![](https://shozan.jp/wp-content/uploads/2019/03/224.jpg)
Modbus信号波形の例 黄色Data+ 青色Data-
![](https://shozan.jp/wp-content/uploads/2019/03/219.png)
信号D1、D2は反転信号となりスレーブでは差動信号で入力します。
![](https://shozan.jp/wp-content/uploads/2019/03/220-1024x527.png)
このD1とD2は一般的にData+、Data-と呼び、信号が反転しています。
信号波形をオシロスコープで観測すると何をしているかが分かります。
データは下の図1のように非同期式の連続信号です。
■1バイト構成
スタートビット+データビット+パリティビット+ストップビット=11ビット
![](https://shozan.jp/wp-content/uploads/2019/03/221.png)
![](https://shozan.jp/wp-content/uploads/2019/03/221-1.png)
データ数はファンクションコードにより変わります。
![](https://shozan.jp/wp-content/uploads/2019/03/223.png)
局番=1、レジスタアドレス=107H ワード数=1レジスタを読み出してみます。 ファンクションコードは 03H を使用します。
1.全体の信号波形
左の固まりがマスター側のクエリです。
右側の固まりはスレーブ側からのレスポンス信号です。
![](https://shozan.jp/wp-content/uploads/2019/03/224.png)
2.マスター側のみを表示して、データを読んでいきます。
1/0反転信号で1ビットの幅が分かります。
1データは11ビットです。
スタートビットは0なので、次から読み出します。
![](https://shozan.jp/wp-content/uploads/2019/03/225.png)
3.スレーブアドレスとファンクション
図1の順序にあてはめると
最初は16進数 01h スレーブアドレス1の意味です。
2番目は16進数 03h ファンクション 3の意味です。
![](https://shozan.jp/wp-content/uploads/2019/03/226.png)
4.読出し先頭レジスタアドレス
3番目は16進数 01h
4番目は16進数 0Fh
この2ワードで レジスタアドレス 010Fh を指定しています。
![](https://shozan.jp/wp-content/uploads/2019/03/227.png)
5.読出しレジスタアドレス数
5番目は16進数 00h
6番目は16進数 01h
この2ワードで 読み込みレジスタ数 0001h を指定しています。
![](https://shozan.jp/wp-content/uploads/2019/03/228.png)
以上、信号波形より表のようなクエリデータを読み取ることが出来ます。
![](https://shozan.jp/wp-content/uploads/2019/03/229-1024x758.png)
パソコンとRS485-USB変換機を使って簡単に読み取るキャプチャプログラムもできます。
![](https://shozan.jp/wp-content/uploads/2019/03/230.png)
図2 EXSELのマクロプログラムでデータをキャプチャ
Modbusはオープン規格で認証機関が無いのですが、このぐらいの事を知っていれば何かあっても?自分で問題を解決できます!
![](https://shozan.jp/wp-content/uploads/2019/03/2225.jpg)
Modbusについての詳細は
Modbus Organization http://www.modbus.org/
を参照して下さい。