インターフェイスを実装する
インターフェースの実装は、オブジェクト指向プログラミングの概念に基づいています。共有インターフェースを使用することで、異なるが類似した機能ブロックを同様の方法で実装できます。
インターフェイスを実装する関数ブロックは、このインターフェイスで定義されたすべてのメソッドとプロパティに対して独自のコードを実装する必要があります。
インターフェイスを実装する新しい関数ブロックを定義すると、このインターフェイスのメソッドとプロパティがオブジェクトツリーの新しい関数ブロックの下に自動的に挿入されます。ただし、 すべてではない メソッドとプロパティは挿入されますが、エラーのないコンパイルに必要なものだけが挿入されます。
後でインターフェイスにさらにメソッドを追加する場合、これらのメソッドは次のようになります。 自動的にはありません。 インターフェイスを実装するファンクションブロックの宣言に含まれています。そこで実装を更新するには、を呼び出す必要があります。 実装インタフェース コマンド。個々のメソッドをオーバーライドするには、 [オブジェクトを追加] → メソッド コマンド。ダイアログが開き、オーバーライド可能なすべてのメソッドのリストが表示されます。選択するには、をクリックしてください [名前] リストボックス。
派生関数ブロックの場合、メソッドまたはプロパティがインターフェイスから次の方法で継承されていることを確認する必要があります。 EXTENDS、正しく実装されている。カスタム実装が提供されていない場合、ファンクションブロックは上位のファンクションブロックまたは関連するファンクションブロックの基本実装を自動的に使用します
詳細については、以下を参照してください。 インターフェースの更新、 方法
インターフェイス変数を使用する
重要
タイプ準拠のインターフェイスを持つファンクションブロックインスタンスは、タイプとして定義された変数に割り当てる必要があります インタフェース。この変数を使用してメソッドを呼び出すことができるのは、この後だけです。
インターフェースタイプの変数は常に、割り当てられたファンクションブロックインスタンスへの参照です。
インターフェイス変数は、ファンクションブロックインスタンスへの参照として機能します。このインターフェースを実装する任意のインスタンスを参照できます。割り当てられる特定のインスタンスは実行時に異なる場合があります。最初の代入まで、変数には値が格納されます。 0。
インターフェイス I1 メソッドが含まれています GetName。
機能ブロック A と B それぞれがインターフェースを実装します 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 つのインターフェースオブジェクトがあります。
デバイスツリーで、 [アプリケーション] オブジェクトを選択し、をクリックします。 プロジェクト → [オブジェクトを追加] → POU メニューコマンド。
対話 POUを追加する 開きます。
入力項目に新しい汎用モジュールの名称を入力します 姓 1つ、例えば POU_Im。
タイプを選択してください ファンクションブロック。
をクリックします インプリメンツ 属性をクリックし、
ボタン。入力アシスタントで、 [インターフェイス] カテゴリ、次にインターフェースなど
ITF1。その後、をクリックします OK。別のインタフェースを挿入する場合は、をクリックします
もう一度。次に、目的のインターフェースを選択します。オプションであなたは1つを持つことができます アクセス修飾子 選択リストからの新しい汎用モジュールの場合。
の中から選択してください 実装言語 リストボックス (例: 構造化テキスト (ST)。
クリック 追加。
CODESYS を追加します Pou_EX デバイスツリーへのインターフェースを含むファンクションブロックで、エディターを開きます。
1 行目には次のテキストが含まれます。
FUNCTION_BLOCK POU_Im IMPLEMENTS ITF1
これで、インターフェイスとそのメソッドとプロパティがデバイスツリーのファンクションブロックの下に挿入されました。これで、インターフェイスとそのメソッドの実装部分にプログラムコードを入力できます。
既存の機能ブロックにインターフェースを実装する
要件:現在開いているプロジェクトにはファンクションブロックがあります (例: Pou_IM) と少なくとも 1 つのインターフェースオブジェクト (例: ITF1)。
デバイスツリーでPOUをダブルクリックします POU_Ex(FB)。
POUのエディターが開きます。
既存の一番上の行のエントリを展開します
FUNCTION_BLOCK POU_ImとIMPLEMENTS ITF1。機能ブロック POU_Im インターフェイスを実装します ITF1。
インターフェースの更新
定義済みのインターフェースに後でさらにメソッドやプロパティを追加すると、このインターフェースを実装する関数ブロックは次のようになります。 自動的には行われません。 新しいメソッドを含むように拡張されました。インターフェイスが実装されているはずの関数ブロックを手動で更新する必要があります。
これを実行するには、 インターフェースの実装 新しいオブジェクトを挿入するコマンド。
詳細については、以下を参照してください。 インターフェイスを実装する
オーバーライドメソッド
とのシナリオでは IMPLEMENTS (インターフェース) と EXTENDS (継承) では、インタフェースですでに宣言されているメソッドを適応またはオーバーライドするために、派生関数ブロックで再実装する必要がある場合があります。
個々のメソッドをオーバーライドするには、 [オブジェクトを追加] → メソッド コマンド。ダイアログが開き、オーバーライド可能なすべてのメソッドのリストが表示されるので、独自の実装が必要なメソッドを選択できます。これが追加されるので、実装を補足できます
詳細については、以下を参照してください。 ダイアログ: メソッドの追加