IEC 61850 GOOSEプロトコル

Typhoon HIL ツールチェーンにおける IEC 61850 GOOSE プロトコルの実装について説明します。

リアルタイムのみ:このドキュメントは、リアルタイム シミュレーションにのみ有効です。

IEC 61850 GOOSEプロトコル

IEC 61850(変電所における通信ネットワーク及びシステム)規格は、GOOSEプロトコル( Generic Object Oriented Substation Event )をパブリッシャー/サブスクライバー型通信として定義しています。このプロトコルは、変電所内のIED(インテリジェント電子機器)間のイーサネット経由の情報交換に使用されます。

IEC 61850は、変電所および変電所の構成要素を記述するための特別なXMLベースの言語であるSCL(変電所構成言語)を定義しています。この言語を使用して様々なレベルの変電所を記述できるため、以下のような異なるファイルが存在する可能性があります。

  • ICD( IED機能記述) - IEDの完全な機能を定義します
  • SSD(システム仕様記述) - 変電所の単線結線図とその機能(論理ノード)を含む、変電所自動化システムの完全な仕様が含まれています。
  • SCD(変電所構成記述) – 変電所の完全な詳細を記述します。変電所、通信、IED、およびデータタイプテンプレートのセクションが含まれます。
1変電所内のGOOSE通信

GOOSEプロトコルはイベントベースのプロトコルです。GOOSE通信のコンセプトは、パブリッシャーが定期的にメッセージを送信し、イベント(例:トリップ、コンタクタの閉鎖など)が発生すると、新しいデータを含むメッセージをバースト送信することです。このプロトコルはパブリッシャー/サブスクライバーベースであるため、送信されたメッセージがサブスクライバーに正しく受信されたかどうかの確認は行われません。そのため、メッセージのバーストによってメッセージ損失の可能性が最小限に抑えられます。

すべてのメッセージはトピックに公開されます。サブスクライバーはシステムからのすべてのメッセージを受信しますが、サブスクライブしたトピック内で送信されたメッセージのみをフィルタリングして解析します。

GOOSE プロトコルはパブリッシャー/サブスクライバー ベースであるため、通信はローカル ネットワーク (LAN) 内でのみ可能です。

Typhoon HIL ツールチェーンでは、GOOSE プロトコルは次のデバイスでサポートされています: HIL402、HIL101、HIL404、HIL602+、HIL604、HIL506、および HIL606

GOOSE出版社

コンポーネントが無視されます:このコンポーネントはTyphoonSimでは無視されます。TyphoonSimシミュレーション中、このコンポーネントへの入力は破棄され、コンポーネントからの出力はゼロになります。

GOOSE Publisherコンポーネントのダイアログウィンドウを表1に示します。

1. GOOSE発行者
成分 コンポーネントダイアログウィンドウ コンポーネントパラメータ

GOOSE出版社

  • イーサネットポート
  • 設定ファイルへのパス
  • GOOSE制御ブロック
  • 実行率

GOOSE Publisherコンポーネントは、Publisherデバイスを記述したファイルをインポートすることで設定します。ファイルが適切にフォーマットされている場合、GOOSE Publisherデータが処理され、抽出されたすべてのIED(定義済み)と各IEDのすべてのGOOSE制御ブロックが、 IEDおよびGOOSE制御ブロックプロパティに表示されます。図2に示すように、コンボボックスを使用して、送信するGOOSEメッセージ構造を選択します。

注:構成ファイルで MinTime および MaxTime パラメータが指定されていない場合は、それぞれ 5 ミリ秒と 2000 ミリ秒のデフォルト値に設定されます。

Ethernetポートプロパティは、GOOSE PublisherアプリケーションがHILデバイス背面のどのEthernetポートを使用するかを定義します。第4世代デバイス(HIL101、HIL404、HIL506、HIL606)では、利用可能なポートであればどれでも通信に使用できますが、それ以前のデバイスではポート1経由の通信のみがサポートされます。

注意:回路図モデル内のすべての GOOSE Publisher コンポーネントは、HIL デバイスごとに同じイーサネット ポートを使用する必要があります。
2 GOOSE制御ブロックの選択

