Skip to main content

オブジェクト:メソッド

シンボル: _cds_icon_method.png

キーワード: METHOD

メソッドは、IEC 61131-3標準の拡張であり、データのカプセル化に使用されるオブジェクト指向プログラミング用のツールです。メソッドには、宣言と実装が含まれています。ただし、関数とは異なり、メソッドは独立したPOUではなく、関数ブロックまたはプログラムに従属します。メソッドは、上位POUのすべての有効な変数にアクセスできます。

プログラムまたは関数ブロックの下にメソッドを追加できます。クリック プロジェクト → オブジェクトの追加 → メソッド.そうして メソッドを追加 ダイアログが開きます。

メソッドの編成にインターフェースを使用できます。

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

重要

POUの下にメソッドをコピーしてインターフェイスの下に追加するか、メソッドをそこに移動すると、含まれている実装が自動的に削除されます。

宣言

構文:

METHOD <access specifier> <method name> : <type of return value>

<access specifier>

オプション

アクセス指定子

宣言されたアクセス指定子に応じて、メソッドは独自の名前空間内でのみ呼び出すことができます (INTERNAL)、独自の POU およびその派生物内のみ (PROTECTED)、または独自の POU 内のみ (PRIVATE)。ために PUBLIC、メソッドはどこからでも呼び出すことができます。

<method name>

メソッドの識別子

<type of retur value>

オプション

メソッドの戻り値の型

注: 明示的な戻り値の型を持たないメソッドの場合、最初に宣言された出力が戻り値として使用されます。戻り値の型も出力も宣言されていない場合にのみ、メソッドは値を返しません。ただし、どちらの場合もコンパイラ エラーは生成されません。

59. 変数宣言 (パラメーター) で可能なスコープ

<scope list>

スコープ:

  • VAR_IN_OUT <variable declaration list> END_VAR

    入出力変数の変数宣言用

  • VAR_INPUT <variable declaration list> END_VAR

    入力の変数宣言用

  • VAR_OUTPUT <variable declaration list> END_VAR

    出力用変数宣言用

    関数と同様に、メソッドは追加の出力を持つことができます。メソッドを呼び出すときに、追加の出力に引数 (変数) を渡す必要もあります。

  • VAR <variable declaration list> END_VAR

    ローカル目的の変数宣言用

<variable declaration list>

変数宣言

<variable name> : <data type> := <initial value> ;

目的に応じてスコープに割り当てられる変数 (パラメーター) のセミコロン区切りのリスト。

  • 入力および入出力の変数には、初期値を割り当てることができます

    初期値の割り当てはオプションです。ただし、指定されている場合は、メソッドを呼び出すときに、このパラメーターに引数を渡すことを省略できます。これらの種類のパラメーターは、オプションのパラメーターと呼ばれます。

  • メソッドの変数 (パラメーター) には、メソッドの実行中にのみ有効な一時データ (スタック変数) が含まれます。メソッドで宣言および実装されるすべての変数は、メソッドが呼び出されるたびに再初期化されます。



517.

宣言

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>

  • 宣言された各入力/出力または入力には、実引数が割り当てられます。引数には、値 (リテラル)、式、または型が一致する変数を指定できます。

  • 実引数 (同じ型の変数) は、宣言された各出力に割り当てられます。引数は、型が一致する変数でなければなりません。

  • 入力または入出力の引数の受け渡しは省略できます。

    したがって、リスト内の引数の数は、パラメーター (入力または入出力のスコープ) の数よりも少なくなる場合があります。特に、宣言でデフォルト値または初期値が指定されたオプションのパラメータである場合は、引数の受け渡しを省略できます。

    ヒント: メソッドを呼び出すときに入力アシスタントからヘルプを取得すると、既存の初期値について通知されます。

  • 名前と代入演算子を使用してパラメータを指定して引数を渡すことはオプションです。

    引数のみを指定するだけで十分です。宣言内の変数の順序によって、どの引数がどのパラメーターに渡されるかが決まります。

518.

宣言

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);

メソッドが呼び出されると、メソッドの戻り値がローカルに宣言された変数に割り当てられます。



519.

入力変数の名前を省略した場合、引数の割り当ては宣言の順序によって行われます。

