FP_HEX_TO_ASCII

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.

Parámetros

Entrada

s_Start (WORD, DWORD)

Datos hexadecimales

n_Bytes (INT, DINT, UINT, UDINT)

Número de bytes

Salida

d_Start (WORD, INT, UINT)

Dirección de inicio del área de datos para los resultados. El tamaño es n_Bits * 2 palabras.

Observaciones

Cuando se guardan, se intercambian dos caracteres que forman un byte. Dos bytes se convierten como un solo segmento de datos.

Banderas de error

sys_bIsOperationErrorHold (pasa a TRUE y permanece TRUE)
  • 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

sys_bIsOperationErrorNonHold (pasa a TRUE para un ciclo de scan)
  • 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

EjemploDatos de 16 bits

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

EjemploDatos de 32 bits

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

Ejemplo

Cabecera de la POU

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

Cuerpo de la POU

Cuando la variable bStart se encuentra a TRUE, se ejecuta la función.

Cuerpo LD

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

Cuerpo en ST

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;

Modificado el: 2024-11-21Comentarios sobre esta páginaLínea directa de Panasonic