FP_DECODE

Dekodierung hexadezimal -> Bit Status

Dieser FP-Befehl decodiert die Werte des Datenbereichs mit der Anfangsadresse s1_Start gemäß den Werten von s2_Control, wenn der Trigger EN auf TRUE gesetzt ist. Das Ergebnis der Decodierung wird in den Speicherbereich mit der Anfangsadresse d_Start geschrieben.

FP_DECODE ist der umgekehrte Befehl von FP_ENCODE.

Parameter

Eingang

s1_Start (WORD)

Zu decodierender Quellbereich oder äquivalente Konstante

s2_Control (WORD)

Steuerzeichen zur Festlegung der Position des Startbits und der Anzahl der Bits, die decodiert werden sollen

Ausgang

d_Start (WORD)

Anfangsadresse zum Speichern der decodierten Werte (Ziel)

Anmerkungen

  • Die Variablen s1_Start, s2_Control und d_Start müssen vom gleichen Datentyp sein.

  • Beispiels2_Control=16#404

    1.  (1) Quelladresse
    2.  (2) Bitposition
    3.  (3) Bitposition 4
    4.  (4) 4 Bits (Bit 4–7 binär: 2#0111 oder dezimal: 7) von s1_Start werden decodiert, wenn der Trigger auf TRUE gesetzt ist
    5.  (5) Ziel

      Die decodierten Daten TRUE werden in Bit 7 von d_Start gespeichert.

      Alle Bits mit Ausnahme von Bit 7 werden mit Nullen aufgefüllt.

    Die Daten des 2^nL-Bitsegments vom nH-Bit des von s1_Start spezifizierten Bereichs werden decodiert (wobei nL die Anzahl der zu decodierenden Bits angibt).

    Die Ergebnisse der Decodierung werden in die 2^nL-Bitsegmente ab dem von d_Start spezifizierten Bereich geschrieben (wobei nH Startbit der Umwandlung angibt). Ungültige Bits im Datenbereich, der für das Ergebnis festgelegt wurde, werden mit Nullen aufgefüllt.

  • Beschreibung von s2_Control

    s2_Control spezifiziert die Position des Startbits und die Bitanzahl, die mit Hilfe von hexadezimalen Daten decodiert wird.

    1.  (1) 16-Bit-Daten
    2.  (2) Anzahl der Bits 0–15

    Die mit "-" gekennzeichneten Bits sind ungültig.

     

    Einstellwert

    16#0–16#F

    (3)

    Bitposition des ersten zu decodierenden Bits

     

    Einstellwert

    16#0–16#8

    (4)

    Anzahl der decodierten Bits

    16#0

    0

     

    16#0

    0

    16#1

    1

    16#1

    1

    16#2

    2

    16#2

    2

    16#3

    3

    16#3

    3

    16#4

    4

    16#4

    4

    16#5

    5

    16#5

    5

    16#6

    6

    16#6

    6

    16#7

    7

    16#7

    7

    16#8

    8

    16#8

    8

    16#9

    9

    16#A

    10

    16#B

    11

    16#C

    12

    16#D

    13

    16#E

    14

    16#F

    15

  • Beziehung zwischen der Anzahl der Bits und der zur Decodierung notwendigen Datenbereiche

    Zahl der zu decodierenden Bits

    Datenbereich nötig für das Ergebnis

    Anzahl der decodierten Bits (Ergebnis)

    1

    1 Wort

    2-bit 1)

    2

    1 Wort

    4-bit 1)

    3

    1 Wort

    8-bit 1)

    4

    1 Wort

    16-bit

    5

    2 Worte

    32-bit

    6

    4 Worte

    64-bit

    7

    8 Worte

    128-bit

    8

    16 Worte

    256-bit

    1) Ungültige Bits im Datenbereich, der für das Ergebnis nötig ist, werden mit Nullen aufgefüllt.

  • Beispiel für decodierte Daten

    Bei der Decodierung von 4-Bit-Daten wird das Ergebnis der Decodierung wie unten dargestellt als 16-Bit-Daten ausgegeben.

    • Decodierungsbedingung: s2_Control

    • Position des Startbits 0: 16#0

    • Zahl der zu decodierenden Bits: 16#4 (4 Bit)

    Zu decodierende Werte (4 Bit)

    Ergebnis der Decodierung

    Hex.

    Dez.

    16#0000

    0

    0000 0000 0000 0001

    16#0001

    1

    0000 0000 0000 0010

    16#0010

    2

    0000 0000 0000 0100

    16#0011

    3

    0000 0000 0000 1000

    16#0100

    4

    0000 0000 0001 0000

    16#0101

    5

    0000 0000 0010 0000

    16#0110

    6

    0000 0000 0100 0000

    16#0111

    7

    0000 0000 1000 0000

    16#1000

    8

    0000 0001 0000 0000

    16#1001

    9

    0000 0010 0000 0000

    16#1010

    10

    0000 0100 0000 0000

    16#1011

    11

    0000 1000 0000 0000

    16#1100

    12

    0001 0000 0000 0000

    16#1101

    13

    0010 0000 0000 0000

    16#1110

    14

    0100 0000 0000 0000

    16#1111

    15

    1000 0000 0000 0000

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 1 £ nL £ 8, wobei nL die Anzahl der zu codierenden/decodierenden Bits angibt.

  • wenn 1 £ nH + nL £ 16, wobei nH das Startbit der Umwandlung und nL die Anzahl der zu codierenden/decodierenden Bits angibt.

  • wenn der Speicherbereich, der für das Ergebnis der Decodierung verwendet werden soll, größer ist als der zulässige Bereich.

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 1 £ nL £ 8, wobei nL die Anzahl der zu codierenden/decodierenden Bits angibt.

  • wenn 1 £ nH + nL £ 16, wobei nH das Startbit der Umwandlung und nL die Anzahl der zu codierenden/decodierenden Bits angibt.

  • wenn der Speicherbereich, der für das Ergebnis der Decodierung verwendet werden soll, größer ist als der zulässige Bereich.

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;
			(*activates the function*)
		wInput_value: WORD:=2#1100011000011110;
		wControlCode: WORD:=16#0003;
			(*specifies decoding*)
		wConversionResult: WORD:=0;
			(*result after a 0->1 leading
edge from start:
2#0000000001000000*)
	END_VAR

POE-Rumpf

Wenn die Variable bStart auf TRUE gesetzt wird, wird die Funktion ausgeführt.

KOP-Rumpf

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_CONTACT,,bStart,8,1,10,3,);
B(B_VARIN,,wInput_value,11,2,13,4,);
B(B_VARIN,,wControlCode,11,3,13,5,);
B(B_VAROUT,,wConversionResult,21,2,23,4,);
B(B_F,FP_DECODE!,,13,0,21,5,,?DEN?Ds1_Start?Ds2_Control?AENO?Cd_Start);
L(10,2,13,2);
L(1,2,8,2);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST-Rumpf

IF start then
    FP_DECODE(s1_Start := wInput_value, 
              s2_Control := wControlCode, 
              d_Start => wConversionResult);
END_IF;

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