シーケンサでMODBUS RTU通信をしよう(1)

FA

シーケンサで MODBUS を使うのはとても簡単!
取説の通りにするだけで、あっという間に数値の取り込みが完了します。

ところで、MODBUS って何でしたっけね?

もちろん、

MODBUS は 通信プロトコル
RTU というのは バイナリ伝送 
MODBUS RTU とくれば、一般的には RS-485 

実装 は賢い人達にお任せするとして、僕達の仕事は 導入
いざ!って時に使いこなせるように一緒に見て行きましょう。

どうも!ズブです。今回はシーケンサでMODBUS RTU通信をしよう(1)

MODBUS RTU

復習がてら、要点を見ていきましょう。

RS-485

ラインに 差動信号 を乗せます。

レシーバは 32台 接続できます。

信号反射を消滅させる為に、終端抵抗(100~120Ω)が必要です。

ケーブルはCAT5以上の ツイストペアケーブル
とはいえ、調達を忘れてVCTFで繋いでしまったりする事もあるんですけど (´・ω・`)

後からノイズ等で患う位なら、最初からキッチリ仕上げておくべきですよね。

↓こんな格好良いのもあります。
富士電線工業株式会社

よく見かける 32台 というのは、差動ドライバの一般性能に掛かってきているのですね。

全二重 / 半二重

2線式、4線式 と呼ばれてる奴ですね。

TXD で送ったデータを RXD で受け取ります。
シーケンサだと、SDA  RDASDB  RDB と表記されています。

SENDER(送り)と RECEIVE(受取り)の事ですね。

図から分かるように

全二重 は、送信ラインと受信ライン同時に信号を乗せることができます。
半二重 は、ラインに1つの信号しか乗りません。

全二重は同時通信とはいえ、結局スレーブが信号を乗せるタイミングを制御しないと 信号が衝突 する事となります。

マスタ の タイミング だけで制御できる 半二重(2線式)がシンプル で一般的なのですね。

マスタ―スレーブ方式

共通ラインに信号を流すので、みんなの会話は筒抜けですが、

マスタ しか 要求(クエリ)を出しませんし、
スレーブ は名指しされないと 返答(レスポンス)しません。

ライン に 要求 を出せるのは、マスタだけ と決まっているのですから、返答の時間を待つだけで、ライン上の信号衝突が避けられるのです。

設定の タイムアウト や リトライ回数 って、ここで効いてくるのですね。

全スレーブに一括で要求を出す ブロードキャスト 時はスレーブからの返答はありません。

MODBUSプロトコル

通信フレーム

RTUの通信フレームです。

マスタからの要求は、この形に沿ってライン上に上げられているのですね。

ざっとの意味は

START         ゴミ掃除時間
アドレス       スレーブの号機番号
ファンクションコード スレーブに対しての操作
データ        操作に必要なデータ
エラーチェック    CRC-16

ファンクションコードはMODBUSの様式で決まっていて

こちらから、行いたいコードを入力します。

クエリ/レスポンス

名指しされたスレーブは

OK なら ファンクションコードとレスポンスデータ 
NG なら エラーファンクションコードとエラー番号 を返します。

もちろん、名指しされていない スレーブ達は沈黙 です。

例えば、

マスタが
[ 01H 03H 00H 0012H ] このようなデータを上げると

1号機から
[ 03H 4DH 0021H ] このようなデータが返ってくる訳です。
※CRCの箇所は適当です

それらをイメージすると

この様な動きになる訳です。

まとめ

シーケンサへの MODBUS RTU 導入時に必要な知識を纏めました。
勿論、マニュアル片手に装置を作り上げて行くのでしょうが、当たりは付けやすくなったのではないでしょうか。

差別的だという理由から マスタースレーブという言葉は無くなりつつあるようです。
メイン / レプリカ、プライマリ / レプリカ、ペアレント / ワーカー 
どの言葉に落ち着くかは分かりませんが、扱う機器によっては記述が違うかもしれませんね。

合わせて読みたい
シリアル通信の基本
シーケンサでシリアル通信をしよう
GOTタッチパネルでModbus通信をしてみよう