本文の概要
1.デモ製品
2.コンフィグレーションツール
IOConfigTool
3.通信モード
XB6S-C01SPをModbusRTUマスタ局に設定
4.デモスレーブ局
Modbus Slaveシリアルデバッグソフト(03/06ファンクションコード読み書き)
5.主要操作
シリアルポートパラメータを設定→ノードごとにModbusコマンドコードを設定→設定を送信→上り/下りアドレスによる読み書きと状態判定
6.重要な注意点
マスタ局とスレーブ局のシリアルポートパラメータは完全に一致させること。応答が遅いスレーブ機器では応答タイムアウトとポーリング遅延を適切に延長すること
XB6S-EI2002はsDot製EtherNet/IPプロトコル対応スライス型バスカプラ、XB6S-C01SPはシリアル通信モジュールです。両者を組み合わせて使用する場合、XB6S-EI2002はPLCとのEtherNet/IP通信を担当し、XB6S-C01SPはシリアル側のModbusRTUマスタ局機能を担当します。すなわち、IOConfigToolで設定を完了した後、XB6S-C01SPがマスタ局としてサードパーティ製のModbusRTUスレーブ機器を能動的に読み書きします。では、具体的にどのようにシリアルポートパラメータを設定し、ノードごとにModbusコマンドを設定し、上位機器の下りアドレスと上りアドレスを介して読み書き制御と通信状態判定を行うのでしょうか。
全体の設定は4つの段階に分かれます。スレーブ局の読み書き要件を明確化→上位機器でシリアルポートパラメータを設定→ノードごとにModbusコマンドコードを入力して送信→下りアドレスと上りアドレスによる読み書き操作と状態モニタ。本文ではModbusRTUプロトコル対応のシリアルデバッグソフトModbus Slaveをデモ用スレーブ局とし、03ファンクションコードによる2レジスタの読み出しと06ファンクションコードによる2レジスタの書き込みをそれぞれ行い、設定の全過程を完全にデモします。
一、デモスレーブ局の説明
本例ではModbusRTUプロトコル対応のシリアルデバッグソフトModbus Slaveをスレーブ局としてケース設定を行います。
· 03ファンクションコード:2レジスタ読み出し
· 10ファンクションコード:2レジスタ書き込み
上位ソフトでシリアルポートパラメータを設定
1. 通信モードをModbusRTUマスタ局に設定
上位ソフトでモジュールをスキャンした後、「設定」→「デバッグ」をクリックしてデバッグモードに入り、次にXB6S-C01SPモジュールを選択し、「パラメータ設定」→「通信モード」をクリックして、通信モードを「ModbusRTUマスタ局」に設定します。


2. シリアルポートパラメータの一致
ボーレート、ストップビット、データフォーマット、パリティ方式はスレーブ局のシリアルポートパラメータに合わせて入力し、マスタ局とスレーブ局の設定が完全に一致するようにしてください。

3. 制御ワードパラメータ設定
制御ワードをイネーブルする場合、制御モードは「レベルトリガ」を選択することを推奨します。同時に応答タイムアウトを200ms、ポーリング遅延を100msに設定すると、通信の安定性が向上します。

ヒント:デフォルトパラメータではポーリング速度が速いため、応答が遅いスレーブ機器では応答が間に合わずエラーが発生する場合があります。応答タイムアウトとポーリング遅延を適切に延長すると、通信の安定性を効果的に向上できます。
4. フレーム間隔
フレーム間隔パラメータは通常、デフォルトの1.5Tのままで問題ありません。シリアルポートデバッグツールとモジュール間の通信は正常、シリアルポートデバッグツールとスレーブ機器間の通信も正常であるにもかかわらず、モジュールとスレーブ機器間で通信できない場合は、フレーム間隔値を段階的に大きくしてテストすることを試みてください。
ノードパラメータ設定
通信モードがModbusRTUマスタ局で、かつ制御ワードがイネーブルになっていることを前提に、以下の規則に従ってノードごとにパラメータを入力します。設定完了後、「送信」をクリックしてパラメータをバスカプラへ送信します。本例では2つのコマンド(03/06の2種類のファンクションコード)を設定し、ノード1~3を使用します。
ノード | パラメータ | 入力値 | 対応コマンド説明 |
ノード1 | パラメータ1 | 2(本例では2ノードを使用) | — |
ノード1 | パラメータ2 | 0(デフォルト) | — |
ノード2 | パラメータ1 | 770(0x00000302) | ファンクションコード03 2レジスタ読み出し、開始アドレス0x0 |
ノード2 | パラメータ2 | 1(スレーブ局番) | — |
ノード3 | パラメータ1 | 525826(0x00080602) | 10ファンクションコード 2個のレジスタを書き込み、開始アドレス0x8 |
ノード3 | パラメータ2 | 1(スレーブ局番) | — |

