Convertir hexadecimal -> ASCII
Estas instrucciones FP convierten los datos hexadecimales de s_Start a códigos ASCII si la entrada de trigger EN es TRUE. n_Bytes especifica el número de bytes a convertir. El resultado se guarda en el área especificada por d_Start. El código ASCII necesita 8 bits (1 byte) para representar un carácter hexadecimal. Después de la conversión a ASCII, la longitud de los datos será el doble que la longitud de los datos de origen.
Entrada
Datos hexadecimales
Número de bytes
Salida
Dirección de inicio del área de datos para los resultados. El tamaño es n_Bits * 2 palabras.
Cuando se guardan, se intercambian dos caracteres que forman un byte. Dos bytes se convierten como un solo segmento de datos.
si el área especificada utilizando el modificador índice supera el límite.
si el número de bytes especificado por n_Bytes es superior al área especificada por s_Start
si el resultado de la operación lógica supera el área especificada por d_Start
si n_Bytes= 0 o un valor negativo
si el área especificada utilizando el modificador índice supera el límite.
si el número de bytes especificado por n_Bytes es superior al área especificada por s_Start
si el resultado de la operación lógica supera el área especificada por d_Start
si n_Bytes= 0 o un valor negativo
Offset |
Caracteres hexadecimales | Offset |
Códigos ASCII convertidos |
Equivalente cadena |
|||
s_Start |
0 |
16#ABCD |
Þ |
d_Start |
0 |
16#4443 |
DC |
n_Bytes |
16#0002 |
16#4241 |
BA |
Offset |
Caracteres hexadecimales | Offset |
Códigos ASCII convertidos |
Equivalente cadena |
|||
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 |
Todas las variables de entrada y de salida utilizadas para la programación de esta función han sido declaradas en la Cabecera de la POU. Se utiliza la misma cabecera de la POU para todos los lenguajes de programación.
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
Cuando la variable bStart se encuentra a TRUE, se ejecuta la función.
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;