Formatspezifikation

Diese Formatspezifikation wird von dem Funktionsbaustein FB_FormatString und der Funktion F_FormatArgToStr verwendet. Während bei dem Funktionsbaustein die Formatspezifikation über eine String-Eingangsvariable übergeben wird, geschieht es bei der Funktion über die einzelnen Funktionsparameter.

Die Formatspezifikation, welche die erforderlichen und optionalen Parameterfelder beinhaltet, hat folgende Form:

%[ ] [ ] [ . ] Flags Width Precision Type

Die einfachste Formatspezifikation beinhaltet nur das Prozentzeichen und das Typfeld ( z.B. %s). Alle Zeichen, die dem Prozentzeichen folgen werden bis zu dem Typfeld als Parameterfelder ausgewertet. Zeichen vor dem Prozentzeichen und hinter dem Typfeld werden in den Ausgabestring kopiert. Beim Auftreten von nicht identifizierbaren oder unzulässigen Zeichen wird die Formatierung mit einem Fehler abgebrochen. Um das Prozentzeichen in dem Ausgabestring auszugeben benutzen Sie zwei nacheinander folgende Prozentzeichen (%%)

Type

Ein erforderliches Parameterfeld. Es ist ein ASCII-Zeichen (Character), welches bestimmt, ob das dazugehörige Argument als String, Integer oder Fließkommazahl interpretiert wird. Bitte beachten Sie dass einige der Typfeld-Parameter "case-sensitive" sind.

Typ

Argument

Ausgabe

b, B

BYTE, WORD, DWORD, *REAL, **SINT, **INT, **DINT, USINT, UINT, UDINT

Binärstring ( z.B.: '101010111000' ).

o, O

BYTE, WORD, DWORD, *REAL, **SINT, **INT, **DINT, USINT, UINT, UDINT

Oktalstring.

u, U

BYTE, WORD, DWORD, **SINT, **INT, **DINT, USINT, UINT, UDINT

Dezimalstring ohne Vorzeichen.

c, C

BYTE, USINT

Einzelner (ASCII) Byte-Character.

f, F

***REAL, LREAL

Fließkommazahl. Der String hat die Form: 

[ – ]dddd.dddd, (dddd sind Dezimalzahlen). Die Anzahl der Zahlen vor dem Dezimalpunkt hängt von dem Wert der Fließkommazahl ab. Die Anzahl der Zahlen hinter dem Dezimalpunkt hängt von der geforderten Präzision ab. Ein Vorzeichen erscheint nur bei negativen Werten. Bei einem unendlichen positiven Wert wird '#INF' und bei unendlichem negativen Wert: '-#INF' zurückgeliefert. Wenn die übergebene Variable einen unzulässigen Wert besitzt (NaN, Not-a-Number), dann wird '#QNAN' oder '-#QNAN' zurückgeliefert. Wenn die Länge des formatierten  Strings die maximal zulässige Länge des resultierenden Strings überschreitet, dann wird  '#OVF' oder '-#OVF' zurückgeliefert. 

d, D

BYTE, WORD, DWORD, SINT, INT, DINT, USINT, UINT, UDINT

Dezimalstring. Ein Vorzeichen erscheint nur bei negativen Werten.

s, S

STRING

Single-byte–character string. Zeichen werden ausgegeben bis zur abschließenden Null oder bis der Parameter precision erreicht wurde.

X

BYTE, WORD, DWORD, *REAL, **SINT, **INT, **DINT, USINT, UINT, UDINT

Hexadezimalstring. Für die Formatierung werden die (upper-case) Zeichen benutzt ('ABCDEF').

x

BYTE, WORD, DWORD, *REAL, **SINT, **INT, **DINT, USINT, UINT, UDINT

Hexadezimalstring. Für die Formatierung werden die (lower-case) Zeichen benutzt ('abcdef').

E

Not implemented. Reserved for future use!.

Fließkommazahlen in der wissenschaftlichen Notation.

e

Not implemented. Reserved for future use!.

Fließkommazahlen in der wissenschaftlichen Notation.

* Es wird der Speicherinhalt der REAL-Variable als Binärstring-, Oktalstring, Hexadezimalstring oder Dezimalstring ausgegeben.

** Es wird der Speicherinhalt der vorzeichenbehafteten Typen als  Binärstring-, Oktalstring, Hexadezimalstring oder Dezimalstring ausgegeben.

*** Die REAL-Variable wird in den LREAL-Typ konvertiert und dann formatiert.

Flags

Optionales Parameterfeld. Es können eins oder mehrere Flags in einer beliebigen Reihenfolge bestimmt werden. Diese Parameter bestimmen die Ausrichtung des formatierten Wertes,  Ausgabe von  Vorzeichen, Leerzeichen und der Binär-/Oktal-/Hex-Prefixe.

Flag

Bedeutung

Type

Standard

-

