FP_ENCODE

Codierung Bitzustand -> Hexadezimal

Dieser FP-Befehl codiert die Werte des Speicherbereichs mit der Anfangsadresse s1_Start gemäß den Werten von s2_Control, wenn der Trigger EN auf TRUE gesetzt ist. Das Ergebnis der Codierung wird in den Zielbereich d_Start beginnend bei der festgelegten Bitposition geschrieben. Ungültige Bits im Datenbereich, der für das Ergebnis der Codierung festgelegt wurde, werden mit Nullen aufgefüllt.

FP_ENCODE ist der umgekehrte Befehl von FP_DECODE.

Parameter

Eingang

s1_Start (WORD)

16-Bit-Anfangsbereich, der codiert werden soll (Quelle)

s2_Control (WORD)

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

Ausgang

d_Start (WORD)

16-Bit-Speicherbereich zum Speichern der codierten Daten (Ziel)

Anmerkungen

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

  • Beispiel mit s2_Control=16#0005

    16#

    0

    0

    0

    5

     

    Anzahl der zu codierenden Bits: 25=32 Bits

    Position des Startbits der zu codierenden Daten: Bitposition 0

    1.  (1) Quelladresse
    2.  (2) Bitposition
    3.  (3) 32 Bits, wie durch 16#0005 festgelegt
    4.  (4) Das 8. Bit der 32-Bit-Daten ist TRUE.
    5.  (5) Ziel

      Ergebnis 8 der Codierung (dezimal) wird in den Speicherbereich d_Start geschrieben, wenn der Trigger EN auf TRUE gesetzt ist.

    6.  (6) Position des Startbits
    7.  (7) Die Bitpositionen 8 bis 15 werden mit Nullen aufgefüllt.
    8.  (8) Ergebnis der Codierung: 8

    Beschreibung des Vorgangs

    Die Daten des 2^nL-Bitsegments am Anfang des Speicherbereichs von s1_Start werden codiert (wobei nL die Anzahl der zu codierenden Bits angibt).

    Das Ergebnis der Codierung wird als dezimale Daten in die acht Bits ab dem als das nH-Bit spezifizierten Bit 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 im Speicherregister und die Bitanzahl, die mit Hilfe von hexadezimalen Daten codiert 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)

    Position des Startbits im Speicherregister der Codierung

     

    Einstellwert

    16#0–16#8

    (4)

    Anzahl der codierten Bits

    16#0

    0

     

    16#1

    2

    16#1

    1

    16#2

    4

    16#2

    2

    16#3

    8 (1 byte)

    16#3

    3

    16#4

    16 (1 Wort)

    16#4

    4

    16#5

    32 (2 Worte)

    16#5

    5

    16#6

    64 (4 Worte)

    16#6

    6

    16#7

    128 (8 Worte)

    16#7

    7

    16#8

    256 (16 Worte)

    16#8

    8

    16#9

    9

    16#A

    10

    16#B

    11

    16#C

    12

    16#D

    13

    16#E

    14

    16#F

    15

    Beispiel für eine Codierung

    Beim Codieren von 16-Bit-Daten (nL=4) werden die Ergebnisse der Codierung wie unten dargestellt ausgegeben.

    Zu codierende Werte (4 Bit)

    Ergebnis der Codierung

    Hex.

    Dez.

    0000 0000 0000 0001

    16#0000

    0

    0000 0000 0000 0010

    16#0001

    1

    0000 0000 0000 0100

    16#0010

    2

    0000 0000 0000 1000

    16#0011

    3

    0000 0000 0001 0000

    16#0100

    4

    0000 0000 0010 0000

    16#0101

    5

    0000 0000 0100 0000

    16#0110

    6

    0000 0000 1000 0000

    16#0111

    7

    0000 0001 0000 0000

    16#1000

    8

    0000 0010 0000 0000

    16#1001

    9

    0000 0100 0000 0000

    16#1010

    10

    0000 1000 0000 0000

    16#1011

    11

    0001 0000 0000 0000

    16#1100

    12

    0010 0000 0000 0000

    16#1101

    13

    0100 0000 0000 0000

    16#1110

    14

    1000 0000 0000 0000

    16#1111

    15

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 die zu codierenden Werte alle null sind.

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 die zu codierenden Werte alle null sind.

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#0000000001000000;
		wControlCode: WORD:=16#0003;
			(*specifies the encodation*)
		wOutput_value: WORD:=0;
			(*result after a 0->1 leading
edge from start:
2#0000000000000110*)
	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 := 5 ;
        NETWORK_BODY
B(B_CONTACT,,bStart,6,1,8,3,);
B(B_VARIN,,wInput_value,10,2,12,4,);
B(B_VARIN,,wControlCode,10,3,12,5,);
B(B_VAROUT,,wOutput_value,20,2,22,4,);
B(B_F,FP_ENCODE!,,12,0,20,5,,?DEN?Ds1_Start?Ds2_Control?AENO?Cd_Start);
L(1,2,6,2);
L(8,2,12,2);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST-Rumpf

IF bStart then
    FP_ENCODE(s1_Start := wInput_value, 
              s2_Control := wControlCode, 
              d_Start => wOutput_value);
END_IF;

Letzte Änderung: 2024-03-14Feedback zu dieser SeitePanasonic Hotline