GOOSE Publisher信号処理ブロックには、スカラーまたはベクトルの入力端子が1つだけあります。この入力端子の信号サイズは、設定ファイル、具体的にはGOOSEデータセット情報(図3 )によって定義されます。GOOSEデータセットは、GOOSEメッセージで送信されるデータパラメータを指定します。

入力端子の信号サイズがベクトルの場合、信号はBus Joinコンポーネントを介してGOOSE Publisherブロックに入力する必要があります。Bus Joinは信号をベクトルに連結します。データがベクトルに連結される順序は、GOOSEデータセット情報に表示される順序と同じである必要があります。この情報は、設定が正常に読み込まれた後、コンポーネントプロパティウィンドウの「データプレビュー」ボタンをクリックすると表示されます。これは図3に示されています。

3 GOOSE Publisherの入力信号

モデル内に複数の GOOSE Publisher ブロックが存在する可能性があり、GOOSE コントロール ブロックが異なる構成ファイルを通じて定義できることを強調することが重要です。

GOOSE 通信を正常に確立するには、GOOSE メッセージを介して通信するすべてのデバイスが同じネットワークに接続されている必要があります。

GOOSE購読者

コンポーネントが無視されます:このコンポーネントはTyphoonSimでは無視されます。TyphoonSimシミュレーション中、このコンポーネントへの入力は破棄され、コンポーネントからの出力はゼロになります。

GOOSE Subscriber コンポーネントのダイアログ ウィンドウを表 2に示します。

2 GOOSE加入者
成分 コンポーネントダイアログウィンドウ コンポーネントパラメータ

GOOSE購読者

  • イーサネットポート
  • 設定ファイルへのパス
  • 即席爆発装置
  • データセット名
  • 実行率

GOOSE サブスクライバコンポーネントは、サブスクライバデバイスを記述するファイルをインポートすることで設定されます。ファイルが適切にフォーマットされている場合、GOOSE サブスクライバデータが処理され、抽出されたすべての定義済み IED と各 IED のすべてのデータセットが「IEDデータセット名」プロパティに表示されます。図 4に示すように、コンボボックスを使用して受信するデータセットを選択します。

注:構成ファイルで MinTime および MaxTime パラメータが指定されていない場合は、それぞれ 5 ミリ秒と 2000 ミリ秒のデフォルト値に設定されます。

Ethernetポートプロパティは、GOOSE SubscriberアプリケーションがHILデバイス背面のどのEthernetポートを使用するかを定義します。第4世代デバイス(HIL101、HIL404、HIL506、HIL606)では、利用可能なポートであればどれでも通信に使用できますが、それ以前のデバイスではポート1経由の通信のみがサポートされます。

注意:回路図モデル内のすべての GOOSE Subscriber コンポーネントは、HIL デバイスごとに同じイーサネット ポートを使用する必要があります。
4 GOOSEデータセットの選択

GOOSE Subscriber 信号処理ブロックには、スカラーまたはベクトルのいずれかの出力端子が1つだけあります。この入力端子の信号サイズは、設定ファイル、具体的には選択された GOOSE データセット情報によって定義されます。GOOSE データセットは、GOOSE メッセージを介して受信されるデータパラメータを指定します。

入力信号がベクトルの場合、Bus Splitコンポーネントを使用してスカラーに分割する必要があります。Bus Splitの出力におけるデータの並び順は、GOOSEデータセット情報に現れる順序と同じです。これは図5に示されています。

5 GOOSE加入者出力データ

モデル内に複数の GOOSE Subscriber ブロックが存在する可能性があり、GOOSE データ セットが異なる構成ファイルを通じて定義できることを強調することが重要です。

GOOSE 通信を正常に確立するには、GOOSE メッセージを介して通信するすべてのデバイスが同じネットワークに接続されている必要があります。

時間同期

時刻同期が必要な場合は、 「時刻同期」をご覧ください。

Schematic API を使用して GOOSE プロトコルの値を変更する

