インターフェイスを実装する
インターフェイスを実装する
インターフェイスの実装は、オブジェクト指向プログラミングの概念に基づいています。共通のインタフェースを介して、異なるが類似した機能ブロックを同じ方法で使用することもできます。
インターフェイスを実装する機能ブロックには、このインターフェイスで定義されているすべてのメソッドとプロパティ(インターフェイスメソッドとインターフェイスプロパティ)が含まれている必要があります。つまり、それぞれのメソッドまたはプロパティの名前、入力、および出力は完全に同じである必要があります。
インタフェースを実装する新しい汎用モジュールを登録すると、以下が追加されます。 CODESYS ツリーの新しい汎用モジュールの下に、このインタフェースのすべてのメソッドとプロパティが自動的に入力されます。
重要
その後、インターフェースにメソッドを追加すると、 CODESYS これらのメソッドは、関連する汎用モジュールに自動的に追加されません。更新するには、コマンドを明示的に使用する必要があります インターフェイスを実装する 選ぶ。
派生関数ブロックの場合、インターフェースからの「継承」によって採用されたメソッドまたはプロパティが目的の実装を受け取るか、基本の実装を使用する場合は削除されるようにする必要があります。自動的に挿入されたプラグマ属性によって引き起こされる、対応する翻訳エラーメッセージまたは警告を受け取ります。コマンドのヘルプページを参照してください インターフェイスを実装する。
重要
変数を介してメソッドを呼び出す前に、機能ブロックのインタフェースをインタフェースタイプの変数に割り当てる必要があります。
インターフェイスタイプの変数は、常に割り当てられた機能ブロックインスタンスの参照です。
インターフェイス型変数は、ファンクションブロックのインスタンスへの参照です。このような変数は、インターフェースを実装する任意の機能ブロックを参照できます。変数に割り当てが行われていない場合、変数にはオンラインモードの値が含まれます 0
。
インターフェイス I1
メソッドが含まれています GetName
。
METHOD GetName : STRING
機能ブロック A
と B
それぞれがインターフェースを実装します 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つのインターフェイスオブジェクトがあります。
選択する 応用 デバイスツリーで、メニューコマンドを選択します 。
対話 POUを追加する 開きます。
入力項目に新しい汎用モジュールの名称を入力します 姓 1つ、例えば POU_Im。
選ぶ ファンクションブロック。
選ぶ 実装 ボタンをクリックします
。
エントリヘルパーで、カテゴリから選択します インターフェイス たとえばインターフェース
ITF1
をクリックします わかった。別のインターフェースを追加するには、もう一度クリックします
別のインターフェースを選択します。
オプションであなたは1つを持つことができます アクセス修飾子 選択リストからの新しい汎用モジュールの場合。
ドロップダウンリストから選択します 実装言語 例えば 構造化テキスト(ST) アウト。
クリック 追加。
CODESYS 機能ブロックを追加します POU_Ex デバイスツリーに移動すると、エディターが開きます。最初の行は次のように述べています。
FUNCTION_BLOCK POU_Im IMPLEMENTS ITF1
これで、インターフェイスとそのメソッドおよびプロパティが関数ブロックの下のデバイスツリーに挿入され、インターフェイスとそのメソッドの実装部分にプログラムコードを入力できるようになりました。
既存の機能ブロックにインターフェースを実装する
要件:現在開いているプロジェクトには、たとえば機能ブロックがあります POU_Im たとえば、少なくとも1つのインターフェイスオブジェクト ITF1。
デバイスツリーでPOUをダブルクリックします POU_Ex(FB)。
POUのエディターが開きます。
既存の一番上の行のエントリを展開します
FUNCTION_BLOCK POU_Im
とIMPLEMENTS ITF1
。機能ブロック POU_Im インターフェイスを実装します ITF1。