1. デモ製品
実点科技Modbus TCPバスカプラXB6S-MT2002+シリアル通信ユニットXB6S-C01SP
2. アプリケーションシーン
フリーポートモードにより、RS232/RS422シリアルデバイスのデータをModbus TCPネットワークへ透過伝送
3. コンフィグレーション結果
シリアルデバイスの送受信データはModbus TCPレジスタに直接マッピングされ、上位機器から読み書きが可能です
産業現場では、次のようなニーズがよくあります。RS232またはRS422のシリアルデバイス(バーコードリーダー、センサ、計器など)をお持ちで、そのデータをModbus TCPネットワークに接続し、上位機器システムから直接読み書きしたいという場合です。実点科技のシリアル通信ユニットXB6S-C01SPは複数の通信モードを選択でき、シリアル ↔ Modbus TCPの透過伝送ブリッジを構築できます。
本記事では、Modbus TCPバスカプラXB6S-MT2002+シリアル通信ユニットXB6S-C01SPの組み合わせを例に、フリーポートモードのコンフィグレーションから検証までの全体の流れをご紹介します。

コンフィグレーションを開始する前に、ハードウェアの接続が正しいことを確認してください。
本例で使用するハードウェア:
● XB6S-MT2002(Webコンフィグレーション画面付き)
● XB6S-C01SP(バスカプラの下に接続)
● USB-RS232変換ケーブル(シリアルデバイスのシミュレーション用)
● パソコン1台(LANケーブルでバスカプラに接続)
配線方式:
パソコンはLANケーブルでバスカプラのネットワークポートに接続し、USB-RS232変換ケーブルはXB6S-C01SPのシリアル端子に接続します。
具体的な配線は下図のとおりです:

XB6S-MT2002はブラウザから直接パラメータ設定が可能で、追加のソフトウェアは不要です。
パソコンをLANケーブルでバスカプラに接続した後、ブラウザを開き、アドレスバーにバスカプラのデフォルトIPアドレス「192.168.1.120」を入力すると、Webコンフィグレーション画面に入ることができます。

注意:
パソコンのIPアドレスがバスカプラと同一ネットワークセグメント(192.168.1.x)にあることを確認してください。そうしないと、コンフィグレーションページにアクセスできません。
これは本記事の核心となる手順です。各パラメータをなぜこのように設定するのか、以下で一つずつ説明します。
1、ユニットパラメータページに入る
Webコンフィグレーション画面でXB6S-C01SPユニットをクリックし、該当ユニットのパラメータ設定ページに入ります。本例のパラメータは以下のとおりです。

重要:
通信エラー時動作を「保持」に設定します。この手順は必ず先に行ってください。
フリーポートモードでは、設定した読み出しバイト数と実際に受信したバイト数が一致しない場合、ユニットは通信異常を報告します。エラー時動作をデフォルトの「クリア」のままにしていると、異常発生時にデータが即座にクリアされてしまい、読み出す前にデータが失われてしまいます。「保持」に設定しておけば、異常が発生しても前回の有効なデータがレジスタに保持され、クリアされることはありません。
2、制御ノードコードのコンフィグレーション
ノード1 → パラメータ1で、制御ノードコードを0x21に設定します。
この値の意味は、制御ワード付きフリーポート入出力モードを選択することです。「制御ワード付き」とは、ユニットが自ら判断するのではなく、上位機器が制御ワードを通じてデータの送受信をトリガーできることを意味します。0x21はこのモードの固定コードなので、そのまま入力すれば構いません。

3、入出力バイト数の設定
ノード2 → パラメータ1で入力バイト数を設定し、ノード3 → パラメータ1で出力バイト数を設定します。入力・出力のバイト数は、実際のシリアルデバイスのデータ量に応じて決定します。本例では入力・出力ともに16バイトとします。

ここでの「入力」と「出力」は、バスカプラの視点から見たものです。
● 入力 = シリアルデバイスからバスカプラへ送られるデータ(上り、バスカプラが受信)
● 出力 = バスカプラからシリアルデバイスへ送られるデータ(下り、バスカプラが送信)
4、送信
パラメータ設定が完了したら、送信をクリックすると、バスカプラは新しい設定を保存して適用します。

設定が完了したら、Modbus TCPにおけるデータのアドレスを確認し、正しく読み書きする必要があります。
データアドレスの確認
バスカプラのWeb画面の構成情報ページで、XB6S-C01SPユニットのデータ開始アドレスを確認できます。

上り下りデータ構造
フリーポート入出力モードでは、データは上りと下りの2つの部分に分かれます。
上りデータ(シリアル → Modbus TCP):シリアルデバイスから送られてきたデータは、Modbus TCPの入力レジスタにマッピングされ、上位機器はこれらのレジスタを読み出すことでシリアルデータを取得します。データ構造は以下のとおりです。

下りデータ(Modbus TCP → シリアル):上位機器がModbus TCPのホールディングレジスタに書き込んだデータは、シリアルを通じてシリアルデバイスへ送信されます。データ構造は以下のとおりです。

Modbus Poll とシリアルポートツールを使用して、送受信の全体的なリンクをシミュレートし、設定が有効かどうかを確認します。
テストツール
● Modbus Pollソフトウェア:Modbus TCPマスタとして、バスカプラのレジスタを読み書きします
● シリアルポートデバッグツール:USB-RS232変換ケーブルを介して、シリアルデバイスの送受信データをシミュレートします
Modbus Poll 読み書き設定
Modbus Poll で読み出し接続と書き込み接続をそれぞれ確立し、バスカプラのIPアドレスと対応するレジスタアドレスを指定します。
読み出し設定

書き込み設定

トリガモード:レベルトリガ(高レベル)
本例では制御モードをレベルトリガ(高レベル)に設定しています。つまり、制御ワードをONにすると、ユニットはシリアル通信データの送受信を継続的に行います。用途によって都度トリガ(例えば1回ごとに1フレームだけ送信する場合)が必要な場合は、立ち上がりエッジトリガモードを選択できます。

結果の確認
シリアルポートツールでデータを送信すると、Modbus Poll の読み出しウィンドウで対応するレジスタ値が更新されます。逆に、Modbus Poll でデータを書き込むと、シリアルポートツールで対応する内容が受信されます。双方向の透過伝送が確認できました。
通信エラー時動作について:フリーポート入出力モードでは「保持」に設定することを強く推奨します。「クリア」に設定すると、シリアルポートのデータフレーム長が一定でない場合、ほぼ確実に異常が発生し、データ消失につながります。
バイト数設定について:入力・出力のバイト数は、実際のシリアルデバイスの1フレームあたりのデータ最大長以上に設定してください。少なく設定するとデータが切り捨てられます。多く設定しても機能には影響しませんが、レジスタ領域を余分に消費します。
トリガモードの選択について:
● レベルトリガ:制御ワードを1にすると継続的に送受信を行うため、リアルタイムの透過伝送が必要な場面(センサからの継続的な報告など)に適しています
● 立ち上がりエッジトリガ:制御ワードが0→1に変化するたびに1フレーム送信するため、必要なときにだけ送信する場面(デバイスへの指令送信など)に適しています
フリーポート入出力モード と Modbus RTU モードの比較:お使いのシリアルデバイスがModbus RTUプロトコルに対応している場合は、ユニットのModbus RTUゲートウェイモードを優先的に使用することを推奨します。設定がより簡単です。フリーポート入出力モードは、非標準プロトコルや独自プロトコルのシリアルデバイスに適しています。