ESADEC. -> conversione ASCII
Questa istruzione FP converte il dato esadecimale in s_Start in codici ASCII se il trigger EN è TRUE. n_Bytes specifica il numero di byte da convertire. Il risultato viene memorizzato nell'area specificata da d_Start. Il codice ASCII richiede 8 bit (1 byte) per esprimere un carattere esadecimale. Al momento della conversione in ASCII, la lunghezza dei dati sarà doppia rispetto alla lunghezza dei dati di origine.
Ingresso
Dato esadecimale
Numero di byte
Uscita
Indirizzo iniziale dell'area dati per i risultati. La dimensione è n_Bits * 2 word.
I due caratteri che creano un byte vengono scambiati una volta memorizzati. I due byte vengono convertiti come un segmento di dati.
se l'area specificata utilizzando il registro indice eccede il limite.
se il numero di byte specificato dan_Bytes è maggiore rispetto all'area specificata da s_Start.
se il risultato calcolato supera l'area specificata da d_Start
se n_Bytes= 0 o un valore negativo
se l'area specificata utilizzando il registro indice eccede il limite.
se il numero di byte specificato dan_Bytes è maggiore rispetto all'area specificata da s_Start.
se il risultato calcolato supera l'area specificata da d_Start
se n_Bytes= 0 o un valore negativo
Offset |
Caratteri esadec. | Offset |
Codici ASCII convertiti |
Equivalente String. |
|||
s_Start |
0 |
16#ABCD |
Þ |
d_Start |
0 |
16#4443 |
DC |
n_Bytes |
16#0002 |
16#4241 |
BA |
Offset |
Caratteri esadec. | Offset |
Codici ASCII convertiti |
Equivalente String. |
|||
s_Start |
0 |
16#1234 |
Þ |
d_Start |
0 |
16#3433 |
43 |
1 |
16#5678 |
1 |
16#3231 |
21 |
|||
n_Bytes |
16#0004 |
16#3837 |
87 |
||||
16#3635 |
65 |
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;
awInput: ARRAY [0..2] OF WORD:=[16#ABCD,2(0)];
awResult: ARRAY [0..5] OF WORD:=[6(16#FFFF)];
END_VAR
Quando la variabile bStart è impostata su TRUE, la funzione viene eseguita.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 9 ;
NETWORK_BODY
B(B_COMMENT,,After conversion: ø^awResult[0]=16#4443ø^awResult[1]=16#4241ø^awResult[2]=16#3030ø^awResult[3]=16#3030ø^awResult[4] is not written,23,0,38,6,);
B(B_CONTACT,,bStart,4,5,6,7,R);
B(B_F,FP_HEX_TO_ASCII!,,12,4,22,9,,?DEN?D@'s'?Dn_Chars?AENO?Cd_Start);
B(B_VARIN,,awInput[0],10,6,12,8,);
B(B_VAROUT,,awResult[0],22,6,24,8,);
B(B_VARIN,,4,10,7,12,9,);
L(1,0,1,9);
L(1,6,4,6);
L(6,6,12,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if (DF(bStart)) then
FP_HEX_TO_ASCII(s_Start := awInput[0], n_Bytes := 4, d_Start => awResult[0]);
(* After conversion:
awResult[0]=16#4443
awResult[1]=16#4241
awResult[2]=16#3030
awResult[3]=16#3030
awResult[4] is not written *)
end_if;