Zuweisungsversuch in ST

Syntax
interface_variable_1 ?= interface_variable_2;

Bedeutung

Zuweisungsversuch einer Variable, die auf einem →Interface basiert, mit Hilfe des Operators "?=" auf eine andere Variable, die auf einem →Interface basiert, ob das Interface implementiert ist
Mehr Informationen über Variablen, die auf einem Interface basieren, finden Sie unter "Deklaration von Variablen, die auf einem Interface basieren".

Falls es sich bei der referenzierten Instanz um einen →Funktionsbaustein handelt, der das Interface implementiert, ist das Ergebnis eine gültige Referenz auf diese Instanz. Andernfalls ist das Ergebnis NULL.

Abweichung zur IEC-Norm

In logi.CAD 3 werden Zuweisungsversuche für →Referenzen (mit REF_TO) nicht unterstützt.


Beispiel
INTERFACE IF1
END_INTERFACE
 
INTERFACE IF2
END_INTERFACE
 
INTERFACE IF3
END_INTERFACE
 
FUNCTION_BLOCK FB1 IMPLEMENTS IF1, IF2
VAR
Var1 : INT;
END_VAR
END_FUNCTION_BLOCK
 
FUNCTION_BLOCK FB2
VAR
iFB1 : FB1;
IF1Var1, IF1Var2 : IF1;
IF2Var : IF2;
IF3Var : IF3;
END_VAR
 
(* Zuweisungen *)
IF1Var1 := iFB1; // korrekte Zuweisung: Die Variable IF1Var1 basiert auf dem Interface IF1, der Funktionsbaustein-Typ von iFB1 implementiert das gleiche Interface.
// IF1Var1 enthält somit eine gültige Referenz.
IF1Var2 := IF1Var1; // korrekte Zuweisung: Die Variable IF1Var2 basiert auf dem Interface IF1, die Variable IF1Var1 basiert auf dem gleichen Interface.
// IF1Var2 enthält somit eine gültige Referenz.
 
(* Zuweisungsversuche *)
IF1Var2 ?= IF1Var1; // Gültige Referenz: Die Variable basieren auf dem gleichen Interface.
// Entspricht dieser Zuweisung: IF1Var2 := iFB1;
IF2Var ?= IF1Var1; // Gültige Referenz: Die Variable IF1Var1 basiert auf dem Interface IF1, die Variable IF2Var basiert auf dem Interface IF2.
// Beide Interfaces werden von FB1 implementiert und IF1Var1 hat aufgrund der 1. Zuweisung den Wert der Instanz iFB1 (diese ist vom Typ FB1).
IF1Var2 ?= IF2Var; // Gültige Referenz: Die Variable IF2Var basiert auf dem Interface IF2, die Variable IF1Var2 basiert auf dem Interface IF1.
// Beide Interfaces werden von FB1 implementiert und IF2Var hat aufgrund des vorhergehenden Zuweisungsversuch den Wert der Instanz iFB1 (diese ist vom Typ FB1).
IF3Var ?= IF1Var1; // IF1Var1 hat aufgrund der 1. Zuweisung den Wert der Instanz iFB1 (diese ist vom Typ FB1). Die Variable IF3Var basiert auf dem Interface IF3. FB1 implementiert das Interface IF3 NICHT.
// Ergebnis des Zuweisungsversuch: IF3Var ist NULL.
END_FUNCTION_BLOCK