STRING
Der Datentyp STRING wird als Latin-1 oder UTF-8 interpretiert.
Im Folgenden werden gemeinsame Eigenschaften sowie Unterschiede beschrieben.
Eine Variable des Datentyps STRING kann eine beliebige Zeichenkette aufnehmen. Die Größenangabe zur Speicherplatzreservierung bei der Deklaration bezieht sich auf die Anzahl an Bytes und steht in runden oder eckigen Klammern. Ist keine Größe angegeben, werden standardmäßig 80 Bytes reserviert. Hinzu kommt ein Byte für die abschließende Null.
TwinCAT begrenzt die String-Länge grundsätzlich nicht, allerdings verarbeiten einige String-Funktionen nur Längen von 1-255. Wenn eine Variable mit einem Literal initialisiert wird, das zu lang für den Datentyp der Variablen ist, wird das Literal von hinten her entsprechend abgeschnitten.
Wenn eine Variable des Datentyps STRING durch einen Reset der Applikation neu initialisiert wird, wird der nach dem abschließenden Nullzeichen des Initialwerts vorhandene Inhalt des (alten) Strings nicht überschrieben. Dies gilt sowohl für die Initialisierung mit dem Initialisierungswert als auch für die Initialisierung mit dem Standardinitialisierungswert 0.
Latin-1
Die Latin-1-Kodierung umfasst einen eingeschränkten Zeichensatz, welcher aber auch alle ASCII-Zeichen beinhaltet.
Bei einer Latin-1-Kodierung ist der für eine STRING-Variable benötigte Speicherplatz immer 1 Byte pro Zeichen plus ein zusätzliches Byte. Das ergibt beispielsweise 81 Bytes im Falle einer standardmäßigen STRING(80)-Deklaration. |
Beispiel: String-Deklaration mit Speicherplatzreservierung 46+1 Bytes für 46 Zeichen.
sVar : STRING(46) := 'This is a string with memory for 46 characters.';
UTF-8
Die UTF-8-Kodierung umfasst den größtmöglichen Zeichensatz.
Die UTF-8-Kodierung von Unicode-Zeichen ist im Falle von ASCII-Zeichen identisch mit der Latin-1-Kodierung. Alle darüberhinausgehenden Zeichen unterscheiden sich im Speicherabbild.
Ergänzen Sie in diesem Fall die Deklaration einer Variablen um das Pragma {attribute 'TcEncoding':='UTF-8'}. Dadurch wird auch der Inhalt der Variablen in UTF-8-Kodierung im Monitoring dargestellt. Weitere Details finden Sie in der Beschreibung des Attributs 'TcEncoding'.
Nutzen Sie nur String verarbeitende Funktionen, die speziell für UTF-8 kodierte Strings freigegeben sind. Siehe UTF8Len() und weitere.
Bei einer UTF-8-Kodierung kann ein Zeichen bis zu 4 Byte lang sein. Die bei der Deklaration angegebene maximale Länge des Strings gibt aber immer die Anzahl der Bytes an, die für den STRING reserviert werden. Somit gibt es keine 1:1 Beziehung mehr zwischen Zeichenanzahl und benötigtem Speicherplatz. |
Beispiel: String-Deklaration mit Speicherplatzreservierung 46+1 Bytes für bis zu 46 Zeichen. Die Anzahl der möglichen Zeichen ist abhängig von den Zeichen selbst.
{attribute 'TcEncoding':='UTF-8'}
sVar : STRING(46) := 'This is a string with memory for up to 46 characters.';
Siehe auch: