FP_ASCII_TO_HEX

Convertir ASCII -> hexadecimal

Estas instrucciones FP convierten los códigos ASCII HEX hexadecimales de s_Start a caracteres hexadecimales si la entrada de trigger EN es TRUE. n_Chars especifica el número de bytes a convertir.El resultado se guarda en d.

El código ASCII necesita 8 bits (1 byte) para representar un carácter hexadecimal. Por tanto, después de la conversión, la longitud de los datos corresponderá a la mitad de la longitud de los datos fuente del código ASCII.

Parámetros

Entrada

s_Start (WORD, INT, UINT)

Dirección de inicio

n_Chars (INT, DINT, UINT, UDINT)

Número de bytes

Salida

d (WORD, DWORD)

Bytes convertidos

Observaciones

Dos caracteres de código ASCII se convierten a dos dígitos numéricos de un byte. Durante este proceso se intercambian los caracteres de nivel superior y los caracteres de nivel inferior. Los cuatro caracteres se convierten en una sola unidad de datos.

Códigos ASCII HEX para representar caracteres hexadecimales:

Carácter hexadecimal

Código ASCII HEX

0123456789ABCDEF

16#3016#31 16#32 16#33 16#34 16#35 16#36 16#37 16#38 16#39 16#41 16#42 16#43 16#44 16#45 16#46

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_Chars es superior al área especificada por s_Start

  • si el resultado de la conversión es superior al área de datos especificada por d

  • si n_Chars = 0

  • si se especifican caracteres ASCII diferentes a 0–F

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_Chars es superior al área especificada por s_Start

  • si el resultado de la conversión es superior al área de datos especificada por d

  • si n_Chars = 0

  • si se especifican caracteres ASCII diferentes a 0–F

Ejemplo Datos de 16 bits con signo/sin signo:

Offset

Códigos ASCII

Equivalente hexadecimal

Offset

Caracteres hexadecimales convertidos

s1_Start

0

16#4241

BA

Þ

d

0

16#CDAB

1

16#4443

DC

1

n_Chars

0

16#0004

2

1

3

Ejemplo Datos de 32 bits con signo/sin signo:

Offset

Códigos ASCII

Equivalente hexadecimal

Offset

Caracteres hexadecimales convertidos

s1_Start

0

16#4241

BA

Þ

d

0

16#CDAB

1

16#4443

DC

1

n_Chars

0

16#0004

2

1

16#0000

3

2

4

Ejemplo Datos de 16 bits con signo/sin signo:

Offset

Códigos ASCII

Equivalente hexadecimal

Offset

Caracteres hexadecimales convertidos

s1_Start

0

16#3231

21

Þ

d

0

16#3412

1

16#3433

43

1

16#7856

2

16#3635

65

2

3

16#3837

87

3

n_Chars

0

16#0008

4

1

5

Ejemplo Datos de 16 bits con signo/sin signo, número impar de caracteres:

Si el número de caracteres a convertir es impar, se introducen ceros en las posiciones de bit 0–3 del último byte convertido.

Offset

Códigos ASCII

Equivalente hexadecimal

Offset

Caracteres hexadecimales convertidos

s1_Start

0

16#3231

21

Þ

d

0

16#3412

1

16#3433

43

1

16#7056

2

16#3635

65

2

3

16#3837

87

3

n_Chars

0

16#0007

4

1

5

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;
			(*activates the function*)
		wASCIIInput: WORD:=16#3031;
		wConversionResult: WORD:=0;
	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 ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_CONTACT,,bStart,5,2,7,4,);
B(B_VARIN,,wASCIIInput,11,3,13,5,);
B(B_VARIN,,2,11,4,13,6,);
B(B_VAROUT,,wConversionResult,23,3,25,5,);
B(B_F,FP_ASCII_TO_HEX!,,13,1,23,6,,?DEN?Ds_Start?Dn_Chars?AENO?Cd);
L(1,3,5,3);
L(7,3,13,3);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Cuerpo en ST

If (bStart) then
    FP_ASCII_TO_HEX(s_Start := wASCIIInput, 
                    n_Chars := 2, 
                    d => wConversionResult);
End_if;

Modificado el: 2021-04-26Comentarios sobre esta páginaPanasonic hotline