Modbus
Modbusは、産業オートメーション分野で最も広く用いられてきたオープンなフィールド通信プロトコルである。1979年にModiconがPLC間およびPLC―計測機器間のデータ交換を目的として策定し、その後に公開仕様として普及した。シンプルなマスタ/スレーブ(クライアント/サーバ)モデル、レジスタ中心のデータモデル、実装容易性、各種物理層(RS-232、RS-485、Ethernet)への適合性が特徴である。現在はRTU、ASCII、TCPの各モードが併存し、既設設備の保全からシステム統合まで幅広い用途に対応する。
通信アーキテクチャ
Modbusはマスタがポーリング要求を発行し、スレーブが応答する半二重・問い合わせ応答型を基本とする。アドレスは1〜247(RTU/ASCIIの場合)が一般的で、物理層としてはノイズ耐性と配線容易性に優れるRS-485のマルチドロップが主流である。Ethernet環境ではModbus TCPが用いられ、IPネットワーク上で同じレジスタモデルを扱えるため、監視制御システムの上位統合が容易になる。
データモデルとアドレッシング
Modbusはメモリマップを4種の論理オブジェクトで扱う。(1)Coils(離散出力、1bit)、(2)Discrete Inputs(離散入力、1bit)、(3)Input Registers(入力レジスタ、16bit)、(4)Holding Registers(保持レジスタ、16bit)である。実務では40001番台=Holding、30001番台=Input、00001番台=Coil、10001番台=Discreteといった表記が見られるが、実際のPDUではゼロ基点のアドレスと機能コードで識別する。数値はビッグエンディアンで格納され、32bitや浮動小数点は2レジスタを束ねる実装が多い。
機能コード(Function Codes)
代表例は、01/02(Coils/Discreteの読取り)、03/04(Holding/Inputの読取り)、05/06(単一Coil/単一Holdingの書込み)、15/16(複数Coil/複数Holdingの書込み)である。診断やデバイス識別に用いる08、43などもあり、装置の自己診断やメタ情報取得に役立つ。設計時は機能コードの対応表(サポート可否・最大点数・例外条件)を必ず確認する。
フレーミングと誤り検出
Modbus RTUはバイナリフレームで、アドレス、機能コード、データ、CRC-16から構成され、3.5文字時間以上のサイレント間隔でフレーム境界を定義する。ASCIIモードはLRCによる誤り検出で可読性を重視するが、スループットは低い。TCPではフレーミングにCRCは含まず、MBAPヘッダ(Transaction ID等)とPDUをTCP上で運ぶ。いずれも例外応答(機能コード+0x80、エラーコード)が規定され、範囲外アドレスや長さ不正等を通知する。
RTU/ASCII/TCPの使い分け
装置点数が多く長距離・高ノイズ環境ではRTU+RS-485が定番である。既存シリアル機器を上位SCADAへ統合する場合はゲートウェイでRTU⇔TCP変換を行う。ASCIIはレガシー互換やデバッグ時に有用だが新規採用は少ない。TCPはIPインフラを活用でき、複数クライアントから同一サーバへ同時アクセスできるため、監視系の拡張性が高い。
タイミング設計と性能
RTUではボーレート(例:9600、19200、115200bps)、文字長、パリティ、ストップビットの一致が必須である。スキャン周期は「リンク容量(bps)/要求フレーム長/応答フレーム長/RTUサイレント間隔」を基に見積もる。多数点を一括Readするほど効率は上がるが、装置側の最大点数や処理負荷に注意する。タイムアウトと再送回数はライン品質に応じて調整し、優先度の高いデータは要求回数や周期を分離する。
配線・EMC・信頼性
RS-485ではツイストペア・終端抵抗(典型120Ω)・偏向抵抗(バイアス)・スター接続の回避(基本はバス配線)・適切な接地が安定動作に直結する。ノイズ源(インバータ、モータ)からの距離確保、シールドの片側接地、アイソレーションの確保、サージ・ESD対策が肝要である。ケーブル長はボーレートに依存し、低速ほど長距離に有利である。分岐はドロップ長を短く抑え、終端は物理両端のみに配置する。
セキュリティとネットワーク設計
Modbusは当初セキュリティ機構を前提としておらず、TCP環境では特に境界防御が不可欠である。VLAN分離、FWのポート制限(TCP/502など)、読取り専用設計、ゲートウェイでのアドレス変換やアクセス制御、只読ミラーの採用が有効である。近年はTLSで保護する拡張やVPNトンネルでの区画化が行われる。装置側の書込み機能は必要最小限とし、重要レジスタには装置内ロックや認証を併用する。
実装・相互接続の注意
レジスタのエンディアンや32/64bitデータの並びはベンダ差があるため、装置マニュアルに従い「型」「スケーリング」「単位」「アラーム範囲」を明示する。時刻同期やイベントの時系列解析が必要なら、上位でNTP同期やタイムスタンプ付与を行う。ゲートウェイ変換時は例外コードの透過、タイムアウトの二重化、キューの飽和対策、同時接続数の上限に注意する。
テスト・診断
立上げ時は単体機に対し03/04で読取り、既知値(例えばファームバージョン、識別文字列)を確認する。CRC/LRCエラーやサイレント間隔不一致は「時々応答無し」や「フレーム破綻」を引き起こすため、ロガやアナライザでフレームを監視する。TCPではコネクションの張り替え頻度、キープアライブ、スループットと遅延を計測し、上位のスキャン設計に反映する。現場保全では予備の終端抵抗とRS-485/USBアダプタを常備し、配線断線や逆接の切り分けを迅速に行う。
代表フレームのイメージ
例:RTUでデバイス0x11のHolding Registersを10点読取る場合、要求は「11 03 00 6B 00 0A CRC」で表され、応答は「11 03 14 … CRC」の形式となる(数値は16進、実体はベンダ仕様のレジスタに依存)。
用途と適用分野
ModbusはPLC、HMI、インバータ、温調器、流量計、電力計、リモートI/Oなど、多様な機器で実装されている。既設の計装網に後付けでSCADA可視化を行うケース、他社機器混在のラインで最小コストの相互接続を実現するケースなどに適する。複雑な型システムや大容量データが必要な場合は、上位のプロトコル(OPC UA等)やファイル転送機構と併用する設計が望ましい。
設計チェックリスト
- 物理層:配線方式、終端・バイアス、接地、ケーブル仕様の適合
- リンク:ボーレート、パリティ、タイムアウト、リトライ、スキャン周期
- アプリ:レジスタ表、機能コード、スケーリング、例外応答処理
- 保全:ログ取得手段、障害時の切替、交換容易性、予備品
- セキュリティ:ネットワーク分離、最小権限、書込み制限、監査
コメント(β版)