FP_BCD_TO_ASCII

Umwandlung BCD -> ASCII

Dieser FP-Befehl wandelt den BCD-Code des Datenbereichs mit der Anfangsadresse s1 in ASCII-Code um, wenn der Trigger EN auf TRUE gesetzt ist. s2_Control legt die Anzahl der umzuwandelnden Bytes und die Umwandlungsrichtung fest.

Das Ergebnis wird in den Speicherbereich d_Start geschrieben. Im ASCII-Code werden für die Darstellung eines BCD-Zeichens 8 Bit (1 Byte) benötigt. Nach der ASCII-Umwandlung ist der Zieldatenbereich daher doppelt so groß wie der Quelldatenbereich.

Parameter

Eingang

s1 (WORD, DWORD)

BCD

s2_Control (WORD)

Anzahl der Bytes und Umwandlungsrichtung

Ausgang

d_Start (WORD, INT, UINT)

Anfangsadresse des Datenbereichs für die Ergebnisse. Die Größe beträgt n_Bits * 2 Worte.

Anmerkungen

Spezifikationen für den Steuercodes2_Control

  1.  (1) Umzuwandelnder Wertebereich:

    16-bit: 1–2 Byte umzuwandeln

    32-bit: 1–4 Byte umzuwandeln

  2.  (2) immer 0
  3.  (3) Umwandlungsrichtung:

    0: vorwärts

    1: rückwärts

Die beiden Zeichen, die ein Byte darstellen, werden bei der Speicherung vertauscht. Zwei Bytes werden als ein Datensegment umgewandelt.

  • Vorwärtsrichtung:

  • Rückwärtsrichtung:

ASCII HEX-Code zur Darstellung der BCD-Zeichen:

BCD-Zeichen

ASCII HEX-Code

0123456789

16#3016#31 16#32 16#33 16#34 16#35 16#36 16#37 16#38 16#39

Fehleralarmmerker

sys_bIsOperationErrorHold (wird auf TRUE gesetzt und bleibt TRUE)
  • wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich

  • wenn in s1_Start festgelegten Werte keine BCD-Werte sind

  • wenn die durch s2_Control festgelegte Bytezahl den in s1_Start festgelegten Speicherplatz überschreitet

  • wenn das Ergebnis der Umwandlung größer ist als der Datenbereich d_Start

  • wenn s2_Control = 0

  • wenn die Umwandlungsrichtung außerhalb des zulässigen Bereichs liegt

  • wenn die in s2_Control festgelegte Bytezahl größer als 4 ist

sys_bIsOperationErrorNonHold (wird für einen Zyklus auf TRUE gesetzt)
  • wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich

  • wenn in s1_Start festgelegten Werte keine BCD-Werte sind

  • wenn die durch s2_Control festgelegte Bytezahl den in s1_Start festgelegten Speicherplatz überschreitet

  • wenn das Ergebnis der Umwandlung größer ist als der Datenbereich d_Start

  • wenn s2_Control = 0

  • wenn die Umwandlungsrichtung außerhalb des zulässigen Bereichs liegt

  • wenn die in s2_Control festgelegte Bytezahl größer als 4 ist

Beispiel16-Bit-Daten, Vorwärtsrichtung, 2 Byte (Zeichen)

Offset

BCD-Zeichen

Offset

Umgewandelter ASCII-Code

BCD-Code

s1

0

16#1234

Þ

d_Start

0

16#3433

43

s2_Control

16#0002

16#3231

21

Beispiel16-Bit-Daten, Rückwärtsrichtung, 2 Byte (Zeichen)

Offset

BCD-Zeichen

Offset

Umgewandelter ASCII-Code

BCD-Code

s1

0

16#1234

Þ

d_Start

0

16#3231

21

s2_Control

16#1002

16#3433

43

Beispiel32-Bit-Daten, Vorwärtsrichtung, 4 Byte (Zeichen)

Offset

BCD-Zeichen

Offset

Umgewandelter ASCII-Code

BCD-Code

s1

0

16#5678

Þ

d_Start

0

16#3837

87

1

16#1234

1

16#3635

65

s2_Control

16#0004

16#3433

43

16#3231

21

Beispiel32-Bit-Daten, Rückwärtsrichtung, 4 Byte (Zeichen)

Offset

BCD-Zeichen

Offset

Umgewandelter ASCII-Code

BCD-Code

s1

0

16#5678

Þ

d_Start

0

16#3231

21

1

16#1234

1

16#3433

43

s2_Control

16#1004

16#3635

65

16#3837

87

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;
		wInput: WORD:=16#1234;
		awResult: ARRAY [0..2] OF WORD:=[3(0)];
	END_VAR

POE-Rumpf

Wenn die Variable bStart auf TRUE gesetzt wird, wird die Funktion ausgeführt. Zwei Bytes ab s1_Start werden in Rückwärtsrichtung in einen ASCII-Wert umgewandelt.

KOP-Rumpf

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 8 ;
        NETWORK_BODY
B(B_COMMENT,,After conversion: ø^awResult[0]=16#3231ø^awResult[1]=16#3433ø^awResult[2] is not written,24,1,39,5,);
B(B_CONTACT,,bStart,4,4,6,6,R);
B(B_F,FP_BCD_TO_ASCII!,,12,3,22,8,,?DEN?D@'s1'?Ds2_Control?AENO?Cd_Start);
B(B_VARIN,,wInput,10,5,12,7,);
B(B_VAROUT,,awResult[0],22,5,24,7,);
B(B_VARIN,,16#1002,10,6,12,8,);
L(1,0,1,8);
L(1,5,4,5);
L(6,5,12,5);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST-Rumpf

If (DF(bStart)) Then
    FP_BCD_TO_ASCII(s1 := wInput, s2_Control := 16#1002,
                    d_Start => awResult[0]);
            (* After conversion: 
			awResult[0]=16#3231
			awResult[1]=16#3433
			awResult[2] is not written *)

End_if;

Letzte Änderung am: 2021-09-27Feedback zu dieser SeitePanasonic Hotline