入力変数の名前を省略した場合、引数の割り当ては宣言の順序によって行われます。

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>'}の場合、コンパイラの警告は抑制されます。

実装例については、「属性: 「推定スタック使用量」」の章。

メソッドを再帰的に呼び出すには、メソッド名だけを指定するだけでは不十分です。メソッド名のみを指定すると、コンパイラ エラーが発生します。 の代わりにプログラム名、関数または関数ブロックのインスタンスが必要です

関数ブロックの特別なメソッド

FB_Init

宣言は自動的に暗黙的ですが、明示的な宣言も可能です

関数ブロックの宣言部分で定義されている、関数ブロックの初期化コードが含まれています

FB_Reinit

明示的な宣言が必要です。

機能ブロックのインスタンスがコピーされた後に呼び出します(オンライン変更中など)。新しいインスタンスモジュールを再初期化します。

FB_Exit

明示的な宣言が必要です。

新しいダウンロードまたはリセットの前、またはシフトまたは削除されたすべてのインスタンスのオンライン変更中に、機能ブロックの各インスタンスを呼び出します。

プロパティ

提供します Set および/または Get アクセサメソッド。

ダイアログ: メソッドの追加

関数:ダイアログを閉じたときに、選択したPOUの下にメソッドを定義します。

電話プロジェクト→オブジェクトの追加→メソッド;コンテキストメニュー

要件: プログラム (PRG)または機能ブロック(FUNCTION_BLOCK)が選択されている POU ビューまたは デバイス 見る。

注記

基本機能ブロックの下に挿入されたメソッドのインターフェースは、派生機能ブロックの下に同じ名前のメソッドが挿入されたときにコピーされます。

名前

例: meth_DoIt

標準的な方法 FB_InitFB_Exit POUの下にまだ挿入されていない場合は、リストボックスに表示されます。派生機能ブロックの場合、リストボックスには基本機能ブロックのすべてのメソッドも表示されます。

リターンタイプ

戻り値のデフォルトのデータ型または構造化データ型

例: BOOL

実装言語

例: 構造化テキスト(ST)

アクセス指定子

データへのアクセスを制御します。

  • 公衆 または指定なし:アクセスは制限されません。

  • プライベート:アクセスは、プログラム、機能ブロック、またはGVLに制限されています。

    オブジェクトはとしてマークされます (private) POUまたはデバイスビューで。宣言にはキーワードが含まれています PRIVATE

  • 保護されています:アクセスは、プログラム、機能ブロック、またはその派生物を含むGVLに制限されます。宣言にはキーワードが含まれています PROTECTED

    オブジェクトはとしてマークされます (protected) POUまたはデバイスビューで。

  • 内部:メソッドへのアクセスは名前空間(ライブラリ)に制限されています。

    オブジェクトはとしてマークされます (internal) POUまたはデバイスビューで。宣言にはキーワードが含まれています INTERNAL

概要

standard icon:メソッドに実装がなく、実装が派生FBによって提供されることを識別します。

追加

選択したオブジェクトの下に新しいメソッドを追加します。

継承POUを生成する際の入力サポート

オブジェクト指向プログラミングを行い、継承を使用する場合(EXTENDS キーワード)POUの場合、次のようにサポートを受けることができます。

ベースPOUから派生したPOUの下にアクション、プロパティ、メソッド、またはトランジションを挿入すると、 追加 … ダイアログが開きます。次に、名前の入力フィールドがリストボックスに拡張されます。リストボックスには、ベースPOUで使用可能なアクション、プロパティ、メソッド、またはトランジションからの有効な選択が含まれています。これで、たとえば、ベースPOUのメソッドを簡単に受け入れて、それをPOUの派生関数に適合させることができます。

アクセス修飾子を使用したメソッドとプロパティ PRIVATE それらも継承されないため、ここにはリストされていません。アクセス修飾子を使用したメソッドとプロパティ PUBLIC 派生したPOUに受け入れると、自動的に空白のアクセス修飾子フィールドを取得します。これは、機能的には同じことを意味します。

詳細については、以下を参照してください。 財産方法遷移アクション

520.
_cds_img_input_wizzard_for_blocks.png