実点科技XB6SシリーズシリアルコミュニケーションユニットXB6S-C01SPは、RS485/RS422/RS232の3種類の通信インタフェースに対応し、Modbus RTUマスタ/スレーブ、Modbus ASCIIマスタ/スレーブ、Freeportなど複数の通信モードに対応しています。一般的なModbusのコンフィグレーション方法と比較して、ノードパラメータのコンフィグレーション数が実際の使用数より少ない場合や、他社製品に置き換える際にプログラムを大幅に変更したくない場合は、プログラミングによってメッセージ通信を行う必要があります。以下では、フリーポートモードでプログラムによりModbusメッセージを編集する方法について説明します。

↑実点科技シリアルコミュニケーションユニットXB6S-C01SP
本質的にはどちらもシリアル通信であり、シリアルケーブル(485/422/232)をベースにメッセージ通信を行います。Modbusはメッセージのフォーマットに制限があり、フレーム構造は「アドレス+ファンクションコード+データ+チェック」で構成されますが、フリーポート自体には制限がなく、送信形式を統一して作成すればよく、メッセージのフォーマットに関する要求はありません。そのため、ある程度まではフリーポートによる編集を通じて、Modbusメッセージのフォーマットに合致してさえいれば、デバイスに対してModbus通信を行うことができます。
シリアルパラメータは接続と一致させればよく、通信モードはフリーポート要求モード(要求プロセス及び待機ディレイを含む)を選択し、制御及び状態モードをオンにして、エラー動作を保持に変更します。
マニュアルに従って、ユニットのフリーポートをコンフィグレーションできます:ノード1パラメータ1では要求モード制御ワード16#20(10#32)を設定、ノード2パラメータ1では入力コンフィグレーション16バイト-16#D04(10#3332)、ノード3パラメータ1では出力コンフィグレーション16バイト-16#E04(10#3589)、及び出力の末尾にCRC16チェック16#F02(3842)を追加します。この手順は、メッセージの占有領域を確保し、メッセージへのチェックを追加するためのものです。

パラメータの設定が完了したら、プロセスデータを入力できます。
メッセージ例:01 03 00 00 00 02 C4 0B
返信:01 03 04 AB CD 12 34 46 9F
ここでは、ユニットが03ファンクションコードでメッセージを編集し、01のスレーブアドレスから00 00以降の00 02個の保持型レジスタの内部データを読み出すことを想定しており、今回はModbus Slaveを使用してModbusスレーブ局のシミュレーションを行います。

下りデータ:

出力データ1:メッセージ制御イネーブル。
出力データ2:出力メッセージの合計バイト長(ここでの8は、入力したメッセージ及び自動的に追加されるCRCチェックを含みます)。
出力データ3、4:異常クリア動作(コンフィグレーションパラメータ内のエラー動作を保持に変更した場合、ここはデフォルトの0のままでよい)。
出力データ5:送信メッセージの最初のデータ。
上りデータ:

入力データ1:返信メッセージのステータスワード。
入力データ2:返信メッセージにエラーがあるかどうか。
入力データ3:受信メッセージ長(Modbus標準メッセージと比較して校正でき、正常かどうかを返します)。
入力データ4、5:受信異常カウント(データ長が完全に一致しない場合、このカウントアラームが発生します)。
入力データ6、7:受信データカウント(データが返されるたびにカウントが1加算され、新しいメッセージかどうかを確認できます)。
入力データ8:受信メッセージの最初のデータです。
データエリアを切り出すことで、ab、cd、12、34がレジスタ内の現在のデータであることが確認でき、フリーポート上でのModbus通信が完了したことになります。
注:具体的なパラメータ定義は図の通りです。

以上、シリアルコミュニケーションユニットXB6S-C01SPのフリーポートモードにおけるプログラム編集によるModbusメッセージの使用方法でした。ご覧いただきありがとうございました。