産業オートメーションの分野において、Modbus は間違いなく外せない名前である。1970 年代末に誕生した通信プロトコルとして、長い歳月を経てもなお衰えることなく、無数の工場やデバイスの相互接続を静かに支え続けている。本記事では、産業通信の元老格とも言うべきプロトコルである Modbus について解説する。
Modbus の歴史と発展
1979 年、Modicon 社(現在のシュナイダーエレクトロの前身)は、プログラマブルロジックコントローラ(PLC)専用に設計された通信プロトコルを発表した。これが Modbus である。当時の産業現場では、デバイス間の通信は電圧や電流信号という原始的な段階にとどまっており、たとえばスイッチの状態を高低の電圧レベルで表したり、0-10V、4-20mA でアナログデータを伝送したりしていた。Modbus の登場は、いわばこれらのデバイスに翻訳機を取り付けたようなものであり、PLC と現場デバイスがより効率よく対話できるようにした。

Modbus プロトコル発展のタイムライン
Modbus はフィールドバス(Fieldbus)プロトコルの元祖である。フィールドバスとは何か。簡単に言えば、産業ネットワークにおける通信方式であり、複数のデバイスを 1 対のケーブルでコントローラに接続できるため、ポイントツーポイント配線の煩わしさを解消する。かつてはセンサーを 1 台追加するたびにケーブルを 1 本引き回す必要があり、配線コストと複雑さはクモの巣のようだった。フィールドバスはいわば WiFi のようなもので、デバイスをすべて 1 つのネットワークにつなげることで、時間も労力も節約できる。
Modbus のほかにも、産業分野には Profibus、DeviceNet、ControlNet など数多くのフィールドバスプロトコルが存在する。しかし Modbus は、シンプルで使いやすいこととオープンソース・無料であることを武器に、最も普及した産業プロトコルの一つとなり、今日でも世界中の工場で随所に見られる存在である。
Modbus の設計

Modbus のマスタースレーブ通信モデル
Modbus は、PLC と現場デバイスがスムーズにやり取りできることを目的に設計された。当初は RS-232 や RS-485 などのシリアル通信で動作しており、速度こそ遅いものの十分に安定していた。その後、ネットワーク技術の発展に伴い、Modbus は TCP/IP とイーサネットをサポートする Modbus TCP へと進化し、現代の産業ネットワークの要求に適応した。
Modbus の核心は マスタースレーブ通信モデル である。1 台のマスター(Master)が指示を出し、複数のスレーブ(Slave)がそれに忠実に応答する。マスターには PLC、SCADA システム、あるいは産業用コンピュータがなり、スレーブにはセンサー、インバータ(VFD)、その他のスマート計器がなり得る。マスターがデータ読み取りや制御コマンド送信などの要求を能動的に発行し、スレーブが要求に応じてデータを返すか操作を実行する。プロセス全体が明快である。

Modbus のデータタイプ
データ面では、Modbus は 2 つの基本フォーマットをサポートする:
- 離散量:単一ビットであり、0/1、真/偽のようなスイッチ状態を表す。
- レジスタ:16 ビットワードであり、通常は温度や圧力、その他表現が必要な複雑なデータなどの数値を格納する。
このシンプルなデータ構成により、Modbus は簡単なスイッチ制御にも複雑な数値伝送にも対応でき、適応力が極めて高い。
Modbus のデータ伝送
Modbus のデータ伝送には独自の流儀があり、これらの詳細を理解することはデバッグとトラブルシューティングに不可欠である。最も基本的なビット伝送を例にとると、Modbus は 下位ビットから上位ビットへ の順序(LSB to MSB)でビットを送信する。たとえば 11010010 というバイトがあると、実際の伝送時には単一ビットに分解され、0、1、0、0、1、0、1、1 の順に送られる。

ビット伝送順序 (LSB to MSB)
なぜそこまで気にする必要があるのか。受信側が同じルールでデコードしないと、データが壊れてしまうからである。これはシリアルポートのデバッグで、先にボーレート、パリティ、ストップビットを確認するのと同じであり、Modbus のビット順序も同様の基本的な取り決めである。
バイト伝送については、Modbus は実装方式(RTU、ASCII、TCP)に応じて異なる処理を行う。これについては後ほど詳しく説明する。
アドレスとファンクションコード
Modbus の通信は アドレス と ファンクションコード なしには成り立たない。この 2 つは、指揮系統における脳と命令セットのようなものである。
デバイスアドレス
各スレーブデバイスには一意のアドレスが割り当てられており、通常は 1 から 247 までの範囲である。マスターは要求を送信する際、宛先スレーブのアドレスをメッセージに含め、コマンドが正しいデバイスに届くことを保証する。これは宅配便で荷物を送るときに宛先住所を正確に書く必要があるのと同じで、書かなければ荷物は違う場所に届いてしまう。
レジスタアドレス

