オブジェクト:メソッド
シンボル:
キーワード: METHOD
メソッドは、IEC 61131-3標準の拡張であり、データのカプセル化に使用されるオブジェクト指向プログラミング用のツールです。メソッドには、宣言と実装が含まれています。ただし、関数とは異なり、メソッドは独立したPOUではなく、関数ブロックまたはプログラムに従属します。メソッドは、上位POUのすべての有効な変数にアクセスできます。
プログラムまたは関数ブロックの下にメソッドを追加できます。クリック メソッドを追加 ダイアログが開きます。
.そうしてメソッドの編成にインターフェースを使用できます。
詳細については、次を参照してください。 インターフェイスを実装する
重要
POUの下にメソッドをコピーしてインターフェイスの下に追加するか、メソッドをそこに移動すると、含まれている実装が自動的に削除されます。
宣言
構文:
METHOD <access specifier> <method name> : <type of return value>
<access specifier> | オプション アクセス指定子 宣言されたアクセス指定子に応じて、メソッドは独自の名前空間内でのみ呼び出すことができます ( |
<method name> | メソッドの識別子 |
<type of retur value> | オプション メソッドの戻り値の型 注: 明示的な戻り値の型を持たないメソッドの場合、最初に宣言された出力が戻り値として使用されます。戻り値の型も出力も宣言されていない場合にのみ、メソッドは値を返しません。ただし、どちらの場合もコンパイラ エラーは生成されません。 |
<scope list> | スコープ:
|
<variable declaration list> | 変数宣言 <variable name> : <data type> := <initial value> ; 目的に応じてスコープに割り当てられる変数 (パラメーター) のセミコロン区切りのリスト。
|
宣言
METHOD PUBLIC DoIt : BOOL VAR_INPUT iInput_1 : DWORD; iInput_2 : DWORD; sInput_3 : STRING(12); END_VAR
実装
オプション
メソッドの実装のために、ファンクション ブロック インスタンスまたはプログラム変数へのアクセスが許可されます。
の これ ポインタは、独自の機能ブロック インスタンスへのアクセスを許可します。したがって、ポインターは、関数ブロックに割り当てられているメソッドでのみ使用できます。
メソッドがアクセスできない VAR_TEMP 関数ブロックの変数。
メソッドはそれ自体を再帰的に呼び出すことができます。
インターフェイス メソッドの実装はありません
インターフェイスメソッド 入力、出力、およびを宣言できます
VAR_IN_OUT
変数ですが、実装は含まれていません。
メソッドの呼び出し
呼び出しの構文:
<return value variable> := <POU name> . <method name> ( <argument passing> );
<return value variable> | 戻り値の変数 型は、メソッドの戻り値の型と一致する必要があります。 注: 明示的な戻り値の型を持たないメソッドの場合、最初に宣言された出力が戻り値として使用されます。戻り値の型も出力も宣言されていない場合にのみ、メソッドは値を返しません。ただし、どちらの場合もコンパイラ エラーは生成されません。 |
<POU name> | メソッドが配置されているファンクション ブロック インスタンスの識別子 |
<method name> | メソッドの識別子 |
<argument passing> | 実際の引数を含むカンマ区切りのリスト メソッドの各パラメーター (変数) に 1 つの引数が渡されます。 <parameter name> := <actual argument>
|
宣言
METHOD PUBLIC DoIt : BOOL VAR_INPUT iInput_1 : DWORD; iInput_2 : DWORD; sInput_3 : STRING(12); END_VAR
パラメータに引数を渡して呼び出す
bFinishedMethod := fbInstance.DoIt(sInput_3 := 'Hello World ', iInput_2 := 16#FFFF, iInput_1 := 16);
メソッドが呼び出されると、メソッドの戻り値がローカルに宣言された変数に割り当てられます。
入力変数の名前を省略した場合、引数の割り当ては宣言の順序によって行われます。
入力変数の名前を省略した場合、引数の割り当ては宣言の順序によって行われます。
METHOD PUBLIC DoIt : BOOL VAR_INPUT iInput_1 : DWORD; iInput_2 : DWORD; sInput_3 : STRING(12); END_VAR IF iInput_1 = iInput_2 THEN DoIt := TRUE; // explicit return value END_IF
宣言の順番通りに引数を渡して呼び出す
bFinishedMethod := fbInstance.DoIt( 16, 16#0010,'Hello World ');
再帰的なメソッド呼び出し
実装内では、メソッドは、 これ
ポインタ、または割り当てられた機能ブロックのローカル変数を使用します。
<return value variable> := <POU name> . <method name> ( <argument passing> );
関連する機能ブロックインスタンスの直接呼び出し
THIS
ポインタ<return value variable> := <POU name> . <method name> ( <argument passing> );
関連する関数ブロックを一時的にインスタンス化するメソッドのローカル変数による呼び出し
再帰的な場合、コンパイラの警告が発行されます 電話.メソッドがプラグマで提供されている場合 {attribute 'estimated-stack-usage' := '<estimated stack size in bytes>'}
の場合、コンパイラの警告は抑制されます。
実装例については、「属性: 「推定スタック使用量」」の章。
メソッドを再帰的に呼び出すには、メソッド名だけを指定するだけでは不十分です。メソッド名のみを指定すると、コンパイラ エラーが発生します。 の代わりにプログラム名、関数または関数ブロックのインスタンスが必要です
関数ブロックの特別なメソッド
ダイアログ: メソッドの追加
関数:ダイアログを閉じたときに、選択したPOUの下にメソッドを定義します。
電話: ;コンテキストメニュー
要件: プログラム (PRG
)または機能ブロック(FUNCTION_BLOCK
)が選択されている POU ビューまたは デバイス 見る。
注記
基本機能ブロックの下に挿入されたメソッドのインターフェースは、派生機能ブロックの下に同じ名前のメソッドが挿入されたときにコピーされます。
名前 | 例: 標準的な方法 |
リターンタイプ | 戻り値のデフォルトのデータ型または構造化データ型 例: |
実装言語 | 例: 構造化テキスト(ST) |
アクセス指定子 | データへのアクセスを制御します。
|
概要 |
|
追加 | 選択したオブジェクトの下に新しいメソッドを追加します。 |
継承POUを生成する際の入力サポート
オブジェクト指向プログラミングを行い、継承を使用する場合(EXTENDS
キーワード)POUの場合、次のようにサポートを受けることができます。
ベースPOUから派生したPOUの下にアクション、プロパティ、メソッド、またはトランジションを挿入すると、 追加 … ダイアログが開きます。次に、名前の入力フィールドがリストボックスに拡張されます。リストボックスには、ベースPOUで使用可能なアクション、プロパティ、メソッド、またはトランジションからの有効な選択が含まれています。これで、たとえば、ベースPOUのメソッドを簡単に受け入れて、それをPOUの派生関数に適合させることができます。
アクセス修飾子を使用したメソッドとプロパティ PRIVATE
それらも継承されないため、ここにはリストされていません。アクセス修飾子を使用したメソッドとプロパティ PUBLIC
派生したPOUに受け入れると、自動的に空白のアクセス修飾子フィールドを取得します。これは、機能的には同じことを意味します。
詳細については、以下を参照してください。 財産、 方法、 遷移、 アクション、
