→Zuweisung auf →Variablen oder →Funktionsbaustein-Instanzen oder Zuweisung eines Ergebniswerts Eine Zuweisung ist zulässig, sofern die Ausdrücke auf den beiden Seiten des Zuweisungsoperators ":=" auf dem gleichen Datentyp oder auf Datentypen basieren, die laut der IEC-Norm implizit konvertiertwerden können – sofern es sich bei diesen Datentypen um einen abgeleiteten Datentyp oder eine elementaren Datentyp handelt. Falls es sich bei den Datentypen um einen Array-Datentyp handelt, müssen die Ausdrücke auf dem gleichen Datentyp basieren. Bei einem Strukturdatentyp müssen die Ausdrücke auf einem identischen Datentyp basieren (siehe unter "Zugriff auf strukturierten Datentyp und Strukturelemente").
Zuweisungen sind grundsätzlich innerhalb der Deklaration eines →Programms, eines →Funktionsbausteins. einer →Funktion oder einer →Methode möglich. Die Zuweisung eines Ergebniswerts ist nur innerhalb einer Funktion oder einer Methode möglich.
Der Ausdruck auf der rechten Seite des Zuweisungsoperators ":=" darf eines der folgenden Konstrukte sein (abhängig vom Ausdruck auf der linken Seite):
eine Funktionsbaustein-Instanz Falls Sie eine Funktionsbaustein-Instanz auf eine andere Funktionsbaustein-Instanz zuweisen, werden die Instanzdaten des Funktionsbausteins auf die andere Funktionsbaustein-Instanz zugewiesen.
ein Aufruf einer Funktion (z.B. MyFunction();) oder ein Aufruf einer Methode Falls der Aufruf mit einer Zuweisung auf den Eingang EN erfolgt, so gibt der Wert für EN den Ausschlag, ob der Aufruf und damit auch die Zuweisung ausgeführt wird. Hier die Erläuterung anhand von Beispielen:
Code
Bedeutung
x1:=MyFunction(EN := FALSE);
Da EN:= FALSE, wird MyFunction nicht aufgerufen und es erfolgt keine Zuweisung auf x1.
x2:=MyFunction(EN := TRUE);
Da EN := TRUE, erfolgt die Zuweisung auf x2mit dem Wert von MyFunction.
Falls myBoolVariable1:= FALSE, wird MyFunction nicht aufgerufen und es erfolgt keine Zuweisung auf x3. FallsmyBoolVariable2:= TRUE, erfolgt die Zuweisung auf x4mit dem Wert von MyFunction.
16#FF oder 16#ff (255 dezimal), 16#E0 oder16#e0 (224 dezimal)
obige Möglichkeiten (ohne Vorzeichen) als Literal mit Typangabe BYTE, WORD, DWORD oder LWORD (sofern der Wert im Wertbereich des entsprechenden Datentyps liegt)
WORD#986, WORD#16#FF (255 dezimal)
BOOL ist ein Bitfolge-Datentyp. Es sind jedoch nur bestimmte →Boolesche Literale möglich.
16#FF oder 16#ff (255 dezimal), 16#E0 oder16#e0 (224 dezimal)
obige Möglichkeiten als Literal mit Typangabe SINT, INT, DINT, LINT, USINT, UINT, UDINT, ULINT (sofern der Wert im Wertbereich des entsprechenden Datentyps liegt)
Sie müssen Daten für Zeitdauer, wie Tage (d), Stunden (h), Minuten (m), Sekunden (s) und Sekunden-Abschnitte (ms für Millisekunden, us für Mikrosekunden, ns für Nanosekunden) oder Kombinationen davon, in der Weise angeben, wie in der folgenden Tabelle gezeigt. Sie können die Zeitdauer-Einheiten durch Unterstrich-Zeichen trennen. Außerdem können Sie die Einheiten in Groß- oder Kleinbuchstaben eingeben, zum Beispiel s oder S für Sekunden.
Einzel-Byte-Zeichenfolgen bestehen aus keinem oder mehreren Zeichen, denen das einfache Anführungszeichen ' vorangestellt ist und die mit diesem Zeichen geschlossen werden. Doppel-Byte-Zeichenfolgen, die mit dem doppelten Anführungszeichen " eingeschlossen werden, werden hingegen in logi.CAD 3 für Zeichenfolge-Literal nicht unterstützt. Einzel-Byte-Zeichenfolgen sind:
Beschreibung
Beispiele
STRING-Literal
'OK', 'ABCDEF'
STRING-Literal mit Typangabe
STRING#'OK',STRING#'ABCDEF'
CHAR-Literal
'B', 'T'
CHAR-Literal mit Typangabe
CHAR#'B', CHAR#'T'
Kombinationen von 3 Zeichen, beginnend mit dem Dollar-Zeichen ($) und gefolgt von 2 Hexadezimal-Ziffern, werden in logi.CAD 3 als entsprechendes Zeichen des ANSI-C-Zeichensatzes interpretiert.
Auf diese Weise können Sie Sonderzeichen, wie z.B. Umlaute, für Einzel-Byte-Zeichenfolgen eingeben. Derzeit werden solche Sonderzeichen in logi.CAD 3 (z.B. in der Sicht Variablenwerte) jedoch so ausgegeben, wie sie eingegeben wurden. Hier eine Auswahl an Sonderzeichen (eine Liste von Sonderzeichen und der entsprechenden Hexadezimal-Ziffernfinden Sie unter https://www.ascii-code.com/):
Falls die Zeichenkombination '$00' einem einzelnen Zeichen einer STRING-Variable zugewiesen wird, endet die Zeichenfolge der STRING-Variable an dieser Position. Solche Zeichenfolge werden auch in der Sicht Variablenwerte bei $00 beendet. In Zuweisungen wird jedoch die vollständige Zeichenfolge übernommen. So ist es möglich, dass die Sicht Variablenwerte einzelne Zeichen hinter $00 darstellt, falls Sie auf zugewiesenen Zeichen hinter $00 zugreifen.
Zusätzlich sind die folgenden Angaben für Einzel-Byte-Zeichenfolgen möglich:
Angabe
Bedeutung
''
leere Zeichenfolge
' '
Zeichenfolge mit Leerzeichen
'$''
Zeichenfolge mit einfachem Anführungszeichen '
'"'
Zeichenfolge mit doppeltem Anführungszeichen "
Zusätzlich sind die folgenden Angaben für Zwei-Zeichen-Kombinationen in Einzel-Byte-Zeichenfolgen möglich:
Angabe
Bedeutung
$'
Zeichenfolge mit einfachem Anführungszeichen '
$$
Zeichenfolge mit Dollarzeichen $
$L oder $l
Zeichenfolge mit Zeilenvorschub ("Line feed")
$N oder $n
Zeichenfolge mit neuer Zeile ("Newline")
$P oder $p
Zeichenfolge mit Seitenvorschub ("Form feed (page)")
$R oder $r
Zeichenfolge mit Wagenrücklauf ("Carriage return")
sofern die Zuweisung auf eine deklarierte Variable erfolgt, die auf einem →Interface basiert: eine Funktionsbaustein-Instanz, die das gleiche/abgeleitete Interface implementiert, eine andere Variable basierend auf dem gleichen/abgeleiteten Interface oder NULL Details: siehe unter "Deklaration von Variablen, die auf einem Interface basieren"
Beispiel
PROGRAM TestAssignments
VAR
var1, var2, var3, var5, var7, var8 : INT;
var4 : BOOL;
var6 : TIME;
Inst1 : MyFB1;
Inst2 : MyFB1;
END_VAR
var1 := var2; (* Die Variable 'var2' wird auf die Variable 'var1' zugewiesen. *)
Inst1 := Inst2; (* Die Instanz 'Inst2' wird auf die Instanz 'Inst1' zugewiesen. *)
var3 := Simple1(); (* Die Funktion 'MyFunction' wird aufgerufen und deren Wert auf die Variable 'var3' zugewiesen. *)
var4 := TRUE; (* Diese und die folgenden Zeilen zeigen die Zuweisung eines Literals auf eine Variable. *)
var5 := 12;
var6 := T#3ms;
var7 := 5 * 3; (* Diese und die folgende Zeile zeigen die Zuweisung eines Ausdrucks auf eine Variable. *)
var8 := var2 + 20;
END_PROGRAM
FUNCTION_BLOCK MyFB1
END_FUNCTION_BLOCK
Ergebniswert innerhalb einer Funktion zuweisen
Falls ein Ergebniswert innerhalb einer Funktion zugewiesen wird, müssen Sie den Datentyp des Ergebniswerts ebenfalls für die Funktion definieren. Gleiches gilt auch für eine Methode.
Beispiel für Funktion mit Ergebniswert
FUNCTION Simple1 : INT (* Start der Deklaration mit Angabe des Datentyps INT *)
VAR
var1 : INT;
END_VAR
Simple1 := 1; (* Ergebniswert "1" zuweisen *)
END_FUNCTION (* Ende der Deklaration *)