Skip to main content

インターフェイスを実装する

インターフェイスを実装する

インターフェイスの実装は、オブジェクト指向プログラミングの概念に基づいています。共通のインタフェースを介して、異なるが類似した機能ブロックを同じ方法で使用することもできます。

インターフェイスを実装する機能ブロックには、このインターフェイスで定義されているすべてのメソッドとプロパティ(インターフェイスメソッドとインターフェイスプロパティ)が含まれている必要があります。つまり、それぞれのメソッドまたはプロパティの名前、入力、および出力は完全に同じである必要があります。

インタフェースを実装する新しい汎用モジュールを登録すると、以下が追加されます。 CODESYS ツリーの新しい汎用モジュールの下に、このインタフェースのすべてのメソッドとプロパティが自動的に入力されます。

重要

その後、インターフェースにメソッドを追加すると、 CODESYS これらのメソッドは、関連する汎用モジュールに自動的に追加されません。更新するには、コマンドを明示的に使用する必要があります インターフェイスを実装する 選ぶ。

派生関数ブロックの場合、インターフェースからの「継承」によって採用されたメソッドまたはプロパティが目的の実装を受け取るか、基本の実装を使用する場合は削除されるようにする必要があります。自動的に挿入されたプラグマ属性によって引き起こされる、対応する翻訳エラーメッセージまたは警告を受け取ります。コマンドのヘルプページを参照してください インターフェイスを実装する

重要

  • 変数を介してメソッドを呼び出す前に、機能ブロックのインタフェースをインタフェースタイプの変数に割り当てる必要があります。

  • インターフェイスタイプの変数は、常に割り当てられた機能ブロックインスタンスの参照です。

インターフェイス型変数は、ファンクションブロックのインスタンスへの参照です。このような変数は、インターフェースを実装する任意の機能ブロックを参照できます。変数に割り当てが行われていない場合、変数にはオンラインモードの値が含まれます 0

30.

インターフェイス I1 メソッドが含まれています GetName

METHOD GetName : STRING

機能ブロック AB それぞれがインターフェースを実装します I1

FUNCTION_BLOCK A IMPLEMENTS I1
FUNCTION_BLOCK B IMPLEMENTS I1

したがって、両方の汎用モジュールには、次の名前のメソッドが必要です。 GetName とリターンタイプ STRING 含む。それ以外の場合、コンパイラはエラーを報告します。

関数には、インターフェイスタイプの変数の宣言が含まれています I1

FUNCTION DeliverName : STRING
VAR_INPUT
    l_i : I1;
END_VAR

インターフェースがブロックする機能 I1 実装、この入力変数に割り当てることができます。

関数呼び出しの例:

DeliverName(l_i := A_instance); // call with instance of type A
DeliverName(l_i := B_instance); // call with instance of type B

インターフェイスメソッドの呼び出し:

この場合、それは実際のタイプに依存します l_i アプリケーションかどうかから A.GetName また B.GetName 呼び出します。

DeliverName := l_i.GetName();


新しい汎用モジュールでのインタフェースの実装

要件:現在開いているプロジェクトには、少なくとも1つのインターフェイスオブジェクトがあります。

  1. 選択する 応用 デバイスツリーで、メニューコマンドを選択します プロジェクト→オブジェクトの追加→POU

    対話 POUを追加する 開きます。

  2. 入力項目に新しい汎用モジュールの名称を入力します 1つ、例えば POU_Im

  3. 選ぶ ファンクションブロック

  4. 選ぶ 実装 ボタンをクリックします _cds_icon_input_assistent.png

  5. エントリヘルパーで、カテゴリから選択します インターフェイス たとえばインターフェース ITF1 をクリックします わかった

  6. 別のインターフェースを追加するには、もう一度クリックします _cds_icon_input_assistent.png 別のインターフェースを選択します。

  7. オプションであなたは1つを持つことができます アクセス修飾子 選択リストからの新しい汎用モジュールの場合。

  8. ドロップダウンリストから選択します 実装言語 例えば 構造化テキスト(ST) アウト。

  9. クリック 追加

    CODESYS 機能ブロックを追加します POU_Ex デバイスツリーに移動すると、エディターが開きます。最初の行は次のように述べています。

    FUNCTION_BLOCK POU_Im IMPLEMENTS ITF1

    これで、インターフェイスとそのメソッドおよびプロパティが関数ブロックの下のデバイスツリーに挿入され、インターフェイスとそのメソッドの実装部分にプログラムコードを入力できるようになりました。

既存の機能ブロックにインターフェースを実装する

要件:現在開いているプロジェクトには、たとえば機能ブロックがあります POU_Im たとえば、少なくとも1つのインターフェイスオブジェクト ITF1

  1. デバイスツリーでPOUをダブルクリックします POU_Ex(FB)

    POUのエディターが開きます。

  2. 既存の一番上の行のエントリを展開します FUNCTION_BLOCK POU_ImIMPLEMENTS ITF1

    機能ブロック POU_Im インターフェイスを実装します ITF1