# Datentypen

Es gibt zwei Typen von Variablen.

- Basisvariablen
  Eine Variable, die einen Wert speichert.
- Variablen des Benutzerdatentyps
  Eine Variable, die mehrfache Werte speichern kann (mehrfache Variablen, die als einzelne Variable behandelt werden).

Hinweis:

- Informationen zu Operationen, bei denen der in der Variable gespeicherte Wert (Eingangswert) außerhalb des Eingabebereiches (Minimal- und Maximalwert) liegt, erhalten Sie nachstehend.
  Operation: Wenn Eingabewert außerhalb des Eingabebereichs liegt

## Basisvariablen

Die folgende Liste enthält eine Übersicht der Typen von Basisvariablen.

Datentyp | Beschreibung
BOOL | Diese Variable speichern entweder 0 oder 1.
SINT, USINT, INT, UINT, DINT, UDINT, LINT, ULINT, BYTE | Diese Variablen speichern Ganzzahlwerte. Die Verarbeitung ist schneller im Vergleich zu Gleitkommavariablen.
WORD, DWORD, LWORD | Diese Variablen speichern Worttypwerte.
STRING, WSTRING | Diese Variablen speichern Textzeichenfolgen.
REAL, LREAL | Diese Variablen speichern Gleitkommawerte. REAL-Variablen können größere Werte (wie etwa Kalkulationen und Konstanten) als Variablen vom Typ Ganzzahl speichern.
TIME, DATE, TIME_OF_DAY, DATE_AND_TIME | Diese Variablen speichern Uhrzeit- und Datumswerte.

### SINT, USINT, INT, UINT, DINT, UDINT, LINT, ULINT, BYTE

Datentyp | Mit Vorzeichen | Datenlänge | Datenbereich
SINT | 2er-Komplement | 8 Bit | -128 - 127
USINT | - | 8 Bit | 0 - 255
INT | 2er-Komplement | 16 Bit | -32768 - 32767
UINT | - | 16 Bit | 0 - 65535
DINT | 2er-Komplement | 32 bit | -2147483648 - 2147483647
UDINT | - | 32 bit | 0 - 4.294.967.295
LINT | 2er-Komplement | 64 Bit | -9.223.372.036.854.775.808 - 9.223.372.036.854.775.807
ULINT | - | 64 Bit | 0 - 18.446.744.073.709.551.615
BYTE | - | 8 Bit | 0 - 255

### WORD, DWORD, LWORD

Datentyp | Datenlänge | Datenbereich
WORD | 16 Bit | 0 - 65.535
DWORD | 32 bit | 0 - 4.294.967.295
LWORD | 64 Bit | 0 - 18.446.744.073.709.551.615

### STRING, WSTRING

Datentyp | Beschreibung
STRING | Speichert Texte bis zu 512 Bytes. Bei Verwendung einer externen Variable wird die Zeichenfolgencodierung durch die Eigenschaft [Zeichenfolgencodierung] der Variable definiert. Verfügbare Zeichenfolgenkodierungswerte sind: UTF8, UTF16, ShiftJIS, Code Page850, GB2312, BIG5, KSC5601, CodePage1251, CodePage874 und CodePage1252. Hinweis: Sie können die Zeichenfolgenkodierung auch in den Geräteeigenschaften konfigurieren. Die Einstellung der Variableneigenschaften hat Vorrang gegenüber den Geräteeigenschaften. Wählen Sie in der Eigenschaft [Zeichenfolgencodierung] der Variable die Option [Geräteeinstellungen - Typ], um die Zeichenfolgencodierung des Geräts anzuwenden. Die Eigenschaft [Zeichenfolgencodierung] wird nur angezeigt, wenn der Treiber die Zeichenfolgencodierung unterstützt.
WSTRING | Speichert Wörter bis zu 512 Bytes in Doppel-Byte-Texten. Der Datentyp WSTRING kann nur mit externen Variablen verwendet werden. Die Zeichenfolgencodierung ist auf UTF16 festgelegt. Die Einstellung [Zeichenfolgencodierung] kann in den Variableneigenschaften nicht geändert werden, und die Kodierung in den Geräteeigenschaften wird ignoriert.

Hinweis:

- Sie können die Anzahl der Bytes oder Wörter, die in der Variable gespeichert werden können, in der Eigenschaft [Anzahl Bytes/Wörter] festlegen.

- Das Ende der Textzeichenfolge mit NULL (0x00) oder [Anzahl Bytes] wird erkannt.