ヒント:ノード1のパラメータ1には、今回実際に使用するノード数(本例ではノード2~3の合計2ノード)を入力します。ノード2以降は各ノードが1つのModbusコマンドに対応し、パラメータ1は16進数形式です。
アドレスの読み書きと通信状態の判断
1. 読み書き操作
03ファンクションコードでスレーブアドレス01の0000から2つの保持レジスタデータを読み出す例として、Modbus Slaveでスレーブ局をシミュレーションした場合の設定結果は以下のとおりです:

コンフィグレーション完了後、上位機器の下りアドレスで制御指令を送信し、上りアドレスで状態を読み出します。本例のアドレスはすべて0から開始します:
上りデータ(32バイト) | |||
バイト番号 | 機能 | 意味 | アドレス範囲 |
1 | ステータスワード | Bit0:アイドル状態 | 1バイト |
Bit1:busy状態、すなわちデータ転送中 | |||
Bit2:完了状態、すなわちデータ転送完了 | |||
2 | アラームコード | アラームコードを参照 | 1バイト |
3 | 入力データ | シリアル通信モジュール入力データ | 後方30バイト |
4 | 入力データ | ||
… | … | ||
32 | 入力データ | ||
下りデータ(32バイト) | |||
バイト番号 | 機能 | 意味 | アドレス範囲 |
1 | 制御ワード | コンフィグレーションパラメータControl ModeがLevelのとき、1で送信データ | 1バイト |
コンフィグレーションパラメータControl ModeがRising Edgeのとき、0->1で送信データ | |||
2 | 出力データ | シリアル通信モジュール出力データ | 後方31バイト |
3 | 出力データ | ||
… | … | ||
32 | 出力データ | ||
注:上記表のプロセスデータは、LevelまたはRising Edgeモードで1ノードを設定した場合のものです。2ノードを設定した場合、上りデータのバイト番号1および2はノード1のステータスビットとアラームコード、バイト番号3および4はノード2のステータスビットとアラームコードとなり、残りのバイトがデータビットです。下りデータのバイト番号1はノード1の制御ビット、バイト番号2はノード2の制御ビットとなり、残りのバイトがデータビットです。最大15ノードまで設定できます。
下りデータでノード2とノード3のイネーブルをそれぞれ開き、ノード3に送信が必要なデータを書き込んだ後、送信をクリックします:

上位機器の上りデータで、該当する設定ノードのステータスワードとアラームコードを確認できます。同時にModbus Slaveの0000アドレスから2つのレジスタの値を読み出し、0008アドレスに2つのレジスタの値を書き込みました:


2. 通信状態の判定
正常通信時はステータスワードが継続的に変化し(通常は2と5が切り替わって見えます)、アラームコードは常に0です。通信異常の場合は、アラームコードを確認して問題を特定できます。
エラーコード | コメント |
0x00 | エラーなし |
0x01 | スレーブ機器アドレスエラー |
0x02 | ファンクションコードエラー |
0x03 | CRCチェックエラー |
0x04 | 応答バイト数エラー |
0x05 | コイルレジスタデータエラー |
0x06 | ホールディングレジスタデータエラー |
0x07 | 不正データアドレス |
0x08 | スレーブ機器エラー |
0x09 | LRCチェックエラー |
0x0C | データ長エラー |
0x0D | データ変換エラー |
0x0E | ASCIIフレームエラー |
0x0F | 応答タイムアウト |