FP_ASCII_CHECK

ASCII-Datenprüfung

Dieser FP-Befehl prüft, ob die ASCII-Codes im Speicherbereich s2_AsciiData sich korrekt mit der durch s1_Format festgelegten Umwandlungsmethode umwandeln lassen.

  • Wenn die Ergebnisse korrekt sind, werden die Systemvariable sys_bIsEqual und der Ausgang d_IsValid auf EIN gesetzt.

  • Wenn die Ergebnisse falsch sind, werden die Systemvariable sys_bIsEqual und der Ausgang d_IsValid auf AUS gesetzt.

Anmerkung

Die FP-Befehle FP_ASCII_TO_BIN und FP_ASCII_CHECK unterscheiden nicht zwischen Groß- und Kleinschreibung.

Parameter

Eingang

s1_Format (STRING)

Steuer- und Formatzeichen in Anführungszeichen

s2_AsciiData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)

Anfangsadresse zum Speichern der ASCII-Werte

n_Conversions (WORD, INT, UINT)

Anzahl der umzuwandelnden Zahlen: 0–65535

n_AsciiDataStartPosition (INT)

Anfangswert in ASCII-Werten: 0–255

Ausgang

d_IsValid (BOOL)

TRUE, wenn die ASCII-Werte aus Binärzahlen bestehen, die sich in das gewünschte Format umwandeln lassen

Erläuterung der einzelnen Ziffern des Steuercodes s1_Format:

Position im Steuercode

Beschreibung

s1_Format

16-Bit-Steuerungen

32-Bit-Steuerungen

Umwandlungsrichtung

     

+

vorwärts (nur für hexadezimale Zahlen mit Bezeichner x, X)

'+%4X'

Ohne Pluszeichen: rückwärts (Standardeinstellung)

'%4X'

%

Formatzeichenbezeichner (obligatorisch)

 

Padding-Format

     

0

Mit Nullen auffüllen

'%06x'

-

+

Pluszeichen hinzufügen

'%+4d'

-

-

Linksbündig

'%-6d'

-

˽

(Leerzeichen) Leerzeichen statt Pluszeichen hinzufügen

'%˽4d'

-

#

0x für Hexadezimalzahlen einfügen

'%#4X'

-

Immer einen Dezimalpunkt für reelle Zahlen anhängen

'%#8.0f'

-

8

Breite des ASCII-Datenelements

'%08d'

Keine Breite

  • FP_BIN_TO_ASCII: erforderliche Mindestbreite wird angenommen

  • FP_ASCII_TO_BIN und FP_ASCII_CHECK: Komma als Trennzeichen erforderlich

'%d,'

-

Stellen nach Dezimalpunkt

     

.5

Alle Ziffern nach dem Dezimalpunkt

'%8.5f'

-

I

Bezeichner doppelter Länge

z.B. Bezeichner i mit l = Ii -> DINT

'+%4ld'

Formatbezeichner

     

i

INT

'%10i'

u

UINT

'%10u'

-

d

INT

'%6d'

x

Hexadezimalzahl in Kleinschreibung

'+%4x'

X

Hexadezimalzahl in Großschreibung

'+%4X'

b

BCD-Konstanten

'+%5b'

-

f

Fließkommazahl

'+%-6.2f'

-

e

Exponentialzahl 1.23e10

'+%9.3e'

-

E

Exponentialzahl in Großschreibung 1.23E10

'+%9.3E'

-

g

Fließkomma- oder Exponentialzahl

'+%12g'

-

G

Fließkomma- oder Exponentialzahl in Großschreibung

'+%9.3G'

-

  • Bei FP_BIN_TO_ASCII: An das Umwandlungsergebnis kann eine beliebige Zeichenfolge, z. B. 'PANA', angehängt werden.

  • Bei FP_ASCII_TO_BIN und FP_ASCII_CHECK: Nur Komma ist zulässig.

'+%8dPANA'

-

