データ型: 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);