Zuweisungen in ST

Syntax
name_1 := name_2;
name_1 := literal; 
reference_variable_1 := REF(name) | NULL;
reference_variable_1 := reference_variable_2;  
Bedeutung

→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 konvertiert werden 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- oder Strukturdatentyp handelt, müssen die Ausdrücke auf dem gleichen Datentyp basieren.

Zuweisungen sind grundsätzlich innerhalb der Deklaration eines →Programms, eines →Funktionsbausteins oder einer →Funktion möglich. Die Zuweisung eines Ergebniswerts ist nur innerhalb einer Funktion 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 deklarierte Variable (z.B. eine interne Variable, eine Ausgangsvariable einer Funktionsbaustein-Instanz, eine STRING-Variable), ein Array-Element oder ein Element eines strukturierten Datentyps
    Beispiele: var2, MyFunctionBlock.OUT, var3[1] oder MyDataType.Elem1
  • 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();
    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:

    CodeBedeutung
    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 x2 mit dem Wert von MyFunction.
    x3:=MyFunction(EN := myBoolVariable1);
    x4:=MyFunction(EN := myBoolVariable2); 
    Falls myBoolVariable1 := FALSE, wird MyFunction nicht aufgerufen und es erfolgt keine Zuweisung auf x3.
    Falls
     myBoolVariable2 := TRUE, erfolgt die Zuweisung auf
    x4 mit dem Wert von MyFunction.
  • ein boolesches →Literal

    Entsprechungen für "TRUE"Entsprechungen für "FALSE"
    BOOL#TRUEBOOL#FALSE
    BOOL#1BOOL#0
    TRUEFALSE 
    10

  • ein →Bitfolge-Literal

    BeschreibungBeispiele
    Ganzzahl0, 123_4, +986
    Zur Basis 2 (Binär-Literal)2#1111_1111 (255 dezimal), 2#1110_0000 (224 dezimal)
    Zur Basis 8 (Oktal-Literal)8#377 (255 dezimal), 8#340 (224 dezimal)
    Zur Basis 16 (Hexadezimal-Literal)16#FF oder 16#ff (255 dezimal), 16#E0 oder 16#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.

  • ein →Integer-Literal

    BeschreibungBeispiele
    Ganzzahl-12, 0, 123_4, +986
    Zur Basis 2 (Binär-Literal)2#1111_1111 (255 dezimal), 2#1110_0000 (224 dezimal)
    Zur Basis 8 (Oktal-Literal)8#377 (255 dezimal), 8#340 (224 dezimal)
    Zur Basis 16 (Hexadezimal-Literal)16#FF oder 16#ff (255 dezimal), 16#E0 oder 16#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) 
    INT#-12, INT#16#FF (255 dezimal)
  • ein →Real-Literal vom Datentyp REAL oder LREAL
    BeschreibungBeispiele
    Real-Literal0, 0.0, 0.4560, 3.14159_26
    Real-Literal mit Exponenten

    -1.34E-12, -1.34e-12
    1.0E+6, 1.0e+6, 1E+6
    1.234E6, 1.234e6

    obige Möglichkeiten als Literal mit Typangabe REAL oder LREAL
    (sofern der Wert im Wertbereich des entsprechenden Datentyps liegt) 
    REAL#0.0, REAL#1.0E+6
  • ein →Zeitliteral

    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.

    BeschreibungBeispiele
    Zeitdauer-Literale ohne Unterstriche
    kurzes PräfixT#14ms, T#14.7s, T#14.7m, T#14.7h, T#14.7d, T#14h12m, t#5d14h12m18s3.5ms
    langes PräfixTIME#14ms, time#14h12m
    Zeitdauer-Literale mit Unterstrichen
    kurzes PräfixT#14h_12m, t#5d_14h_12m_18s_3.5ms
    langes PräfixTIME#14h_12m, time#5d_14h_12m_18s_3.5ms

    Beachten Sie, dass Ihr eingesetztes →Zielsystem die Verwendung von Zeitdauer-Literalen in logi.CAD 3 beeinflussen kann (siehe "Zielsystem-spezifische Eigenschaften und Einschränkungen").

    Bei den Literalen für Tageszeit und für Datum und Zeit sind die Sekunden-Abschnitte (nach dem . eingegeben) optional.

    BeschreibungBeispiele
    Literale für Datum
    kurzes PräfixD#1984-06-25
    langes PräfixDATE#1984-06-25
    Literale für Datum und Zeit
    kurzes PräfixDT#1984-06-25-15:36:55.360_227_400
    langes PräfixDATE_AND_TIME#1984-06-25-15:36:55.360227400
    Literale für Tageszeit
    kurzes PräfixTOD#15:36:55.36
    langes PräfixTIME_OF_DAY#15:36:55.36

    Beachten Sie, dass Ihr eingesetztes →Zielsystem die Verwendung von diesen Literalen in logi.CAD 3 beeinflussen kann (siehe "Zielsystem-spezifische Eigenschaften und Einschränkungen").

  • ein →Zeichenfolge-Literal

    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:

    BeschreibungBeispiele
    STRING-Literal 'OK', 'ABCDEF' 
    STRING-Literal mit TypangabeSTRING#'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 des ANSI-Zeichensatzes finden Sie unter http://ascii-table.com/ansi-codes.php):

    DezimalwertHexadezimal-ZifferEinzugebenSonderzeichen
    12880$80
    163A3$A3
    £
    169A9$A9
    ©
    174AE$AE
    ®
    177B1$B1
    ±
    178B2$B2² (hochgestellte Ziffer "2")
    179B3$B3³ (hochgestellte Ziffer "3")
    188BC $BC 
    ¼
    189BD$BD
    ½
    190BE$BE
    ¾

    196

    C4$C4Ä
    214D6$D6Ö
    220DC$DCÜ
    223DF$DFß
    228E4$E4
    ä
    246F6$F6ö
    252FC$FCü

    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 terminiert.
    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:

    AngabeBedeutung
    ''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:

    AngabeBedeutung
    $'Zeichenfolge mit einfachem Anführungszeichen '
    $$Zeichenfolge mit Dollarzeichen $
    $L oder $lZeichenfolge mit Zeilenvorschub ("Line feed")
    $N oder $nZeichenfolge mit neuer Zeile ("Newline")
    $P oder $pZeichenfolge mit Seitenvorschub ("Form feed (page)")
    $R oder $rZeichenfolge mit Wagenrücklauf ("Carriage return")
    $T oder $tZeichenfolge mit Tabulator
  • ein Ausdruck (aus Operanden in ST und Operatoren in ST zusammengesetzt)
    Ausdrücke ohne einen konkreten Datentyp werden typisiert (siehe "Typisierung von Ausdrücken").
  • sofern die Zuweisung auf eine deklarierte →Referenz-Variable erfolgt: REF(name) oder NULL oder eine andere Referenz-Variable vom gleichen Datentyp
    Details: siehe unter "Deklaration von Referenz-Variablen (inkl. Zuweisungen darauf) "
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.

Beispiel
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 *)