verfügbar auf 16-Bit/32-Bit-SPS

Beispiele für das Steuerzeichen s1_Format

  • Beispiel: '+%4X' wandelt einen Binärwert in einen Wert mit einer Breite von vier Zeichen in Großschreibung in Vorwärtsrichtung um (gültig für 16-Bit/32-Bit-SPS)

    Gültige ASCII-Daten für dieses Beispiel: '˽12A'

  • Beispiel: '%4X' wandelt einen Binärwert in einen Wert mit einer Breite von vier Zeichen in Großbuchstaben in Rückwärtsrichtung um (gültig für 16-Bit/32-Bit-SPS)

    Gültige ASCII-Daten für dieses Beispiel: '˽B2A'

  • Beispiel: '%06d' wandelt einen Binärwert in einen Wert mit einer Breite von sechs Zeichen, Dezimalwert mit drei führenden Nullen um (gültig nur für 32-Bit-SPS)

    Gültige ASCII-Daten für dieses Beispiel: '000100'

  • Beispiel: '%+4d' wandelt einen Binärwert in einen Wert mit einer Breite von vier Zeichen, Dezimalwert, Vorzeichen + hinzugefügt um (gültig nur für 32-Bit-SPS)

    Gültige ASCII-Daten für dieses Beispiel: '+100 ˽ ˽'

  • Beispiel: '%-6d' wandelt einen Binärwert in einen Wert mit einer Breite von sechs Zeichen, linksbündig um (gültig nur für 32-Bit-SPS)

    Gültige ASCII-Daten für dieses Beispiel: '100˽ ˽ ˽'

  • Beispiel: '%˽4d' wandelt einen Binärwert in einen Wert mit einer Breite von vier Zeichen mit einem führenden Leerzeichen um (gültig nur für 32-Bit-SPS)

    Gültige ASCII-Daten für dieses Beispiel: '˽100'

  • Beispiel: '%#8.0f' wandelt einen Binärwert in einen Wert mit einer Breite von acht Zeichen, Fließkommazahl, vier führende Leerzeichen um (gültig nur für 32-Bit-SPS)

    Gültige ASCII-Daten für dieses Beispiel: '˽ ˽ ˽ ˽123.'

  • Beispiel: '%8.3f' wandelt einen Binärwert in einen Wert mit einer Breite von acht Zeichen, drei Stellen nach dem Dezimalpunkt um (gültig nur für 32-Bit-SPS)

    Gültige ASCII-Daten für dieses Beispiel: '˽123.456'

  • Beispiel: '+%10u' wandelt einen Binärwert in einen Wert mit einer Breite von 10 Zeichen, sieben führende Leerzeichen, vorzeichenlose 16-Bit-Ganzzahl um (gültig nur für 32-Bit-SPS)

    Gültige ASCII-Daten für dieses Beispiel: '˽ ˽ ˽ ˽ ˽ ˽ ˽100'

  • Beispiel: '%06d' wandelt einen Binärwert in einen Wert mit einer Breite von sechs Zeichen mit drei führenden Leerzeichen um (gültig für 16-Bit/32-Bit-SPS)

    Gültige ASCII-Daten für dieses Beispiel: '˽ ˽ ˽100'

    Zulässiger Bereich für den Wert vor dem Bezeichner:

    '˽ ˽ ˽ ˽ ˽100PANA'

    wenn keine Breite festgelegt ist, wird ein Komma angehängt, z. B. '%d,' (gültig nur für 32-Bit-SPS)

    Gültige ASCII-Daten für dieses Beispiel: '100,'

    • FP_BIN_TO_ASCII: erforderliche Mindestbreite wird angenommen

    • FP_ASCII_TO_BIN und FP_ASCII_CHECK: Komma als Trennzeichen erforderlich

  • Beispiel: '+%4ld' wandelt einen Binärwert in einen Wert mit einer Breite von vier Zeichen um, erfordert DINT oder DWORD für das umgewandelte Ergebnis (gültig für 16-Bit/32-Bit-SPS)

    Gültige ASCII-Daten für dieses Beispiel: '˽100'

  • Beispiel: '+%6i' wandelt einen Binärwert in einen Wert mit einer Breite von sechs Zeichen, drei führende Leerzeichen, vorzeichenbehaftete 16-Bit-Ganzzahl in Vorwärtsrichtung um (gültig für 16-Bit/32-Bit-SPS)

    Gültige ASCII-Daten für dieses Beispiel: '˽ ˽ ˽-100'

  • Beispiel: '+%6d' wandelt einen Binärwert in einen Wert mit einer Breite von sechs Zeichen mit drei führenden Leerzeichen in Vorwärtsrichtung um (gültig für 16-Bit/32-Bit-SPS)

    Gültige ASCII-Daten für dieses Beispiel: '000100'

  • Beispiel: '+%4X' wandelt einen Binärwert in einen Wert mit einer Breite von vier Zeichen, Hexadezimalzahl in Großschreibung in Vorwärtsrichtung um (gültig für 16-Bit/32-Bit-SPS)

    Gültige ASCII-Daten für dieses Beispiel: '˽12A'

  • Beispiel: '+%5b' wandelt einen Binärwert in einen Wert mit einer Breite von fünf Zeichen, BCD-Werte um (gültig nur für 32-Bit-SPS)

    Gültige ASCII-Daten für dieses Beispiel: '˽123'

  • Beispiel: '+%-6.2f' wandelt einen Binärwert in einen Wert mit einer Breite von sechs Zeichen, linksbündig, zwei Stellen nach dem Dezimalpunkt um (gültig nur für 32-Bit-SPS)

    Gültige ASCII-Daten für dieses Beispiel: '1.23˽'

  • Beispiel: '+%9.3e' wandelt einen Binärwert in einen Wert mit einer Breite von 9 Zeichen, 3 Stellen nach dem Dezimalpunkt, Exponentialzahl in Kleinschreibung um (gültig nur für 32-Bit-SPS)

    Gültige ASCII-Daten für dieses Beispiel: '1.235e+03'

  • Beispiel: '1.235E+03' wandelt einen Binärwert in einen Wert mit einer Breite von 9 Zeichen, 3 Stellen nach dem Dezimalpunkt, Exponentialzahl in Großschreibung um (gültig nur für 32-Bit-SPS)

    Gültige ASCII-Daten für dieses Beispiel: '1.235E+03'

  • Beispiel: '+%12g' wandelt einen Binärwert in einen Wert mit einer Breite von 12 Zeichen, Fließkommazahl um (gültig nur für 32-Bit-SPS)

    Gültige ASCII-Daten für dieses Beispiel: '˽ ˽ ˽ ˽ ˽1234.57'

  • Beispiel: '+%9.3G' wandelt einen Binärwert in einen Wert mit einer Breite von neun Zeichen, drei Stellen nach dem Dezimalpunkt, Fließkommazahl, Exponentialzahl in Großschreibung um (gültig nur für 32-Bit-SPS)

    Gültige ASCII-Daten für dieses Beispiel: '˽ ˽ ˽1.E+03'

  • Bei FP_BIN_TO_ASCII: An das Umwandlungsergebnis kann eine beliebige Zeichenfolge angehängt werden.

    Beispiel: '+%8dPANA' wandelt einen Binärwert in einen Wert mit einer Breite von acht Zeichen, Dezimalzahl um, 'PANA' wird angehängt (gültig nur für 32-Bit-SPS)

    Gültige ASCII-Daten für dieses Beispiel: '˽ ˽ ˽ ˽ ˽100PANA'

