Der Operator ist eine Erweiterung der Norm IEC 61131-3.
Der Operator führt zur Laufzeit eine Typkonvertierung einer Interface-Referenz zu
einer anderen aus. Der Operator liefert ein Ergebnis vom Typ BOOL
zurück. TRUE
bedeutet, dass CODESYS die Konvertierung erfolgreich durchgeführt hat.
__QUERYINTERFACE(<ITF_Source>,<ITF_Dest>);
1.Operand: Interface-Referenz oder FB-Instanz
2.Operand: Interface-Referenz mit gewünschten Zieltypen
Voraussetzung für die explizite Konvertierung ist, dass sowohl das ITF_Source als
auch ITF_Dest eine Ableitung vom Interface __System.IQueryInterface
sind. Dieses Interface steht implizit zur Verfügung und benötigt keine Bibliothek.
Beispiel
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