Skip to main content

変数: 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

<function block name>

ファンクションブロックの名前

VAR_GENERIC CONSTANT

END_VAR

ジェネリック定数のスコープ

で任意の数のジェネリック定数を宣言できます VAR_GENERIC CONSTANT スコープ。

<generic constant name>

ジェネリック定数の変数名

: <integer data type>

ジェネリック定数をタイプするコンストラクト。

整数データ型または整数データ型のサブスコープを使用できます。

例:

maxlen1 : INT := 4;

maxlen2 : INT(5..10) := 5;

:= <initial value>

[オプション]

[初期化]

重要

初期値はコンパイルチェックにのみ必要です。実行時に、値は上書きされます

汎用定数は、ファンクションブロックの実装では通常どおり使用できます。このような定数は、たとえば配列のインデックスや文字列の長さなどに使用できます

変数宣言の構文

指定された定数による変数宣言 (関数ブロックのインスタンス化) の構文

以下のオプションが可能です。

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
9. 変数宣言

<scope>

END_...

スコープ

<fb instance name>

変数; ファンクションブロックインスタンスの名前

: <function block name>

関数ブロックで変数を入力します

これは一般的な定数を持つ関数ブロックです。

< <literal> >

[オプション]

このファンクションブロックインスタンスでのみ有効な特定の値をデータ型に割り当てます。値は正式に挿入されます in angle brackets データ型のサフィックスとして。

例: fbMyString1 : FB_MyString<100&>;

もし 複数 型を定義する関数ブロックにはジェネリック定数が宣言され、カンマで区切られた値のリストが山括弧で囲まれて渡されます。各定数には 1 つの値があります。

Example: fbPou : FB_Pou<100, 1000>;

<( <expression> )>

[オプション]

このファンクションブロックインスタンスでのみ有効な特定の式をデータ型に割り当てます。式が挿入されます。 in angle brackets データ型のサフィックスとして。式自体を囲む必要があります。 丸括弧で囲んでください。

丸括弧が必要なのは、次のような記号を使用することが許可されているためです。 < または > エクスプレッションで。そうしないと、コードの一意性が保証されなくなります

Example: fbMyString2 : FB_MyString<(2 * cconst)>;

ARRAY [ <start index start> .. <end index> ] OF <function block name>

[オプション]

Types the variable with an array of function blocks. The length of the array is:

<end index> - <start index> + 1

これは一般的な定数を持つ関数ブロックです。定数は配列インデックスとして使用されます

例: arrMyString

< <array length> >

Assigns a specific array length to the data type which is valid especially for this function block instance.

指定された配列の長さは、データ型のサフィックスとして山括弧に正式に挿入されます。指定する値は、開始インデックスと終了インデックスで定義された配列の長さと一致する必要があります

Example: arrMyString : ARRAY[0..5] OF FB_MyString<6>;



92. 複数の汎用定数の使用例
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


93. 例:サブスコープタイプの汎用定数
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


94. 例:パラメーター化可能な配列変数を持つジェネリック関数ブロック

次のコードは、任意の長さの配列を処理できる関数ブロックを定義する方法を示しています。関数ブロックには、汎用であるが一定の長さの配列があります。 「一定」とは、各関数ブロックインスタンスの配列の長さが異なりますが、オブジェクトの存続期間中は一定であることを意味します。

この種の構成は、たとえば、ジェネリックライブラリー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。慣れるには少し時間がかかりますが、その理由は、ジェネリック定数は基本クラスでも使用できるからです

95.

の定義 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');