EcoStruxure Machine Expert Version 1.1 unterstützt nicht die Controller M258, LMC058 und LMC078.

__QUERYINTERFACE

Definition

Dieser Operator wird in der Norm IEC 61131-3 nicht beschrieben.

Bei Laufzeit aktiviert __QUERYINTERFACE eine Typenkonvertierung von einer Schnittstellenre­ferenz zu einer anderen. Der Operator gibt ein Ergebnis vom Typ BOOL zurück. TRUE bedeutet, dass die Konvertierung erfolgreich durchgeführt wurde.

Syntax

__QUERYINTERFACE (<ITF_Quelle>, < ITF_Ziel>

Dieser Operator bekommt als 1. Operanden eine Interface-Referenz oder eine FB-Instanz und als 2. Operanden eine Interface-Referenz mit dem gewünschten Typen. Nach der Ausführung von __QUERYINTERFACE, hält ITF_Dest eine Referenz zur vorgesehenen Schnittstelle, wenn das von der ITF-Quelle referierte Objekt die Schnittstelle implementiert. Dann war die Konvertierung erfolgreich und das Ergebnis des Operators gibt den Wert TRUE zurück. In allen anderen Fällen gibt der Operator den Wert TRUE zurück.

Eine Vorbedingung für eine explizite Konvertierung ist, dass nicht nur ITF_Source, sondern auch ITF_Dest eine Erweiterung der Schnittstelle __System.IQueryInterface ist. Dieses Interface steht implizit zur Verfügung und benötigt keine Bibliothek.

Beispiel

Beispiel in ST:

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
PROGRAM POU
VAR
    inst1 : FB1;
    inst2 : FB2;
    itfbase1 : ItfBase := inst1;
    itfbase2 : ItfBase := inst2;
    itfderived1 : ItfDerived1 := 0;
    itfderived2 : ItfDerived2 := 0;
    bTest1, bTest2, xResult1, xResult2: BOOL;
END_VAR
xResult1 := __QUERYINTERFACE(itfbase1, itfderived1); // xResult = TRUE, itfderived1 <> 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