データ型: ANY、ANY_<タイプ>
データ型 ANY または ANY_<タイプ> 型が不明または指定されていない入力パラメータを入力するために、関数、関数ブロック、またはメソッドのインターフェイスで使用されます。 入力変数 (VAR_INPUT) は汎用データ型を持ちます。
コンパイラは入力変数の型を内部で以下に説明するデータ構造に置き換えるため、値は直接渡されません。代わりに、ポインタが実際の値に渡されるため、変数のみを渡すことができます。したがって、データ型は呼び出し時にのみ指定されます。その結果、それぞれが異なるデータ型を持つ引数を使用して、このような POU の呼び出しを行うことができます。
ヒント
リテラル、置換された定数、関数呼び出しまたは式の結果 できない 入力変数に渡されます (VAR_IN_OUT)。
ANY および ANY_ の内部データ構造<タイプ>
コードがコンパイルされるとき、入力変数は型付けされます。 内部的に と ANY 以下の構造によるデータ型。 POU が呼び出されるとき (実行時)、引数は参照パラメーターに渡されます。
TYPE AnyType :
STRUCT
// Type of the current parameter
typeclass : __SYSTEM.TYPE_CLASS ;
// Pointer to the current parameter
pvalue : POINTER TO BYTE;
// Size of the data to which the pointer points
diSize : DINT;
END_STRUCT
END_TYPEヒント
この構造体を使用して、POU 内の入力変数にアクセスし、たとえば、渡された値をクエリできます。
これは、2つの入力変数が同じタイプと同じ値を持っているかどうかを比較します。
FUNCTION funGenericCompare : BOOL
// Declaration
VAR_INPUT
any1 : ANY;
any2 : ANY;
END_VAR
VAR
pTest : POINTER TO ARRAY [0..100] OF POINTER TO DWORD;
diCount: DINT;
END_VAR
// Implementation
pTest := ADR(any1);
Generic_Compare := FALSE;
IF any1.typeclass <> any2.typeclass THEN
RETURN;
END_IF
IF any1.diSize <> any2.diSize THEN
RETURN;
END_IF
// Byte comparison
FOR iCount := 0 TO any1.diSize-1 DO
IF any1.pvalue[iCount] <> any2.pvalue[iCount] THEN
RETURN;
END_IF
END_FOR
Generic_Compare := TRUE;
RETURN;
宣言
構文の説明は、パラメーターが1つだけのPOU(入力変数)を参照しています。
構文
<範囲> <POU 名> : <戻り値のデータ型> VAR_INPUT <変数名> : <汎用データ型>; END_VAR
<範囲> | 考えられる範囲:
|
<POU 名> | POUの名前 |
| オプション |
<変数名> | 入力変数の名前 |
<汎用データ型> |
|
FUNCTION funComputeAny : BOOL
VAR_INPUT
anyInput1 : ANY; // For valid data type see table
END_VAR
FUNCTION_BLOCK FB_ComputeAny
VAR_INPUT
anyInput1 : ANY;
END_VAR
FUNCTION_BLOCK FB_ComputeMethod
METHOD methComputeAnny : BOOL
VAR_INPUT
anyInput1 : ANY_INT; // Valid data types are SINT, INT, DINT, LINT, USINT, UINT, UDINT, ULINT
END_VARヒント
3.5.1.0を超えるコンパイラバージョンでは、表の汎用IECデータ型がサポートされます。
この表は、汎用データ型の階層を表し、仮パラメーター(宣言)のどの汎用データ型が引数(呼び出し)のどの基本データ型を許可するかに関する情報を提供します。
仮パラメータの場合のジェネリックデータ型 | 実パラメータ(引数)の場合に許可される基本データ型 | ||
|---|---|---|---|
|
|
| |
|
| ||
|
|
| |
|
| ||
|
| ||
電話
構文の説明は、引数が渡されるパラメーターが1つだけのPOUを参照しています。その結果、引数のデータ型は入力変数のジェネリックデータ型を指定します。たとえば、タイプの引数 BYTE, WORD, DWORD, LWORD タイプに渡すことができます ANY_BIT 入力変数。
関数呼び出しの構文:
<関数名> (<引数>)
関数ブロック呼び出しの構文
<ファンクションブロックインスタンスの名前> (<入力変数の名前> := <引数>)
メソッド呼び出しの構文
<ファンクションブロックインスタンスの名前> 。 <メソッド名> (<入力変数の名前> := <引数>)
<引数> | 伝達変数 |
PROGRAM PLC_PRG
VAR
byValue : BYTE := 16#AB;
iValue : INT := -1234;
xResultByte : BOOL;
xResultInt : BOOL;
fbComputeAnyByte : FB_ComputeAny;
fbComputeAnyInt : FB_ComputeAny;
fbComputeM1 : FB_ComputeMethod;
fbComputeM2 : FB_ComputeMethod;
byN : BYTE := 1;
wBitField1 : WORD := 16#FFFF;
wBitField2 : WORD := 16#0001;
xInit : BOOL;
xResult : BOOL;
END_VAR
//Implementation
xResultByte := funComputeAny(byValue);
xResultInt := funComputeAny(iValue);
xResult := funGenericCompare(wBitField1, wBitField2);
fbComputeAnyByte(anyInput1 := byValue);
fbComputeAnyInt(anyInput1 := iValue);
fbComputeM1.methComputeAnny(anyInput1 := byValue);
fbComputeM2.methComputeAnny(anyInput1 := iValue);