Fehleralarmmerker

sys_bIsOperationErrorHold (wird auf TRUE gesetzt und bleibt TRUE)
  • wenn das Steuerzeichen sFormat fehlerhaft ist.

  • wenn die Vorwärtsrichtung (+) in sFormat angegeben, und das Format dezimal ist.

  • wenn die Anzahl der ASCII-Zeichen pro umgewandelter Einheit, angegeben in n_Conversions, für 16-Bit-Werte den Wert 4 und für 32-Bit-Werte den Wert 8 übersteigt und das hexadezimale Format durch s1_Format angegeben ist.

  • wenn 0 als Anzahl der 16- oder 32-Bit-Einheiten (1 oder 2 Worte) angegeben ist, die mit n_Conversions umgewandelt werden sollen.

  • wenn die Anzahl der mit n_Conversions umzuwandelnden 16- oder 32-Bit-Dezimalzahlen den Speicherbereich der ASCII-Werte übersteigt.

  • wenn das Ergebnis der Umwandlung den Speicherplatz überschreitet.

sys_bIsOperationErrorNonHold (wird für einen Zyklus auf TRUE gesetzt)
  • wenn das Steuerzeichen sFormat fehlerhaft ist.

  • wenn die Vorwärtsrichtung (+) in sFormat angegeben, und das Format dezimal ist.

  • wenn die Anzahl der ASCII-Zeichen pro umgewandelter Einheit, angegeben in n_Conversions, für 16-Bit-Werte den Wert 4 und für 32-Bit-Werte den Wert 8 übersteigt und das hexadezimale Format durch s1_Format angegeben ist.

  • wenn 0 als Anzahl der 16- oder 32-Bit-Einheiten (1 oder 2 Worte) angegeben ist, die mit n_Conversions umgewandelt werden sollen.

  • wenn die Anzahl der mit n_Conversions umzuwandelnden 16- oder 32-Bit-Dezimalzahlen den Speicherbereich der ASCII-Werte übersteigt.

  • wenn das Ergebnis der Umwandlung den Speicherplatz überschreitet.

