Skip to main content

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

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

インターフェイスを実装する関数ブロックは、このインターフェイスで定義されたすべてのメソッドとプロパティに対して独自のコードを実装する必要があります。

インターフェイスを実装する新しい関数ブロックを定義すると、このインターフェイスのメソッドとプロパティがオブジェクトツリーの新しい関数ブロックの下に自動的に挿入されます。ただし、 すべてではない メソッドとプロパティは挿入されますが、エラーのないコンパイルに必要なものだけが挿入されます。

後でインターフェイスにさらにメソッドを追加する場合、これらのメソッドは次のようになります。 自動的にはありません。 インターフェイスを実装するファンクションブロックの宣言に含まれています。そこで実装を更新するには、を呼び出す必要があります。 実装インタフェース コマンド。個々のメソッドをオーバーライドするには、 [オブジェクトを追加]メソッド コマンド。ダイアログが開き、オーバーライド可能なすべてのメソッドのリストが表示されます。選択するには、をクリックしてください [名前] リストボックス。

派生関数ブロックの場合、メソッドまたはプロパティがインターフェイスから次の方法で継承されていることを確認する必要があります。 EXTENDS、正しく実装されている。カスタム実装が提供されていない場合、ファンクションブロックは上位のファンクションブロックまたは関連するファンクションブロックの基本実装を自動的に使用します

詳細については、以下を参照してください。 インターフェースの更新方法

インターフェイス変数を使用する

重要

タイプ準拠のインターフェイスを持つファンクションブロックインスタンスは、タイプとして定義された変数に割り当てる必要があります インタフェース。この変数を使用してメソッドを呼び出すことができるのは、この後だけです。

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

29.

インターフェイス変数は、ファンクションブロックインスタンスへの参照として機能します。このインターフェースを実装する任意のインスタンスを参照できます。割り当てられる特定のインスタンスは実行時に異なる場合があります。最初の代入まで、変数には値が格納されます。 0

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

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

METHOD GetName : STRING
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。その後、をクリックします OK

  6. 別のインタフェースを挿入する場合は、をクリックします _cds_icon_input_assistent.png もう一度。次に、目的のインターフェースを選択します。

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

  8. の中から選択してください 実装言語 リストボックス (例: 構造化テキスト (ST)

  9. クリック 追加

    CODESYS を追加します Pou_EX デバイスツリーへのインターフェースを含むファンクションブロックで、エディターを開きます。

    1 行目には次のテキストが含まれます。

    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

インターフェースの更新

定義済みのインターフェースに後でさらにメソッドやプロパティを追加すると、このインターフェースを実装する関数ブロックは次のようになります。 自動的には行われません。 新しいメソッドを含むように拡張されました。インターフェイスが実装されているはずの関数ブロックを手動で更新する必要があります。

これを実行するには、 インターフェースの実装 新しいオブジェクトを挿入するコマンド。

詳細については、以下を参照してください。 インターフェイスを実装する

オーバーライドメソッド

とのシナリオでは IMPLEMENTS (インターフェース) と EXTENDS (継承) では、インタフェースですでに宣言されているメソッドを適応またはオーバーライドするために、派生関数ブロックで再実装する必要がある場合があります。

個々のメソッドをオーバーライドするには、 [オブジェクトを追加]メソッド コマンド。ダイアログが開き、オーバーライド可能なすべてのメソッドのリストが表示されるので、独自の実装が必要なメソッドを選択できます。これが追加されるので、実装を補足できます

詳細については、以下を参照してください。 ダイアログ: メソッドの追加