通信プロトコルModbus RTU(マスター)
テンプレート説明
TC-3000がModbus RTUマスターとして動作し、要求定義テーブルの各トランザクションをシリアル回線上のスレーブ機器へ順に送信して、応答(CRC・ファンクションコード・データ)を検証します。
-
1
要求(トランザクション)順次送信
要求定義テーブルの先頭エントリから順に、スレーブID・ファンクションコード・データ・CRCで構成した要求フレームをTC-3000のDIFユニットからスレーブ機器へ送信します。 -
2
応答受信・検証
スレーブからの応答フレームを受信し、CRC・スレーブID・ファンクションコードを検証します。読出し系は受信データを期待値配列と照合、書込み系は応答エコーの一致を確認します。タイムアウト・CRC不一致・例外応答はFAILとして記録します。 -
3
全トランザクションを繰り返し
①②を要求定義テーブルの全エントリ分繰り返し、最後にPASS/FAIL件数をログ出力して自動終了します。
・スロット1:DIFユニット(TC-IFDIF) ※1
RS-485(半二重2線)/19200bps/8bit/偶数パリティ/ストップ1bit
・RS-422/RS-485通信:DIFユニット(TC-IFDIF)を使用します。※2
・RS-232C(1対1)通信:COMユニット(TC-IFCOM)でも利用できます。※2
※1 ユニットを別スロットへ変更する場合、ユニット設定のスロット割り付け変更を行うことで、設定値などを引き継ぎ可能です。
※2 スロットにユニットを取り付け・配線し、スクリプトの SLOT / CH 設定を変更してください。
接続図
TC-3000(DIFユニット)のRS-485端子(A/B)とスレーブ機器のRS-485端子(A/B)を接続します。1本のバスに複数のスレーブをぶら下げるマルチドロップ接続にも対応します。
※ 必ずIGNDを接続してください。
※ RS-485バスの両端には終端抵抗が必要です。TC-3000側の終端抵抗はユニット設定で有効にできます。
設定変数
全設定変数を記載しています。実機の仕様に合わせて変更してください。
|
変数名 |
内容 |
初期値 |
||||||||||||||||||
|
|
使用するDIFユニットのスロット番号。使用するユニットに応じて変更。 |
|
||||||||||||||||||
|
|
DIFユニットのUARTチャンネル番号 |
|
||||||||||||||||||
|
|
要求を送信する対象スレーブのアドレス (ID)。1〜247 |
|
||||||||||||||||||
|
|
応答受信タイムアウト (ms) |
|
||||||||||||||||||
|
|
各トランザクション送信前の待機時間 (ms)。0で待機なし |
|
||||||||||||||||||
|
|
実行するトランザクション(要求)の定義テーブル。各エントリは
|
サンプル有 |
グローバル変数の設定
以下の変数はグローバル変数に定義され、全テストスクリプトから共通で参照されます。Modbus関数の既定動作を決めます。
|
変数名 |
内容 |
初期値 |
|
|
Modbus関数でタイムアウト引数を省略した場合に使用する既定のタイムアウト (ms)。本テンプレートでは各トランザクションで |
|
op一覧(対応ファンクションコード)
request_table の op に指定できる操作と、対応するModbusファンクションコード(FC)です。
|
op |
FC |
内容 |
|
0x01 |
コイル読出し |
|
0x02 |
離散入力(入力ステータス)読出し |
|
0x03 |
保持レジスタ読出し |
|
0x04 |
入力レジスタ読出し |
|
0x05 |
コイル1点書込み |
|
0x06 |
保持レジスタ1点書込み |
|
0x0F |
コイル複数書込み |
|
0x10 |
保持レジスタ複数書込み |
判定条件
各トランザクションの応答が以下の条件を満たす場合にPASSと判定します。いずれかを満たさない場合、およびタイムアウト・CRC不一致・例外応答を受信した場合はFAILとして記録します。
|
判定項目 |
合格条件 |
|
応答受信 |
タイムアウト時間内にスレーブから応答フレームを受信できること |
|
フレーム整合性 |
CRCが一致し、応答のスレーブIDおよびファンクションコードが要求と一致すること(例外応答でないこと) |
|
読出し系( |
受信データの点数が要求点数と一致し、全要素が |
|
書込み系( |
応答が要求のエコー(アドレス・値/数量)と一致し、正常完了すること |
※ 本テンプレートはテスト実行ボタンで開始し、全トランザクション完了後に自動終了します。
※ 共通のModbus関数(PDU組立・CRC・トランザクション処理)はグローバル関数(スクリプト)に定義されています。同ライブラリはModbus TCP(LANユニット)にも対応しています。
他のプロジェクトでModbusを扱う方法
本テンプレートは、Modbusプロトコルの処理をグローバル関数に実装しています。
・別のプロジェクトでModbusプロトコルを扱いたい場合は、このテンプレートのグローバル関数(スクリプト)の内容を、対象のプロジェクトのグローバル関数(スクリプト)にコピーすることで、同じModbus関数群(
ModbusRtu* / ModbusTcp* など)をそのまま利用できます。・Modbus関数は
MODBUS_TIMEOUT_MS などのグローバル変数を参照します。あわせて、これらのグローバル変数も対象プロジェクトのグローバル変数に設定してください(「グローバル変数の設定」の項を参照)。・同ライブラリはModbus RTU(RS-485/RS-422)とModbus TCP(LAN)の両方に対応しています。