コンポーネントダイアログは、GOOSEプロトコルの入出力を簡単に選択できるように設計されています。これらの値は、標準のSchematic API関数を使用して変更することも可能です。これを説明するために、以下にコード例を示します。このコードは、MODEL_NAME「goose_example.tse」とユーザー定義のGOOSE_SETTING_FILE「goose1.scd」を持つ架空のユーザー作成モデルをSchematic APIを使用して自動的に編集およびコンパイルする方法を示しています。

使用例:
  typhoon.api.schematic_editorからモデルをインポートします # モデルのロード MODEL_NAME = "goose_example.tse" model.load(MODEL_PATH) # 設定ファイル GOOSE_SETTING_FILE = "goose1.scd" config_data = [("AA1J1Q01A1", "LD0/LLN0.gcbCB1pos", 2, "LD0/LLN0.CB1pos")] config_tuple = config_data[0] # ("IED", "GOOSE制御ブロック", データセットディメンション, "データセット名") ied = config_tuple[0] gooseCB = config_tuple[1] data_set_dimension = config_tuple[2] data_set = config_tuple[3] # コンポーネントの位置変数 x = 200 y = 200 # 実行速度 Ts = 200e-6 publisher = model.create_component(type_name="core/GOOSE Publisher", name=("GOOSE Publisher"), position=(x + 100, y)) model.set_component_property(component=("GOOSE Publisher"), property="configuration", value=GOOSE_SETTING_FILE) model.set_component_property(component=("GOOSE Publisher"), property="ied", value=ied) model.set_component_property(component=("GOOSE Publisher"), property="gooseCB", value=gooseCB) # コンパイルを成功させるためにScada入力を自動的に作成して接続します # コードの編集は不要です - 構成ファイルとコンポーネントの位置変数によって定義されます bus_join_i = model.create_component(type_name="core/Bus Join", name = ("Bus Join"), position = (x, y)) model.set_component_property(component = ("Bus Join"), property = "inputs", value = data_set_dimension) model.create_connection(start = model.term(comp_handle=bus_join_i, term_name="out"), end=model.term(comp_handle=publisher, term_name="data")) j が range(data_set_dimension) 内にある場合: input_i = model.create_component(type_name="core/SCADA Input", name=("Input" + str(j)), position=(x - 100, y + j*56)) model.set_component_property(component = ("Input" + str(j)), property = "execution_rate", value = Ts) j != 0 の場合: model.create_connection(start=model.term(comp_handle=input_i, term_name="out"), end=model.term(comp_handle=bus_join_i, term_name=("in" + str (j)))) そうでない場合: model.create_connection(start=model.term(comp_handle=input_i, term_name="out"), end=model.term(comp_handle=bus_join_i, term_name="in")) # サブスクライバーコンポーネントを自動的に作成してセットアップします # コードの編集は不要です - 構成ファイルとコンポーネントの位置変数によって定義されます subscriber = model.create_component(type_name="core/GOOSE Subscriber", name=("GOOSE Subscriber" ), position=(x + 400, y * 300)) model.set_component_property(component=("GOOSE Subscriber"), property="configuration", value=GOOSE_SETTING_FILE) model.set_component_property(component=("GOOSE Subscriber"), property="ied", value=ied) model.set_component_property(component=("GOOSE Subscriber"), property="data_set", value=data_set) model.set_component_property(component=("GOOSE Subscriber"), property="execution_rate", value=Ts) #正常にコンパイルするための出力プローブを自動的に作成します #コード編集は不要です - 構成ファイルとコンポーネントの位置変数によって定義されます probe_i = model.create_component(type_name="core/Probe", name = ("Probe"), position = (x + 500 , y * 300)) model.create_connection(start=model.term(comp_handle=probe_i, term_name="in"), end=model.term(comp_handle=subscriber, term_name="data")) #モデルをコンパイルします model.compile()

仮想HILサポート

Virtual HILは現在このプロトコルをサポートしていません。非リアルタイム環境(例:ローカルコンピュータでモデルを実行する場合)を使用する場合、このコンポーネントへの入力は破棄され、このコンポーネントからの出力はゼロになります。