メインコンテンツまでスキップ

Modbus TCP

Modbus は最も歴史が長く、最も広く使われている産業通信プロトコルです。ほぼすべての計測器 / インバータ / 一般産業機器が Modbus に対応しています。

このゲートウェイは Modbus TCP (イーサネット) と Modbus UDP に対応しています。シリアル (RS-485) のみの機器は、Modbus ゲートウェイ (RS-485 → イーサネット) を経由する必要があります。


登録フォームの入力値

入力欄何を入力するか
IP アドレスModbus スレーブの IP192.168.0.50
ポートModbus ポート502 (標準)
応答タイムアウト (request-timeout)スレーブの応答を待つ最大時間 (ms)5000 (5秒)

Modbus には ユーザー / パスワードの概念がありません。IP が到達できれば誰でも値を読み取れます。


タグの PLC アドレス表記

Modbus はメモリ領域ごとに次の 4 種類があります。

領域表記の先頭意味
Holding Registerholding-register:N16-bit、読み書き可 — 最も一般的
Input Registerinput-register:N16-bit、読み取り専用
Coilcoil:N1 ビット、読み書き可
Discrete Inputdiscrete-input:N1 ビット、読み取り専用

N はスレーブのマニュアルに記載されたアドレス番号です (通常は 1 から始まります)。

データ型まで明示した表記

同じメモリ領域でも 16-bit / 32-bit / 実数 / 文字列などで解釈が異なる場合があるため、データ型を併記できます。

表記意味
holding-register:1単純な 16-bit 整数 (signed)
holding-register:1:UINT16-bit 符号なし整数
holding-register:1:DINT32-bit 整数 (メモリ 2 ワード分を使用)
holding-register:1:REAL32-bit 実数 (メモリ 2 ワード分を使用)
holding-register:1:LREAL64-bit 実数 (メモリ 4 ワード分を使用)
holding-register:100:STRING[10]100~109 の ASCII 文字列
coil:1コイル 1 番 (1 ビット)

データ型を明示しない場合は 16-bit 整数として解釈されます。32-bit 以上の値の場合は必ず明示してください。


データ形式 / 形式補助

タグ登録 の [データ形式] と [形式補助] の欄は、次のように対応させると分かりやすいです。

PLC の値データ形式形式補助PLC アドレス例
コイル / ビット入力Boolean(空欄)coil:1 または discrete-input:1
16-bit 整数Integer(空欄)holding-register:1
16-bit 符号なし整数IntegerUIholding-register:1:UINT
32-bit 整数IntegerDWholding-register:1:DINT
32-bit 実数 (最も一般的)FloatREALholding-register:1:REAL
64-bit 実数DoubleLREALholding-register:1:LREAL
文字列 N 文字StringSTR[N]holding-register:10:STRING[N]

よくある問題と解決方法

症状 / メッセージ考えられる原因解決方法
「Read timeout」/ 応答が遅いスレーブの応答遅延、ケーブル / ファイアウォール / ポート(502) の遮断pingtelnet <ip> 502 で到達性を確認。応答タイムアウトを延ばして再試行
アドレス表記の誤り (Invalid address)書式の入力ミスholding-register:1 のようにコロンを正確に記述
値が常に 0 しか出ない領域種別の mismatch (holding なのに input で読んでいる等)スレーブのマニュアルで「FC 03 / 04 / 01 / 02」のどれかを確認
32-bit 実数が化けて出るスレーブの byte / word 順序が異なるスレーブが little-endian の場合はデータ型を :UDINT_LSWORD_FIRST などに変更

byte 順序の問題はスレーブのメーカーごとに異なるため、マニュアルを確認するか、他のツール (Modbus Poll など) で比較検証するのが最も早い方法です。


シミュレータで試す

PLC がなくても Modbus シミュレータで動作検証ができます。

  • [接続追加] 時のカード一覧から シミュレータ → Modbus シミュレータ を選択すると、ゲートウェイが自動的にシミュレータプロセスを起動して接続します。
  • 外部ツールを別途用意せずに、そのまま holding register にダミー値が入ってきます。

さらに詳しい例 / 自動登録

高度 — REST API の Modbus 例を参照してください。