Modbus レジスタアドレスマッピング
Modbus では、データはタイプごとに異なるレジスタに格納される。主なものは以下の通りである:
- コイル(Coils):00001 から始まり、スイッチ量を格納する。読み書きともに可能である。
- 離散入力(Discrete Inputs):10001 から始まり、読み取り専用のスイッチ量を格納する。
- 入力レジスタ(Input Registers):30001 から始まり、読み取り専用の数値を格納する。
- 保持レジスタ(Holding Registers):40001 から始まり、読み書き可能な数値を格納する。
レジスタアドレスを指定することで、マスターは対象データを的確に読み書きできる。たとえば、ある温度センサーの値を読み取りたい場合は、30001 番の入力レジスタにアクセスすることになる。
ファンクションコード
ファンクションコードは、スレーブデバイスに対して何をすべきかを伝える。

よく使われるファンクションコード
マスターが送信するメッセージフレームにはデバイスアドレス、ファンクションコード、レジスタアドレスが含まれており、スレーブは受信後、ファンクションコードに応じた操作を実行する。これは組込み開発において、マイコンがホストコンピュータからのコマンドを受信し、コマンドワードを解析して対応する動作を実行するのと同じである。
Modbus の 3 つの実装


Modbus の 3 つの実装方式の比較
Modbus には RTU、ASCII、TCP という 3 つの主要な実装方式があり、それぞれに特徴と適用シーンがある。
Modbus RTU

Modbus RTU メッセージフレーム構造
RTU(Remote Terminal Unit)は Modbus の古典的実装であり、RS-232 や RS-485 などのシリアル通信に特に適している。とりわけ RS-485 はよく使われる。長距離伝送(1,000 m 超)とマルチポイント通信をサポートし、耐ノイズ性も高いため、工場内にデバイスが分散している場面に非常に適しているからである。
RTU はバイナリエンコーディングを用い、メッセージフレームはデバイスアドレス、ファンクションコード、データ、CRC チェックを含むコンパクトな構成である。効率が高く高速だが、タイミング要件が厳しく、デバッグ時にはボーレートとフレーム間隔に特に注意が必要である。
Modbus ASCII

Modbus ASCII メッセージフレーム構造
ASCII モードは、読み取り可能な ASCII 文字(0-9、A-F)でデータを表現し、各バイトを 2 つの文字に分割して送信する。たとえばバイナリデータ 0xAB は ASCII の 41 42 になる。メッセージフレームはコロン(:)で始まり、キャリッジリターンとラインフィードで終わるため、人間が目視でデバッグする必要がある場面に適している。
ただし ASCII モードはメッセージが長く伝送が遅く、効率は RTU に遠く及ばない。実際の産業現場ではあまり使われておらず、主に旧式デバイスや教育の場面で見られる。
Modbus TCP:イーサネットへの対応

Modbus TCP プロトコルスタック
TCP モードは Modbus のイーサネット版であり、TCP/IP プロトコルに基づき、標準的なイーサネットインフラストラクチャ上で動作する。シリアル通信に比べ、TCP は高速で距離の制約が少なく、企業ネットワークにも容易に接続できるため、モダンな SCADA システムや遠隔監視に特に適している。

Modbus TCP MBAP ヘッダー構造
TCP のメッセージフレームでは CRC チェックが省かれ(TCP プロトコル自体が信頼性を保証するため)、代わりにトランザクション識別子やプロトコル識別子などのフィールドを含む MBAP ヘッダー(Modbus Application Protocol Header)が追加されている。太陽光発電所におけるパワコン(インバーター)の監視など、多くの新エネルギープロジェクトでは、クラウドシステムとの連携が容易な Modbus TCP が好んで使われる。
Modbus が成功した理由
Modbus の成功は、そのシンプルさと開放性に負うところが大きい。プロトコルの設計は平明で学習コストが低く、エンジニアはドキュメントに軽く目を通すだけで実装に着手できる。オープンソースで無料という特性により、ベンダーはライセンス料を支払う必要がなく、コストを抑えられる。設備が古く予算も限られている中小工場の多くも、Modbus を活用すれば、シリアル−TCP 変換ゲートウェイを接続するだけで、旧式デバイスをモダンなネットワークに組み込むことができる。

RS-485 バストポロジ

Modbus TCP ネットワークトポロジ
もちろん Modbus にも弱点はある。たとえばデータスループットが低く、リアルタイム性では EtherCAT などのモダンなプロトコルに劣る。しかし、環境監視や簡単なデバイス制御など多くのシーンでは、その安定性と使いやすさで十分まかなえる。
産業通信の世界において、Modbus は最速ではないかもしれず、最先端でもないかもしれない。しかし、最も実用的で最も信頼できる、古くからの友であることに間違いない。