- Wenn Sie für eine ausgewählte Variable oder einen ausgewählten Treiber einen Text verwenden, dessen Zeichencode von der [Zeichenfolgencodierung] nicht umgewandelt werden kann, wird das Ende der Zeichenfolge am Zeichencode erkannt.

- Die Beziehung der Hoch-/Tief-Reihenfolge für Wortdaten hängt vom [Zeichenfolge-Modus] im gewählten Treiber ab.

### REAL, LREAL

Datentyp | Datenlänge | Datenbereich
REAL | 32 bit | +/-3.402823E38 ... +/-1.1754944E-38
LREAL | 64 Bit | +/-4.19E-307 ... +/-1.67E308

Hinweis:

- Die Datenpräzision von REAL-Variablen ist auf sieben Stellen beschränkt. Wenn die Datenpräzision erforderlich ist (wie bei Vergleichsoperationen), sollten Sie Ganzzahlvariablen verwenden.
  Beispiele
  Beispiel 1: Der Wert 1.2345678 wird als ungefährer Wert ausgegeben, da die achte Ziffer weggelassen wird (nach 1.234567).
  Beispiel 2: Der in einer REAL-Variable gespeicherte Wert 0.1 könnte als 0.1000000014901161 ausgegeben werden.

- Bei der Verwendung externer REAL-Variablen sollten Sie sicherstellen, dass die Einstellung "Doppelwortstruktur" im Dialogfeld "Gerätekonfiguration" den Einstellungen des Geräts entspricht. Wenn die Einstellungen nicht übereinstimmen, werden die Werte der REAL-Variablen nicht ordnungsgemäß angezeigt.

- Verwenden Sie den Punkt (.) als Dezimalpunkt für den Variablenwert. Das Komma (,) wird als Dezimaltrennzeichen nicht unterstützt.
  Auch wenn in der Bildschirmbearbeitungs-Software oder im Anzeigegerät ein Komma (,) als Dezimalpunkt des Variablenwerts verwendet wird, führt dies zu unerwarteten Ergebnissen, z.B. dass ein Fehler angezeigt oder das Komma ignoriert wird usw.

### TIME, DATE, TIME_OF_DAY, DATE_AND_TIME

Datentyp | Beschreibung | Datenbereich
TIME | Speichert die abgelaufene Zeit in Tagen und Zeitangaben. | - 24 d 20 h 31 m 23 s 648 ms ... 24 d 20 h 31 m 23 s 647 ms Hinweis: Wenn ein negativer Wert für die Eigenschaften [Initialwert] und [Eingabebereich] in einer TIME-Variablen festgelegt ist, wird das negative Vorzeichen für jede Zeiteinheit angezeigt. (Beispiel: -24d -20:-31:-23.-648)
DATE | Speichert das Datum. | Bei Verwendung der Open Box SP5000-Serie (Modell für Windows 10 IoT Enterprise), IPC-Serie oder PC/AT 1970/01/01 ... 2106/02/07 Andere Modelle als oben aufgelistet 1970/01/01 ... 2038/01/19
TIME_OF_DAY | Speichert die Zeit. | 00:00:00 ... 23:59:59
DATE_AND_TIME | Kombiniert DATE und TIME_OF_DAY. | Bei Verwendung der Open Box SP5000-Serie (Modell für Windows 10 IoT Enterprise), IPC-Serie oder PC/AT 1970/01/01 00:00:00 UTC ... 2106/02/07 06:28:15 UTC Andere Modelle als oben aufgelistet 1970/01/01 00:00:00 UTC ... 2038/01/19 03:14:07 UTC

Hinweis:

- Bei Verwendung dieser Variablen, müssen die Datentypen des externen Gerätes mit dem Wert der gespeicherten Daten übereinstimmen.
  Wenn Sie einen Wert eingegeben haben, der nicht im Bereich der externen Geräteadresse liegt, wird der eingegebene Wert auf dem Bildschirm angezeigt, aber nicht in der externen Geräteadresse eingerichtet.

- Wenn Sie Variablen mit unterschiedlichen Datentypen zuweisen, wird manchmal der Wert der Quellvariable mit einem allgemeinen Ergebniswert überschrieben.

  Beispiel – Konvertieren einer Realvariable in eine Ganzzahlvariable: Richten Sie die REAL-Variable mit 123.4 ein, schreiben Sie den Wert dann in eine INT- Variable, und das Ergebnis wird mit 123 ausgegeben. Der Wert der REAL-Variable wird ebenfalls mit 123 aktualisiert.

