HIL SCADAベースのクライアントを備えたModbusデバイス
Modbusクライアントによるバッテリーインバータのリモート制御のデモンストレーション
導入
Modbusは、 Modicon社が自社のプログラマブルロジックコントローラ(PLC)向けに公開したシリアル通信プロトコルです。産業界で最も広く使用されている通信プロトコルの一つであり、現在では産業用電子機器を接続する最も一般的な方法となっています。このプロトコルは、データ転送のための機能コードとエンコード方式を、シングルポイント(1ビット)または16ビットデータレジスタとして定義します。この基本データパケットは、Modbus ASCII、 RTU 、またはTCPのプロトコル仕様に従ってカプセル化されます。Typhoon HILツールチェーンは、Modbus TCPプロトコルをサポートしています。
Modbus プロトコルは、すべての Typhoon HIL デバイスでサポートされています。このプロトコルをHIL 402 デバイスで使用するには、デバイスの背面プレートにあるEthernet コネクタのみに接続する必要があります。その他のデバイスでは、下部の Ethernet ポート (ラベル 1) を使用できます。このポートは通常、タイム クリティカルでないプロトコルに使用されます。Modbus プロトコルはマスター/スレーブ プロトコルとして定義されており、マスターとして割り当てられたノードのみがコマンドを開始できます。他のすべてのデバイスはスレーブであり、要求またはコマンドを待機する必要があります。これは、Ethernet ベースのネットワークのコンテキストではクライアントとサーバーとしてよく知られているため、Typhoon HIL ツールチェーンではこれらの用語が使用されます。このコンテキストでは、スレーブがサーバーになり、マスターがクライアントになります。
Typhoon HILツールチェーンには、クライアントとサーバーの両方が実装されています。HILデバイスはModbusサーバーとModbusクライアントの両方として動作でき、クライアント側はPC上で動作するHIL SCADAにセットアップすることもできます。サーバーはModbusデバイスコンポーネントで実装されており、外部Modbusクライアントからアクセスできます。また、専用のSunSpec Modbusデバイスコンポーネントを介して、標準化されたSunSpec Modbusプロトコルに接続することも可能です。
Modbusクライアントのシミュレーションには、専用のModbus APIを使用できます。これはPythonベースのAPIで、PC上で実行できます(HILデバイスがなくても実行できます)。HIL SCADA、スタンドアロンHIL SCADA 、あるいはスタンドアロンスクリプト内でも使用できます。
モデルの説明
このモデルは、電気部分と通信部分の2つの主要部分で構成されています。電気部分は、 Microgrid Toolboxの標準的な系統接続型バッテリーインバータをモデル化し、系統形成モードと系統追従モードを切り替える機能を備えています。形成モードでは、バッテリーインバータは定インピーダンス負荷に電力を供給します。

通信部分はModbusサブシステム内にあり、バッテリーインバータに直接接続されています。これはModbusデバイスコンポーネントによって処理されます。SCADA制御モードとModbus制御モードを切り替えることができます。Modbus SCADA入力の値を変更することで、どの制御入力が信号スイッチを通過してインバータに送られるかを制御できます。

ModbusデバイスはPython辞書(config_Batt)を使用して設定されます。この辞書はモデル初期化スクリプト内で定義されます。
#Modbus server configuration config_Batt = { 'port': 502, 'ip_addr': '192.168.0.219', 'netmask': '255.255.255.0', 'slave_id': 2, 'coil_input_addresses': '', 'coil_output_addresses': '', 'discrete_input_addresses': '', 'holding_register_input_addresses': '', 'holding_register_output_addresses': '2000, 2001, [2002,2003]f , [2004,2005]f, [2006,2007]f, [2008,2009]f', 'holding_register_output_init': [0, 1, 60.0, 480.0, 0.0, 0.0], 'input_register_adresses': '0, [1,2]f, [3,4]f, [5,6]f, [7,8]f, [9,10]f, [11,12]f' }
ディクショナリの最初のキーは、ネットワーク関連のパラメータ(ポート、IPアドレス、ネットマスク、スレーブID)を定義します。モデルをコンパイルする前に、ModbusデバイスがPCと同じサブネットに属していることを確認してください。PCの現在のIPアドレスを確認し、それに応じて「ip_addr」フィールドの値を変更してください。あるいは、PCのIPアドレスを静的に定義(Modbusデバイスと同じIP範囲からIPアドレスを選択)することもできます。
構成辞書の残りのキーは、Modbusレジスタを定義するために使用されます。このモデルにはコイルやディスクリート入力がないため、これらのフィールドは空のままです。保持レジスタについては、辞書は6つの出力レジスタ(整数2つと浮動小数点4つ)を定義します。次のキーでは、保持レジスタの初期値を定義できます。これらの値は、Modbusクライアントがサーバーに書き込みコマンドを送信するとすぐに上書きされます。最後のキーでは、7つの入力レジスタ(整数1つと浮動小数点6つ)を定義します。これらのレジスタは、シミュレーションからModbusクライアントに測定値を送信したり、Modbusクライアントからシミュレーションにコマンドを受信したりするためのインターフェースです。
表 1 には、すべての入力レジスタと出力レジスタを含む Modbus 仕様全体が記載されています。
入力レジスタ - モデルからの読み取り値 | |||||||||||
パラメータ | レジスター | タイプ | |||||||||
インバータオン | 0 | 符号なし整数 | |||||||||
端子電圧測定 | 1,2 | フロート | |||||||||
有効電力測定 | 3,4 | フロート | |||||||||
無効電力測定 | 5,6 | フロート | |||||||||
皮相電力測定 | 7,8 | フロート | |||||||||
力率測定 | 9,10 | フロート | |||||||||
周波数測定 | 11,12 | フロート | |||||||||
出力レジスタ - モデルへのコマンド | |||||||||||
パラメータ | レジスター | タイプ | デフォルト値 | ||||||||
インバータオン | 2000 | 符号なし整数 | 0 | ||||||||
動作モード | 2001 | 符号なし整数 | 1 | ||||||||
周波数設定点 | 2002,2003 | フロート | 60.0 | ||||||||
電圧設定点 | 2004,2005 | フロート | 480.0 | ||||||||
有効電力設定点 | 2006,2007 | フロート | 0.0 | ||||||||
無効電力設定点 | 2008,2009 | フロート | 0.0 |
シミュレーション
このモデルには、あらかじめ構築されたSCADAパネルが付属しています。シミュレーション実行時の監視や操作に必要な主要なユーザーインターフェース要素(ウィジェット)が用意されており、ニーズに合わせてさらにカスタマイズできます。
パネル ファイルは、SCADA コマンド パネル、SCADA Modbus クライアント、スイッチ コントロール モードの 3 つのウィジェット グループで構成されます。

