変数: VAR_GENERIC CONSTANT
一般的な定数変数
ジェネリック定数は、内の変数です VAR_GENERIC CONSTANT
ファンクションブロックのスコープ。変数はファンクションブロックインスタンスが宣言されたときにのみ定義されます。
ジェネリック定数はメソッドで使用できます。これは、次のような場合に特に役立ちます。VAR_IN_OUT
または VAR_IN_OUT CONSTANT
スコープ。
型宣言の構文
ジェネリック定数を含むファンクションブロックの型宣言の構文
FUNCTION_BLOCK <function block name> VAR_GENERIC CONSTANT <generic constant name> : <integer data type> := <initial value> ; //Initial value will be overwritten END_VAR
| ファンクションブロックの名前 |
| ジェネリック定数のスコープ で任意の数のジェネリック定数を宣言できます |
| ジェネリック定数の変数名 |
| ジェネリック定数をタイプするコンストラクト。 整数データ型または整数データ型のサブスコープを使用できます。 例:
|
| [オプション] [初期化] 重要初期値はコンパイルチェックにのみ必要です。実行時に、値は上書きされます |
汎用定数は、ファンクションブロックの実装では通常どおり使用できます。このような定数は、たとえば配列のインデックスや文字列の長さなどに使用できます
変数宣言の構文
指定された定数による変数宣言 (関数ブロックのインスタンス化) の構文
以下のオプションが可能です。
PROGRAM <program name> VAR <fb instance name> : <function block name> < <literal> > ; <fb instance name> : <function block name> <( <expression> )> ; <fb instance name> : ARRAY [ <index start > .. <index end> ] OF <function block name> < <array length> > ; END_VAR
| スコープ |
| 変数; ファンクションブロックインスタンスの名前 |
| 関数ブロックで変数を入力します これは一般的な定数を持つ関数ブロックです。 |
| [オプション] このファンクションブロックインスタンスでのみ有効な特定の値をデータ型に割り当てます。値は正式に挿入されます 例: もし 複数 型を定義する関数ブロックにはジェネリック定数が宣言され、カンマで区切られた値のリストが山括弧で囲まれて渡されます。各定数には 1 つの値があります。 Example: |
| [オプション] このファンクションブロックインスタンスでのみ有効な特定の式をデータ型に割り当てます。式が挿入されます。 丸括弧が必要なのは、次のような記号を使用することが許可されているためです。 Example: |
| [オプション] Types the variable with an array of function blocks. The length of the array is:
これは一般的な定数を持つ関数ブロックです。定数は配列インデックスとして使用されます 例: |
| Assigns a specific array length to the data type which is valid especially for this function block instance. 指定された配列の長さは、データ型のサフィックスとして山括弧に正式に挿入されます。指定する値は、開始インデックスと終了インデックスで定義された配列の長さと一致する必要があります Example: |
例
FUNCTION_BLOCK FB_Pou VAR_GENERIC CONSTANT lnstring : DINT := 10; numstring : DINT := 100; END_VAR VAR arraystring : ARRAY[0..numstring-1] OF STRING(lnstring); END_VAR ;
PROGRAM PLC_PRG VAR fbPou : FB_Pou<100, 1000>; END_VAR
FUNCTION_BLOCK FB_SrString VAR_GENERIC CONSTANT maxlen2 : INT(5..10) := 5; //subrange data type END_VAR VAR arrTest : ARRAY[0..maxlen-1] OF BYTE; END_VAR ;
PROGRAM SrMain VAR CONSTANT cconst: INT(5..10) := 5; END_VAR VAR fbMyString1 : FB_SrString<5>; fbMyString2 : FB_SrString<(2 * cconst)>; arrMyString : ARRAY [0..5] OF FB_SrString<6>; END_VAR
次のコードは、任意の長さの配列を処理できる関数ブロックを定義する方法を示しています。関数ブロックには、汎用であるが一定の長さの配列があります。 「一定」とは、各関数ブロックインスタンスの配列の長さが異なりますが、オブジェクトの存続期間中は一定であることを意味します。
この種の構成は、たとえば、ジェネリックライブラリーPOUを実装したいライブラリープログラマーにとって有益です。
FUNCTION_BLOCK FB_MyString VAR_GENERIC CONSTANT maxlen : UDINT := 1; END_VAR VAR test : ARRAY[0..maxlen-1] OF BYTE; END_VAR ;
PROGRAM PLC_PRG VAR CONSTANT cconst: DINT := 1000; END_VAR VAR fbMyString1 : FB_MyString<100>; fbMyString2 : FB_MyString<(2 * cconst)>; arrMyString : ARRAY[0..5] OF FB_MyString<6>; END_VAR ;
継承
ファンクションブロックは、ジェネリック定数 () を持つ基本ファンクションブロックから継承できます。EXTENDS
)。継承する関数ブロックには独自の汎用定数が必要です。その後、特定の値を外部に転送できます。
構文:
FUNCTION_BLOCK <function block name> VAR_GENERIC CONSTANT <generic constant name> : <integer data type> ; END_VAR EXTENDS <function block base> < <generic constant name> >
ジェネリック定数を持つ関数ブロックは、インターフェイスを実装できます (IMPLEMENTS
)。インターフェイスはプロパティ () を宣言します。PROPERTY
) を使うと、指定された値に外部からアクセスできます。インターフェイス自体にジェネリック定数やローカル変数を宣言してはいけません。インターフェースには実装がありません。
構文:
FUNCTION_BLOCK <function block name> VAR_GENERIC CONSTANT <generic constant name> : <integer data type> ; END_VAR IMPLEMENTS <interface name>
ヒント
コーディング時には、ジェネリック定数の宣言が最初に挿入され、その後に以下が挿入されていることを確認してください EXTENDS
そして IMPLEMENTS
。慣れるには少し時間がかかりますが、その理由は、ジェネリック定数は基本クラスでも使用できるからです
の定義 IString
ジェネリック関数ブロック用のインターフェイス。
ジェネリック関数ブロック用のインターフェイスを定義することを強くお勧めします。このインターフェースは、ジェネリック定数の知識がなくてもジェネリック関数ブロックインスタンスを使用できるようにする必要があります
ザル Length
プロパティはジェネリック定数へのアクセスを可能にします。
INTERFACE IString METHOD Append : BOOL VAR_INPUT strAppend : IString; END_VAR METHOD Assign : BOOL VAR_INPUT stringIn : STRING; END_VAR METHOD ToString : STRING VAR_INPUT END_VAR PROPERTY Length : DINT
ファンクションブロックの宣言 FB_MyString
ジェネリック定数を使って maxlen
FUNCTION_BLOCK FB_MyString VAR_GENERIC CONSTANT maxlen : UDINT; END_VAR IMPLEMENTS IString
ファンクションブロック FB_LongString
は指定されたファンクションブロックの拡張です。 FB_MyString
。
FUNCTION_BLOCK FB_LongString EXTENDS FB_MyString<1000>
ファンクションブロックの宣言 FB_MySpecialString
ジェネリック定数を使って maxlen2
指定されたファンクションブロックの拡張として FB_MyString
。ファンクションブロックはメソッドによって拡張されます。 METH_ToLatin
。
FUNCTION_BLOCK FB_MySpecialString VAR_GENERIC CONSTANT maxlen2 : UDINT:= 1; END_VAR EXTENDS FB_MyString<maxlen2>
METHOD METH_ToLatin : STRING VAR_INPUT END_VAR
特定の定数によるファンクションブロックのインスタンス化
PROGRAM PLC_PRG VAR CONSTANT cconst: DINT := 1000; END_VAR VAR string1 : FB_MyString<100>; string2 : FB_MyString<(2 * cconst)>; derived1 : FB_LongString; derived2 : FB_MySpecialString<100>; END_VAR
通話
string1.METH_Assign ('Welt'); string2.METH_Assign ('Hallo '); string2.METH_Append(string1); derived2.METH_ToLatin('Hello World');