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.
Eingang
Zu decodierender Quellbereich oder äquivalente Konstante
Steuerzeichen zur Festlegung der Position des Startbits und der Anzahl der Bits, die decodiert werden sollen
Ausgang
Anfangsadresse zum Speichern der decodierten Werte (Ziel)
Die Variablen s1_Start, s2_Control und d_Start müssen vom gleichen Datentyp sein.
Beispiels2_Control=16#404
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.
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 |
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.
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.
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
Wenn die Variable bStart auf TRUE gesetzt wird, wird die Funktion ausgeführt.
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
IF start then
FP_DECODE(s1_Start := wInput_value,
s2_Control := wControlCode,
d_Start => wConversionResult);
END_IF;