日本語 English

Modbus 例外コード(Exception Code)一覧と対処方法

Modbus TCP・Modbus RTUで返ってくる例外コード(Exception Code)の意味と、よくある原因・対処をまとめました。
応答のファンクションコードが 83 や 90 になって返ってきたときに確認してください。

例外応答の見方

相手の機器が要求を処理できないときは、例外応答が返ります。例外応答では、ファンクションコードに 80h を足した値(03 → 83、10 → 90)が返り、その後ろの1バイトが例外コードです。

// 保持レジスタの読出し(03)の例外応答(Modbus TCP) 00 01 00 00 00 03 01 83 02 // MBAPヘッダ(7バイト) 83 = 03+80h、02 = Illegal Data Address

例外コード一覧

Modbusの例外コード一覧
例外コード名前意味よくある原因と対処
01Illegal Function不正なファンクションコード相手の機器が対応していないファンクションコード。保持レジスタ(03)と入力レジスタ(04)の取り違えも多い原因です
02Illegal Data Address不正なデータアドレスアドレス、またはアドレス+個数が相手の範囲外。アドレスの1ずれ(40001番地=アドレス0)が最も多い原因です
03Illegal Data Value不正なデータ値個数が上限を超えている、値が許されない範囲。読出しの個数の上限(下表)を確認します
04Server Device Failureサーバー機器の異常要求の処理中に、相手の機器で回復できない異常が起きた
05Acknowledge受付済み(処理に時間がかかる)要求は受け付けたが、処理に時間がかかっている。後で完了を確認します
06Server Device Busyサーバー機器がビジー相手が別の処理中。時間をおいて再送します
08Memory Parity Errorメモリのパリティエラーファイルレコードの読出し(20・21)で、相手のメモリにパリティエラーがあった
0AGateway Path Unavailableゲートウェイの経路がないゲートウェイの設定誤りや過負荷で、転送先への経路を確保できない
0BGateway Target Device Failed to Respondゲートウェイの先の機器が応答しないゲートウェイの先(RTU側)の機器が応答しない。ユニットIDや、RS-485側の配線・設定を確認します

アドレスの1ずれに注意

機器のマニュアルで「40001」「30001」のように書かれている番地は、Modbusの電文ではアドレス 0 になります(40001 = 保持レジスタのアドレス0)。
マニュアルの番地をそのまま送ると1つずれて、範囲の最後で 02(Illegal Data Address)になったり、違うレジスタを読んだりします。

個数の上限

1回で読み書きできる個数の上限(Modbus仕様)
ファンクションコード内容上限
01 / 02コイル・入力ステータスの読出し2000点
03 / 04保持レジスタ・入力レジスタの読出し125ワード
0F(15)複数コイルの書込み1968点
10(16)複数レジスタの書込み123ワード

機器によっては、これより少ない個数しか扱えないものもあります。上限を超えると 03(Illegal Data Value)が返ります。

ModbusTcpMes2026アイコン

ModbusTcpMes2026で応答の意味をすぐ確認

Modbus TCPの通信試験ツールです。Free版でModbusコマンドの送信と応答の確認ができます。

  • Pro版は例外コードの意味とレジスタの値を自動で表示
  • Pro版のサーバー機能で、PCを仮想メモリを持つModbus TCPサーバーにして試験
  • コマンドリストの連続実行とOK/NG判定(Pro版)
ModbusTcpMes2026の詳細・ダウンロード OSD Tools(PLC通信試験ツールセット)

応答が返ってこないとき

例外応答も返らずにタイムアウトになるときは、要求が相手に届いていないか、相手が処理できない電文になっています。

  • ポート番号(通常は502)と、IPアドレスが合っているか
  • ユニットID。ゲートウェイの先の機器では、RTU側のスレーブアドレスに合わせます。直接つなぐ機器では1や255(FFh)を指定するものが多いです
  • MBAPヘッダの長さ(Length)が、ユニットID以降のバイト数と合っているか
  • 相手の機器の同時接続数の上限を超えていないか(前の接続を閉じずに接続し直していないか)

よくある質問

Modbusの応答のファンクションコードが83になるのはなぜですか?

例外応答です。要求のファンクションコード(03)に80hを足した83が返り、その後ろの1バイトが例外コードです。例外コードで原因が分かります。

例外コード02(Illegal Data Address)の対処方法は?

アドレス、またはアドレス+個数が相手の範囲を超えています。最も多い原因はアドレスの1ずれで、マニュアルの40001番地は電文ではアドレス0になります。

Modbusで1回に読める保持レジスタの数は?

Modbusの仕様では、保持レジスタ・入力レジスタの読出しは1回125ワードまでです。機器によってはこれより少ないこともあります。

※例外コードの意味は、Modbus Organizationの「MODBUS Application Protocol Specification」に基づいています。実際に返る例外コードは機器によって異なる場合があります。

この記事へのコメント