Decodifica esadecimale -> stato bit
Questa istruzione FP decodifica i contenuti dei dati specificati da s1_Start secondo i contenuti di s2_Control se il trigger EN è impostato su TRUE. Il risultato decodificato è memorizzato nell'area a partire da d_Start.
FP_DECODE è l'istruzione inversa diFP_ENCODE.
Ingresso
Area source o costante equivalente da decodificare
Dati di controllo per specificare la posizione bit iniziale e il numero di bit da decodificare
Uscita
Indirizzo iniziale per memorizzare i dati decodificati (destinazione)
Le variabili s1_Start, s2_Control e d_Start devono presentare lo stesso tipo di dato.
Esempios2_Control=16#404
I dati decodificati TRUE vengono salvati nella posizione di bit 7 di d_Start.
Tutti i bit, ad eccezione del bit 7, sono compilati con zeri.
Il contenuto del segmento bit 2^nL del bit nH dell'area specificata da s1_Start viene decodificato (dove nL è il numero dei bit da decodificare).
I dati decodificati vengono memorizzati nei segmenti bit 2^nL che iniziano dall'area specificata da d_Start (in cui nH è il bit di conversione iniziale). I bit non validi nell'area specificata per il risultato vengono compilati con zeri.
Descrizione di s2_Control
s2_Control specifica la posizione bit iniziale e il numero di bit da decodificare utilizzando dati esadecimali.
I bit contrassegnati con "-" non sono validi. |
|||||
Impostazione 16#0–16#F |
(3) Posizione bit iniziale da decodificare |
Impostazione 16#0–16#8 |
(4) Numero di bit decodificati |
||
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 |
Relazione tra il numero di bit e l'area dati occupata dal risultato della decodifica
Numero di bit da decodificare |
Area dati richiesta per il risultato |
Numero di bit decodificati (risultato) |
---|---|---|
1 |
1 word |
2 bit 1) |
2 |
1 word |
4 bit 1) |
3 |
1 word |
8 bit 1) |
4 |
1 word |
16 bit |
5 |
2 word |
32 bit |
6 |
4 word |
64 bit |
7 |
8 word |
128 bit |
8 |
16 word |
256 bit |
1) I bit non validi nell'area dati richiesta per il risultato vengono compilati con zeri.
Esempio di dati decodificati
Quando si decodificano dati a 4 bit, i dati a 16 bit per il risultato decodificato sono mostrati di seguito.
Condizione di decodificas2_Control
Posizione bit iniziale 0: 16#0
Numero di bit da decodificare: 16#4 (4 bit)
Dati da decodificare (4 bit) |
Risultato decodificato |
|
---|---|---|
Equivalente |
Dec. |
|
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 |
se l'area specificata utilizzando il registro indice eccede il limite.
se 1 £ nL £ 8, in cui nL è il numero dei bit da codificare/decodificare.
se 1 £ nH + nL £ 16, in cui nH è il bit di avvio conversione e nL è il numero di bit da codificare/decodificare.
se l'area di memoria utilizzata dal risultato decodificato supera il limite.
se l'area specificata utilizzando il registro indice eccede il limite.
se 1 £ nL £ 8, in cui nL è il numero dei bit da codificare/decodificare.
se 1 £ nH + nL £ 16, in cui nH è il bit di avvio conversione e nL è il numero di bit da codificare/decodificare.
se l'area di memoria utilizzata dal risultato decodificato supera il limite.
Tutte le variabili di ingresso e uscita utilizzate per programmare questa funzione sono state dichiarate nell'intestazione del POU. La stessa intestazione del POU è utilizzata per tutti i linguaggi di programmazione.
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
Quando la variabile bStart è impostata su TRUE, la funzione viene eseguita.
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;