パネル初期化ダイアログ(図4の赤い四角で囲まれた部分)には、Modbusクライアントの初期化方法を定義するPythonコードがあります。これは以下のコードに示されています。基本的なPython APIパッケージをインポートした後、基本的なネットワークサーバーパラメータが定義されます。次に、これらのネットワークパラメータを使用してModbusクライアントオブジェクト(battery_client)が初期化されます。残りのコードでは、入力レジスタと出力レジスタを定義します。入力レジスタはbattery_input_register_address文字列で指定され、出力レジスタはbattery_output_register_address辞書で定義されます。
# Modbusクライアント設定import typhoon.api.modbus as modbus from typhoon.api.modbus.exceptions import ModbusError, ModbusNotConnected, ModbusInvalidRegSpec import typhoon.api.modbus.util as mb_util BATTERY_SERVER_ADDRESS = '192.168.0.219' PORT = 502 # バッテリーbattery_client = modbus.TCPModbusClient(host=BATTERY_SERVER_ADDRESS, port=PORT, auto_open=True) # サーバーの入力battery_input_register_address = '0, [1,2]f, [3,4]f, [5,6]f, [7,8]f, [9,10]f, [11,12]f' # サーバーの出力battery_output_register_address = [ "2000" , "2001" , "[2002,2003]f" 、 "[2004,2005]f" 、 "[2006,2007]f" 、 "[2008,2009]f" ]
SCADAコマンドパネルグループのウィジェットは、HIL API(USBまたはEthernet接続経由)を使用してHILシミュレーションに直接アクセスします。このグループから、他のマイクログリッドの例と同様にバッテリーインバータを制御できます(Modbusチェックボックスがオフになっている場合)。
SCADA Modbusクライアントグループ内のウィジェットは、Modbus通信に使用されます。デフォルトでは「Modbusで制御」チェックボックスはオフになっており、バッテリーインバータはSCADAコマンドパネルによって直接制御されます。チェックボックスをオンにすると、インバータの制御モードがModbusに切り替わります。SCADA Modbusクライアントグループには、Modbusサーバーにコマンドを送信するためのウィジェットが6つあります。これらのコマンドは、Modbus APIのwrite_registers_adv()関数を使用します。残りの7つのウィジェットは、Modbusサーバーからの読み取り値を表示します。これらのウィジェットは、別の関数read_input_registers_adv()を使用します。
HILデバイスへの接続には、USB接続とEthernet接続の2つの方法があります(図5 )。最初の方法(1)では、USBを使用して、PC(SCADA)とHIL上のシミュレーションとの間で直接通信を行います。シミュレーションを開始および停止するためのコマンドは、この接続を介して送信されます。また、この通信は、SCADAコマンドパネル内のコントロールによって使用されます。このセットアップでのModbus TCP通信は、 SCADA Modbusクライアントグループ内のウィジェットによって使用されるEthernet 1ポートを通過します。2番目の方法(2)では、両方の通信にEthernet接続を使用します。このガイドでは、HILデバイスとの直接Ethernet通信について詳しく説明します。

テスト自動化
この例のテスト自動化はまだありません。ご協力いただける場合はお知らせください。アプリケーションノートへの署名を喜んで承ります。
要件の例
表2は、モデルをリアルタイムで実行するためのファイルの場所とハードウェア要件に関する詳細情報と、この最小限のハードウェア構成でモデルを実行した場合のHILデバイスのリソース使用率を示しています。この情報は、モデルの実行とカスタマイズを必要に応じて行う際に役立ちます。
ファイル | |
---|---|
Typhoon HILファイル | examples\models\communication protocols\modbus\client and server\ バッテリーサーバー.tse SCADAクライアント.cus |
最小ハードウェア要件 | |
HILデバイス数 | 1 |
HILデバイスモデル | HIL402 |
デバイス構成 | 1 |
HILデバイスのリソース利用 | |
処理コア数 | 2 |
最大マトリックスメモリ使用率 | 78% |
最大時間枠利用率 | 74% |
シミュレーションステップ、電気 | 1マイクロ秒 |
実行率、信号処理 | 200マイクロ秒 |
著者
[1] ドゥシャン・コスティッチ