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.
Eingang
16-Bit-Anfangsbereich, der codiert werden soll (Quelle)
Steuerzeichen zur Festlegung der Position des Startbits und der Anzahl der Bits, die codiert werden sollen
Ausgang
16-Bit-Speicherbereich zum Speichern der codierten Daten (Ziel)
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 |
Ergebnis 8 der Codierung (dezimal) wird in den Speicherbereich d_Start geschrieben, wenn der Trigger EN auf TRUE gesetzt ist.
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:
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 |
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.
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.
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
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 := 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
IF bStart then
FP_ENCODE(s1_Start := wInput_value,
s2_Control := wControlCode,
d_Start => wOutput_value);
END_IF;