- Wenn ein Ganzzahlwert von einem externen Gerät in die Variable DATE_AND_TIME eingesetzt wird, wird der gespeicherte Wert entsprechend der Zeitzone des Anzeigegeräts angepasst. Daher unterscheiden sich das Datum und die Uhrzeit, die von einer Datums-/Zeitanzeige angezeigt werden, bei der Eingabe von Ganzzahlwerten je nach Zeitzone.

Open Box SP5000-Serie (Modell für Windows 10 IoT Enterprise), IPC-Serie oder PC/AT

Ganzzahlwerteingabe über externes Gerät | UTC+0 (Bereich: 1970/01/01 00:00:00 ... 2106/02/07 06:28:15) | UTC+9 (Bereich: 1970/01/01 09:00:00 ... 2106/02/07 15:28:15)
0 | 1970/01/01 00:00:00 | 2106/02/07 06:28:16
1 | 1970/01/01 00:00:01 | 2106/02/07 06:28:17
: | : | :
32399 | 1970/01/01 08:59:59 | 2106/02/07 15:28:15
32400 | 1970/01/01 09:00:00 | 1970/01/01 09:00:00
: | : | :
4294967295 | 2106/02/07 06:28:15 | 2106/02/07 06:28:15

Andere Modelle als oben aufgelistet

Ganzzahlwerteingabe über externes Gerät | UTC+0 (Bereich: 1970/01/01 00:00:00 ... 2038/01/19 03:14:07) | UTC+9 (Bereich: 1970/01/01 09:00:00 ... 2038/01/19 12:14:07)
0 | 1970/01/01 00:00:00 | 2038/01/19 03:14:08
1 | 1970/01/01 00:00:01 | 2038/01/19 03:14:09
: | : | :
32399 | 1970/01/01 08:59:59 | 2038/01/19 12:14:07
32400 | 1970/01/01 09:00:00 | 1970/01/01 09:00:00
: | : | :
2147483647 | 2038/01/19 03:14:07 | 2038/01/19 03:14:07

## Variablen des Benutzerdatentyps

Im Folgenden werden Variablen vom Typ Benutzerdaten vorgestellt.

- Feldvariablen
  Verwenden Sie eine einzelne Variable, um mehrere Variablen des gleichen Datentyps zu bearbeiten.
- Strukturvariablen
  Verwenden Sie eine einzelne Variable, um mehrere Variablen unterschiedlicher Datentypen zu bearbeiten.

Hinweis: Feld- und Strukturhalter werden ebenfalls zu den Variablen gezählt.

### Feldvariablen

Ein Feld umfasst eine Gruppe von Variablen desselben Datentyps. Jede Variable in einem Feld wird als Element bezeichnet.

Um zu verstehen, wie eine Feldvariable funktioniert, können Sie sich eine Variable als Schachtel vorstellen. Die im folgenden Diagramm dargestellte Variable "Nummer" ist eine einzelne Schachtel, die einen Wert enthält.

Stellen Sie sich ein Feld wie eine Reihe von Schachteln vor, die jeweils mit einer Nummer versehen wurden. Im folgenden Diagramm enthält die Feldvariable "Nummer" die 5 Elemente 0 bis 4. In jeder der 5 Schachteln sind Variablenwerte gespeichert.

Um die einzelnen Variablen in einem Feld anzugeben, geben Sie den Variablennamen, gefolgt von der Elementnummer, in eckigen Klammern [ ] an.

Beispiel: Feld mit 5 Elementen

Die Elementnummer beginnt normalerweise mit 0, kann aber auch mit einem positiven oder negativen Wert beginnen.

Beispiel: Feld beginnend mit Elementnummer -1 mit 5 Elementen

Ein mehrdimensionales Feld ist ein Feld, das andere Felder enthält. Ein Feld, das zwei DINT-Felder enthält, ist zum Beispiel ein zweidimensionales Feld.

#### Anzahl der Elemente in den einzelnen Dimensionen und Dimensionseinstellungen

Legen Sie im Fenster [Projekt-Explorer] unter [Variablen] → [Alle Benutzerdatentypen] → [Felder] in der Spalte [Dimension] sowohl die Feld-Dimension als auch die Anzahl der Elemente fest.

Im Folgenden werden die Schritte zur Gestaltung eines Felds beschrieben.

Vorgehensweise zur Konzeption (Variablen, Feld, Struktur)

Bei einem 1-dimensionalen Feld sind nur die Elemente des Feld anzugeben.

Beispiel: Für ein 1-dimensionales Feld mit der Anzahl der Elemente = 3, geben Sie „3“ ein.