Beispiel

POE-Kopf

Im POE-Kopf werden alle Ein- und Ausgangsvariablen deklariert, die für die Programmierung dieser Funktion verwendet werden. Für alle Programmiersprachen wird der gleiche POE-Kopf verwendet.

	VAR
		bStart: BOOL:=FALSE;
		sExample1: STRING[32]:='*1234,5678,';
		bIsAsciiValid: BOOL:=FALSE;
	END_VAR

POE-Rumpf

Wenn bStart auf TRUE gesetzt wird, prüft der Befehl, ob die mit s2_AsciiData verbundenen Werte sich in Dezimalwerte umwandeln lassen, wenn die Formatzeichenfolge '%d' lautet.

KOP-Rumpf

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 8 ;
        NETWORK_BODY
B(B_VARIN,,'%d~',26,2,28,4,);
B(B_VARIN,,2,26,4,28,6,);
B(B_VARIN,,1,26,5,28,7,);
B(B_F,Adr_Of_VarOffs_I!,,14,2,23,6,,?D@'Var'?DOffs?CAdr);
B(B_VARIN,,sExample1,12,3,14,5,);
B(B_VARIN,,2,12,4,14,6,);
B(B_VAROUT,,bIsAsciiValid,41,2,43,4,);
B(B_F,FP_ASCII_CHECK!,,28,0,41,7,,?DEN?hs1_Format?ds2_AsciiData?dn_Conversions?dn_AsciiDataStartPosition?AENO?cd_IsValid);
B(B_CONTACT,,bStart,5,1,7,3,);
L(23,4,28,4);
L(1,2,5,2);
L(7,2,28,2);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST-Rumpf

If (bStart) then
    FP_ASCII_CHECK(s1_Format := '%d,',
                   s2_AsciiData := Adr_Of_VarOffs(Var := sExample1, Offs := 2),
                   n_Conversions := 2, 
                   n_AsciiDataStartPosition := 1,
                   d_IsValid => bIsAsciiValid);
End_if;

Letzte Änderung: 2024-12-18Feedback zu dieser SeitePanasonic Hotline