Modbus RTU

シリアルバス越しの Modbus。物理的な回線を明示して形にし、ユニット ID を持つ機器がそれを共有します。

Markdown で表示

Modbus RTU のドライバーは、シリアルバス上の Modbus の機器と話します。RS-485 か RS-232 で、物理的な COM ポート、USB のアダプター、仮想やリダイレクトのポートを通して届きます。バスが物理的に共有されるので、構成はドライバー → 回線 → 機器 → タグになります。回線が電気に関わるものすべて(ポート、ボーレート、形式、タイミング)を持ち、その上の各機器は自分のユニットのアドレス、読み出し、タグだけを持ちます。

シリアル回線

項目 意味 既定
名前 バスの分かりやすい名前。いつでも編集できます。 必須
シリアルポート オペレーティングシステムのポート、たとえば COM3。この項目は自由記述で、物理、仮想、リダイレクトのどのポートでも使えます。横の矢印は、Windows が現在検出しているポートを出し(アダプターの抜き差しのための再読み込みも付きます)、検出された一覧はあくまで便宜のもので、許可リストではありません。 COM1
ボーレート バス上のすべての機器が共有するビットの速さ。 9600
シリアルの形式 8N18N28E18E28O18O2 から選びます。数字はデータビット、文字はパリティ(N はなし、E は偶数、O は奇数)、最後の数字はストップビットです。ほかのビット幅、マーク/スペースのパリティ、1.5 ストップビットには対応しません。 8E1
応答のタイムアウト(ms) 1 台のユニットの応答を待つ最長時間、100 から 60,000。長くすると遅い現場設備に合わせられますが、応答のないユニットや機器検出の判定には時間がかかります。 1000
通信の最小間隔(ms) 回線全体に効く互換のための間隔調整、0 から 1000。0 ならプロトコルの自動の休止だけが残ります。正の値はそれを引き上げることはできても、下げることはできません。 0

プロトコル自身がフレームのあいだの休止を求めており、回線は常にそれを守ります。19,200 ボー以下では、自動の休止は設定した形式から計算した 3.5 文字分の時間です。19,200 ボーより速いときは、仕様が勧める固定の 1.75 ms です。実効の休止は、その自動の下限と設定した間隔の大きいほうであり、合計ではありません。パネルは両方の値を見せます。間隔を引き上げると、その回線のすべてのユニットが意図してゆっくりになります。これは互換のための補助であり、配線、終端、接地、ノイズの不具合を直すものではありません。

新しい回線は、先に物理的な設定を入力できるよう無効な状態で始まります。1 つの物理ポートは、多くても 1 本の回線に属します。比較では大文字と小文字を区別せず、回線が無効であっても同じです。名前と通信の間隔は、回線が動いているあいだも編集できます(タイミングの変更はポートを開き直さずに効きます)。ポート、ボーレート、形式、応答のタイムアウトは、回線が有効なあいだロックされます。先に無効にして保存してください。回線を無効にすると、その機器の個々の有効の選択を変えずに、すべての機器の通信が止まります。

回線は、物理的な通信路の状態を機器とは別に報告します。オフ待機(有効な機器がない)、接続中オンライン、または診断を添えたポート障害です。空の回線を削除すると、その回線だけが消えます。機器のある回線を削除するときは、はっきりとした確認を求め、その機器とタグも一緒に削除します。

機器

項目 意味 既定
シリアル回線 固定です。機器はその回線の下に作られ、物理的な組を受け継ぎ、パネルには読み取り専用で出ます。目的の回線の下に機器を追加してください。 なし
ユニット ID バス上でのその機器の Modbus のアドレス、1 から 247。回線の中で一意です(無効な機器も含みます)。 1
読み出し周期(ms) 上書きしないタグに対する既定の読み出しの速さ。 1000

内部のランタイムのアドレスは modbus+rtu://<line-id>/<port>/<baud>/<format>/<timeout>/<unitId>/<interval> で、回線の安定した識別名と物理的な設定の全体を運びます。分かりやすい名前は決して運びません。

回線を共有する振る舞い

このドライバーは回線ごとにシリアルのセッションを 1 つ開き、すべての機器のすべての要求を 1 つの取りまとめ役で直列にするので、読み取りと書き込みがバス上で重なることはありません。待っている書き込みは、限度のある優先度で次の空いた順番を取ります。書き込みはすみやかに処理されますが、書き続けても読み出しが飢えることはありません。各ユニットのタイムアウトは、段階的な待ち延ばしとともに切り離されているので、黙っている機器 1 台が遅くするのは自分だけです。CRC の正しい Modbus の例外は、そのタグのその要求だけのエラーであり、回線は健全なままです。共有のセッションを無効にして、回線全体で協調した開き直しを始めるのは、物理的な入出力の失敗(ポートが消えた、アダプターが抜けた)だけです。最後の機器が手を離すと、ポートが閉じます。

タグのアドレス指定

タグのアドレス指定は Modbus TCP とまったく同じです。レジスターの種類HoldingRegisterInputRegisterCoilDiscreteInput。既定はタグの型とアクセスから導かれます)、0 起算のレジスター番号、自動の個数(ブール値はレジスター 1 つ、Int32 と Float は 2 つ、文字列は 4 つ。ほかの幅は決まっているので、入力欄は文字列のタグにだけ描かれます)、そして独立した 2 つのバイト順の入力欄で、どちらも既定は上位を先にします。使える値の型も同じ 4 つ、つまり Boolean、Int32、Float、String です。読み書きの機能コードと 4 通りのバス上の並びは Modbus TCP のページに書いてあり、ここでもそのまま当てはまります。

機器検出

機器検出は、既存の回線でユニット ID の範囲を探索するもので、その回線のパネルにあります。

項目 意味 既定
ユニット ID の開始 最初に探索するユニット ID、1 から 247。 1
ユニット ID の終了 最後のユニット ID。開始から昇順です。 32

スキャンは回線の保存済みの物理的な設定を読み直し、ポートを一度だけ開き、Read Basic Device Identification(機能コード 43/14)でその範囲を順番に探索し、回線の実効のフレーム間の休止に合わせて各探索の間隔を取ります。設定の組み合わせを試すことも、レジスターを読むこともありません。CRC の正しい Modbus の例外は、身元は分からなくてもそのユニットの存在を示します。タイムアウトや壊れたフレームは、示しません。

使用中の回線が自動で中断されたり切り替えられたりすることは決してありません。スキャンの前に無効にし、終わったら自分で有効に戻してください。取りやめるとシリアルのセッションが閉じ、すでに出ていた結果は、明示的に追加するまで一時的な候補として残ります。すでに設定されているユニット ID はそう示され、重複を作る代わりに既存の機器を開きます。結果はタグを運びません。レジスターは追加のあとで設定します。

機器検出と回線の設定は、物理ポートごとに 1 つの、すぐに失敗を返す予約を共有するので、スキャンと設定変更がポートを取り合うことはありません。取れなかったほうには、どの操作がポートを握っているかが伝えられます。

知っておきたい限界

  • 4 つの値の型が、バス上の変換の語彙のすべてです。幅の広い整数や Double は出ません。
  • 通信量はバスの性質です。回線上のすべての機器が 1 本の要求の流れを共有し、実効のフレーム間の休止に合わせて間隔が取られるので、機器が多いときや間隔を引き上げたときは、どの読み出しの周回も長くなります。