Bei einem mehrdimensionalen Feld geben Sie im Feld [Dimension] die Anzahl der Elemente in den einzelnen Dimensionen an, getrennt durch ein Komma (,).

Beispiel: Für ein zweidimensionales Feld, bei dem die erste Dimension 3 Elemente (Startnummer = 0) und die zweite Dimension 4 Elemente (Startnummer = 0) hat, geben Sie „3,4“ ein.

Diese Feld-Definition wird verwendet, um die unten abgebildete Feldvariable Var1 zu erstellen.

Hinweis: Um die Startnummer eines Elements auf etwas anderes als 0 zu einzustellen, geben Sie anstelle der Anzahl der Elemente die Anfangs- und die letzte Elementnummer ein, die durch zwei Punkte (..) getrennt sind, und das Feld [Anzahl Elemente] berechnet die Gesamtzahl der Elemente.

Beispiel: Um ein zweidimensionales Feld einzurichten, bei dem die erste Dimension 3 Elemente hat, beginnend mit Element 0, und die zweite Dimension 4 Elemente hat, beginnend mit Element 3, geben Sie „3,3..6“ ein.

Nach der Eingabe wird „3..6“ in 4 Elemente umgewandelt, und die Array-Dimension beginnt bei Element Nummer 3.

Mit diesem Feld wird die unten abgebildete Feldvariable Var1 erstellt.

#### Indirekte Feldadressierung

Die indirekte Adressierung ist der schnellste Weg, um auf einen Variablenwert innerhalb eines Bereichs aufeinanderfolgender Werte in einem Feld zuzugreifen, den Speicherverbrauch zu minimieren und den Wert innerhalb von Millisekunden zu aktualisieren.

Zur indirekten Adressierung von Feldern geben Sie die Feld-Elementnummer über einen Variablenwert oder den Eigenschaftswert eines Objekts an, um das Element eines Felds dynamisch anzugeben.

- Indirekte Angabe durch einen Variablenwert:
  Geben Sie „(Variablenname).Value“ in die Klammern [] ein, die die Feld-Elementnummer angeben.
  Beispiel: Var2[Var1.Value].Value: Dies ist der Wert der Feldvariable Var2, deren Elemente indirekt über den Wert der Variable Var1angegeben wird.
- Indirekte Angabe über den Eigenschaftswert eines Objekts:
  Geben Sie „$GraphicalObject“ gefolgt von „(Objektname).(Eigenschaftsname)“ in den Klammern [] ein, die die Feldelementnummer angeben.
  Beispiel: Var2[$GraphicalObject.NumericDisplay1.CurrentValue].Value: Dies ist der Wert der Feldvariable Var2, deren Feldindexwert indirekt über den aktuellen Wert eines Objekts Numerische Anzeige, Numeric Display1, angegeben wird.

Hinweis:

Bei der indirekten Angabe einer Elementnummer mit dem Eigenschaftswert eines Objekts geben Sie „$GraphicalObject“ vor dem Objektnamen ein.
Je nach Eingabehilfefunktion können Sie nach der Eingabe von „$“ in das Eingabe- oder Quelleigenschaftsfeld aus der Liste der Optionen„$GraphicalObject“ auswählen, um die Zeichenfolge einfach einzugeben.

Die indirekte Feldadressierung unterstützt Folgendes:

- Sie kann im Konverter [Ausdruck] eingesetzt werden.
  (Beispiel: Array11[DINT1.value+2], Array21[Int2[Int3[Int1+1]]], Array31[Int1*4-(Int2+Int4/4)])

- Für alle Variablendatentypen werden maximal 5 Verschachtelungsebenen unterstützt.
  (Beispiel: Array11[Array22[DINT1.value],DINT02.value])

### Strukturvariablen

Eine Struktur ist eine Variable, die mehrere andere Variablen enthält. Jede Variable in einer Struktur wird als Element bezeichnet. Die Elemente können einen beliebigen Datentyp aufweisen.

Sie können eine verschachtelte Struktur erstellen, indem Sie eine weitere Struktur oder ein Feld als Element hinzufügen.

Stellen Sie sich eine Struktur als eine Reihe von Schachteln vor, von denen jede mit einem Element verknüpft ist.

Im folgenden Diagramm enthält die Strukturvariable DATA 3 Elemente. In jeder der 3 Schachteln sind Variablenwerte gespeichert.

## Operation: Wenn Eingabewert außerhalb des Eingabebereichs liegt

Wenn der in der Variable zu speichernde Wert außerhalb des Bereiches (Minimal- und Maximalwert) liegt, wird der Wert folgendermaßen verarbeitet.

