Modbusは産業機器で広く使われるアプリケーション層の通信プロトコルです。クライアントが要求を送り、サーバーはファンクションコードに従って応答します。プロトコルは通信形式を決めますが、温度などの値をどのレジスタに置くかは機器ごとに異なります。実機では必ずレジスタ表を参照してください。本文のファンクションコードと電文のバイトは16進数です。0Fは10進数の15、10は10進数の16です。

1. 四つのデータ領域

  • コイル:読み書き可能な1ビット。主なコードは読出し01、単一書込み05、複数書込み0F。
  • ディスクリート入力:読出し専用の1ビット。コード02。
  • 入力レジスタ:読出し専用の16ビット。コード04。
  • 保持レジスタ:プロトコル上は読み書き可能な16ビット。読出し03、単一書込み06、複数書込み10。ただし機器が書込みを制限する場合があります。

03と04はともに16ビットを読みますが、対象領域が異なります。機器の資料でコード、レジスタ番号、型、倍率、権限を確認しましょう。

2. Modbus RTUとModbus TCP

RTUはRS-485などのシリアル回線でよく使われます。フレームは局番、コードとデータ、CRC16で構成されます。同じバスの機器には異なる局番を設定し、通信速度、データビット、パリティ、ストップビットを一致させます。CRCは下位バイトを先に送ります。

Modbus TCPはTCP/IPを使用し、通常はポート502です。7バイトのMBAPヘッダーにはトランザクション識別子、プロトコル識別子、長さ、ユニット識別子が入ります。TCPフレームにRTUの末尾CRCはありません。TCP/シリアルゲートウェイではユニット識別子が接続先機器の選択に使われます。

3. 40001とアドレス0の関係

資料上の40001は通常、最初の保持レジスタを表します。先頭の4はデータ領域を示し、実際の要求には0から始まるオフセットを入れます。この方式では40001はコード03・開始アドレス0000、40002は0001です。ただし資料やツールによって表示方法が違います。隣のレジスタへ書き込む前にアドレス方式を確かめてください。

1レジスタは16ビットです。32ビット値は通常2レジスタを使いますが、ワードの並びは機器依存です。温度を10で割るような換算も機器の定義であり、Modbusの共通規則ではありません。

4. 二つの保持レジスタを読む例

例として40001と40002に温度と湿度があり、生値が250と400、換算係数が各0.1と資料に記載されているとします。コード03でオフセット0から2レジスタ読みます。数値と単位は説明用です。

PDU request:  03 00 00 00 02
PDU response: 03 04 00 FA 01 90

TCP request:  00 01 00 00 00 06 01 03 00 00 00 02
TCP response: 00 01 00 00 00 07 01 03 04 00 FA 01 90

要求PDUの03はコード、00 00は開始オフセット、00 02は個数です。応答の04は後続データのバイト数、00 FAは250、01 90は400を表します。仮定した換算で25.0 °Cと40.0%です。TCP例ではトランザクションIDが0001、プロトコルIDが0000、ユニットIDが01、MBAPの長さが0006と0007です。RTUでは同じPDUの前に局番、後に正しいCRC16を付けます。

5. 初回接続の確認手順

  • 最初は書込みを避け、資料にある読出し可能な値を選びます。回線、局番またはIP、ポート、シリアル設定を確認します。
  • データ領域とコードを選び、ツールが「40001」と「オフセット0」のどちらを求めるか確認します。
  • 少数のレジスタを読み、応答コードとバイト数を検証してから資料に従って換算します。
  • タイムアウトなら配線、ネットワーク、局番を調べます。83 02はファンクションコード03が例外02(不正なデータアドレス)を返したことを示します。開始オフセットと個数を確認してください。

安全性と資料

読出しや書込みは実機に影響し得ます。最初は書込みを避け、運用ネットワークへの接続を制限してください。従来のModbus TCPをインターネットに直接公開せず、対応機器のModbus Securityやネットワーク分離を検討します。

Leave a Reply

Your email address will not be published. Required fields are marked *

laitecn@gmail.com

QQ
微信
Whatapp