Linksausrichtungs-Flag. Linksausrichtung des formatierten Wertes innerhalb der vorgegebenen Breite im Parameter: Width.

Kann in Verbindung mit allen Typen benutzt werden.

Rechtsausrichtung.

+

Vorzeichen-Flag. Erzwingt die Ausgabe des positiven Vorzeichens bei vorzeichenbehafteten positiven Zahlen.

Nur in Verbindung mit e, E, f, F, d,D, sonst wird das Flag ignoriert.

Das negative Vorzeichen erscheint nur bei negativen Werten.

0

Null-Flag. Wenn dieses Flag dem Width-Parameter vorangestellt wurde, wird der resultierende String von Links mit Nullen aufgefüllt bis die gewünschte Breite erreicht wurde.

Nur in Verbindung mit e, E, f, F, s, S, sonst wird das Flag ignoriert.

Das Null-Flag wird auch ignoriert wenn zusätzlich auch das Linksausrichtungs-Flag (-) gesetzt wurde.

Kein Auffüllen mit Nullen.

Leerzeichen (' ')

Leerzeichen-Flag. Ein Leerzeichen wird einem positiven Wert vorangestellt

Nur in Verbindung mit e, E, f, F, d, D, sonst wird das Flag ignoriert.

Das Leerzeichen-Flag wird auch ignoriert wenn gleichzeitig auch das Vorzeichen-Flag (+) gesetzt wurde

Kein Leerzeichen.

#

 Prefix-Flag. Dem formatierten Wert wird ein "IEC" oder "Standard C" Prefix  vorangestellt.

"IEC"-Prefixe: 2#, 8#, 16# (default)

"Standard C"-Prefixe: 0, 0x, 0X 

Nur in Verbindung mit b, B, o, O, x, X, sonst wird das Flag ignoriert.

Der "Standard-C"-Prefix-Typ kann durch das Setzen der globalen Variablen GLOBAL_FORMAT_HASH_PREFIX_TYPE  im Programm aktiviert werden:

GLOBAL_FORMAT_HASH_PREFIX_TYPE := HASHPREFIX_STDC;

Kein Prefix.

 

Width

Optionales Parameterfeld. Dieser Parameter muss einen positiven dezimalen Wert haben. Er bestimmt die minimale Anzahl der ausgegebenen Zeichen im Ausgabestring. Es werden Leerzeichen (Links oder Rechts, abhängig von dem Ausrichtungs-Flag) dem Ausgabestring hinzugefügt, bis die gewünschte Breite erreicht wurde. Wenn das Null-Flag dem Width-Parameter vorangestellt wurde, wird der resultierende String von Links mit Nullen aufgefüllt, bis die gewünschte Breite erreicht wurde. Der Ausgabestring wird niemals durch den Width-Parameter auf die gewünschte Länge abgeschnitten!

Für den Width-Parameter kann auch ein Sternchen (*) angegeben werden. Der benötigte Wert wird dann von einem Argument geliefert (zulässige Typen: BYTE, WORD, DWORD, USINT, UINT, UDINT). Dem Argument für den Width-Parameter folgt dann das Argument für den zu formatierenden Wert. 

Precision

Optionales Parameterfeld. Dieser Parameter folgt nach dem Punkt (.)  und muss einen positiven dezimalen Wert besitzen. Folgt dem Punkt kein Wert, dann wird für die Präzision der Standardwert genommen (siehe Tabelle).

Typ

Bedeutung

Standard

b, B, o, O, u, U, x, X, d, D

Der Präzisionsparameter legt fest, wie viele Dezimalzeichen (digits) in dem Ausgabestring ausgegeben werden. Bei fehlenden Zeichen wird von Links mit Nullen aufgefüllt. Der Ausgabestring wird aber niemals abgeschnitten.

Standard: 1 

c, C

Hat keine Bedeutung und wird ignoriert.

Ein Zeichen wird ausgegeben.

f, F

Der Präzisionsparameter legt die Anzahl der Nachkommastellen fest. Der Argument-Wert wird immer auf die entsprechende Anzahl der Nachkommastellen gerundet.

Standard: 6 Nachkommastellen

s, S

Der Präzisionsparameter legt fest, wie viele Zeichen aus dem Argument-String ausgegeben werden. Zeichen, die den Präzisionswert überschreiten werden nicht ausgegeben.

Es werden alle Zeichen bis zur abschließenden Null ausgegeben.

Für den Precision-Parameter kann auch ein Sternchen (*) angegeben werden. Der benötigte Wert wird dann von einem Argument geliefert (zulässige Typen: BYTE, WORD, DWORD, USINT, UINT, UDINT). Dem Argument für den Precision-Parameter folgt dann das Argument für den zu formatierenden Wert. 

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS Bibliotheken

TwinCAT v2.9.0 Build >1021

PC or CX (x86)

TcUtilities.Lib

TwinCAT v2.10.0 Build >= 1301

CX (ARM)