- Wenn der Wert im externen Gerät überstiegen wird
- Wenn der Wert in einer Operation [Loop]durchWertänderung überstiegen wird
- Wenn der Wert durch Wertänderung [Stop] überschritten wird
- Wenn der Wert in Operationen wie (Setzen), indirekt festgelegter Wert oder Ausdruck-Konverter durch eine Wertänderung [Set] überschritten wird
- Wenn der Wert durch ein Rezept überstiegen wird

Hinweis:

- Weitere Informationen über die OperationenWertänderung erhalten Sie unter Wertänderung.

### Wenn der Wert im externen Gerät überstiegen wird

Datentyp | Beschreibung
STRING, WSTRING | Speichert das passende Zeichen.
Andere als oben aufgelistet | Der Wert des Teils, der den Eingabebereich überschreitet, wird vom unteren Bereich des Eingabebereiches ausgehend neu gezählt und gespeichert. Beispiel) 8-Bit-Variable ohne Vorzeichen (Wertbereich: 0...255) Beispiel 1: Wenn Sie versuchen, 256 zu speichern, wird in der Variable 0 gespeichert. (Da die Obergrenze durch 1 überschritten wurde, wird der untere Grenzwert von 0 gespeichert.) Beispiel 2: Wenn Sie versuchen, 257 zu speichern, wird in der Variable 1 gespeichert. (Da die Obergrenze durch 2 überschritten wurde, wird der zweite Grenzwert von unten ausgehend mit 1 gespeichert.)

### Wenn der Wert in einer Operation [Loop]durchWertänderung überstiegen wird

Der Wert des Teils, der den Eingabebereich überschreitet, wird vom unteren Bereich des Eingabebereiches ausgehend neu gezählt und gespeichert.

(Beispiel): 8-Bit-Variable ohne Vorzeichen (Wertebereich: 0...255)

Beispiel 1: Wenn Sie versuchen, 256 zu speichern, wird in der Variable 0 gespeichert. (Da die Obergrenze durch 1 überschritten wurde, wird der untere Grenzwert von 0 gespeichert.)

Beispiel 2: Wenn Sie versuchen, 257 zu speichern, wird in der Variable 1 gespeichert. (Da die Obergrenze durch 2 überschritten wurde, wird der zweite Grenzwert von unten ausgehend mit 1 gespeichert.)

### Wenn der Wert durch Wertänderung [Stop] überschritten wird

Datentyp | Beschreibung
STRING, WSTRING | Speichert das passende Zeichen.
Andere als oben aufgelistet | Im Folgenden wird auf- oder abgerundet. BOOL 1/0 SINT 127/-128 USINT, BYTE 255/0 INT 32767/-32768 UINT, WORD 65535/0 DINT 2147483647/-2147483648 UDINT, DWORD 4294967295/0 LINT 9223372036854775807/-9223372036854775808 ULINT, LWORD 18446744073709551615/0 REAL, LREAL Fällt unterschiedlich aus; je nach Einstellungen der Eigenschaft. TIME 2147483647/-2147483648 DATE/TIME_OF_DAY, DATE_AND_TIME 4294967295/0

### Wenn der Wert in Operationen wie (Setzen), indirekt festgelegter Wert oder Ausdruck-Konverter durch eine Wertänderung [Set] überschritten wird

Der Wert wird nicht gespeichert.

### Wenn der Wert durch ein Rezept überstiegen wird

Datentyp | Beschreibung
BOOL, REAL, LREAL | Der Wert wird nicht gespeichert.
LINT, ULINT, LWORD | Im Folgenden wird auf- oder abgerundet. LINT 9223372036854775807/-9223372036854775808 ULINT, LWORD 18446744073709551615/0
STRING, WSTRING | Speichert das passende Zeichen.
Andere als oben aufgelistet | Der Wert des Teils, der den Eingabebereich überschreitet, wird vom unteren Bereich des Eingabebereiches ausgehend neu gezählt und gespeichert. (Beispiel): 8-Bit-Variable ohne Vorzeichen (Wertebereich: 0...255) Beispiel 1: Wenn Sie versuchen, 256 zu speichern, wird in der Variable 0 gespeichert. (Da die Obergrenze durch 1 überschritten wurde, wird der untere Grenzwert von 0 gespeichert.) Beispiel 2: Wenn Sie versuchen, 257 zu speichern, wird in der Variable 1 gespeichert. (Da die Obergrenze durch 2 überschritten wurde, wird der zweite Grenzwert von unten ausgehend mit 1 gespeichert.)