演算子:__ QUERYINTERFACE
演算子は、IEC61131-3規格の拡張です。
実行時に、オペレーターはインターフェース参照の別の型への型変換を実行します。演算子は BOOL 結果。 TRUE という意味です CODESYS 変換が正常に実行されました。
__QUERYINTERFACE(<ITF_Source>,<ITF_Dest>);
第1オペランド:インターフェース参照またはFBインターフェース
2番目のオペランド:必要なターゲットタイプのインターフェイス参照
明示的な変換の要件は、ITF_SourceとITF_Destの両方がから派生していることです。 Interface __System.IQueryInterface。このインターフェースは暗黙的に利用可能であり、ライブラリーは必要ありません。
例 152. 例
INTERFACE ItfBase EXTENDS __System.IQueryInterface
METHOD mbase : BOOL
END_METHOD
INTERFACE ItfDerived1 EXTENDS ItfBase
METHOD mderived1 : BOOL
END_METHOD
INTERFACE ItfDerived2 EXTENDS ItfBase
METHOD mderived2 : BOOL
END_METHOD
FUNCTION_BLOCK FB1 IMPLEMENTS ItfDerived1
METHOD mbase : BOOL
mbase := TRUE;
END_METHOD
METHOD mderived1 : BOOL
mderived1 := TRUE;
END_METHOD
END_FUNCTION_BLOCK
FUNCTION_BLOCK FB2 IMPLEMENTS ItfDerived2
METHOD mbase : BOOL
mbase := FALSE;
END_METHOD
METHOD mderived2 : BOOL
mderived2 := TRUE;
END_METHOD
END_FUNCTION_BLOCK
PROGRAMM POU
VAR
inst1 : FB1;
inst2 : FB2;
itfbase1 : ItfBase := inst1;
itfbase2 : ItfBase := inst2;
itfderived1 : ItfDerived1 := 0;
itfderived2 : ItfDerived2 := 0;
xResult1, xResult2, xResult3, xResult4: BOOL;
END_VAR
xResult1 := __QUERYINTERFACE(itfbase1, itfderived1); // xResult = TRUE, itfderivedi1 <>0
// references the instance inst1
xResult2 := __QUERYINTERFACE(itfbase1, itfderived2); // xResult = FALSE, itfderived2 = 0
xResult3 := __QUERYINTERFACE(itfbase2, itfderived1); // xResult = FALSE, itfderived1 = 0
xResult4 := __QUERYINTERFACE(itfbase2, itfderived2); // xResult = TRUE, itfderived2 <> 0
// references the instance inst2