FP_ASCII_TO_BIN

Convertir ASCII -> binario

Estas instrucciones FP convierten un código ASCII guardado en el área especificada por s2_AsciiData a datos binarios de 16 bits/32 bits. El método de conversión se especifica por s1_Format. El resultado de la conversión se almacena en el área especificada por d_BinaryData.

NOTA

Las instrucciones FP FP_ASCII_TO_BIN y FP_ASCII_CHECK no diferencian entre mayúsculas y minúsculas

Parámetros

Entrada

s1_Format (STRING)

Control y formato trama de caracteres entre comillas simples

s2_AsciiData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)

Dirección de inicio para guardar datos ASCII

n_Conversions (WORD, INT, UINT)

Cantidad de números a convertir: 0–65535

n_AsciiDataStartPosition (INT)

Posición inicial en datos ASCII: 0–255

Salida

d_BinaryData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)

Dirección de inicio para guardar datos binarios

Explicación de cada dígito del código de control s1_Format:

Posición en el código de control

Descripción

s1_Format

PLCs de 16 bits

PLCs de 32 bits

Dirección de conversión

     

+

directa (solo para números hexadecimales con especificadors x, X)

'+%4X'

si se omite el signo positivo: inversa (configuración predeterminada)

'%4X'

%

especificador de formato trama de caracteres (obligatorio)

 

Formato relleno

     

0

rellenar con ceros

'%06x'

-

+

añadir un signo positivo

'%+4d'

-

-

alineación izquierda

'%-6d'

-

˽

(espacio) añadir un espacio en lugar de un signo positivo

'%˽4d'

-

#

introducir 0x para números hexadecimales

'%#4X'

-

añadir siempre un punto decimal para un número real

'%#8.0f'

-

8

ancho del elemento de datos ASCII

'%08d'

sin ancho

  • FP_BIN_TO_ASCII: se asume el ancho mínimo necesario

  • FP_ASCII_TO_BIN y FP_ASCII_CHECK: se necesita una separación con coma

'%d,'

-

Precisión después del punto decimal

     

.5

cualquier dígito después del punto decimal

'%8.5f'

-

I

duplicar longitud de especificador

p. ej., especificador i con l = Ii -> DINT

'+%4ld'

Formato especificador

     

i

INT

'%10i'

u

UINT

'%10u'

-

d

INT

'%6d'

x

hexadecimal minúsculas

'+%4x'

X

hexadecimal mayúsculas

'+%4X'

b

BCD

'+%5b'

-

f

número en coma flotante

'+%-6.2f'

-

e

exponencial 1.23e10

'+%9.3e'

-

E

exponencial mayúsculas 1.23E10

'+%9.3E'

-

g

Flotante o exponencial

'+%12g'

-

G

flotante o exponencial mayúsculas

'+%9.3G'

-

  • Para FP_BIN_TO_ASCII: es posible añadir cualquier cadena de caracteres a la conversión, p.ej. 'PANA'

  • Para FP_ASCII_TO_BIN y FP_ASCII_CHECK: solo están permitidas comas

'+%8dPANA'

-

disponible en PLCs de 16/32 bits

Ejemplos de control de trama de caracteres s1_Format

  • Ejemplo: '+%4X' convierte un valor ASCII con un ancho de cuatro caracteres en mayúsculas en sentido positivo (válido para PLCs de 16 bits/32 bits)

    Datos ASCII

    Resultado de la conversión en datos binarios

    '˽12A'

    16#12A (en formato hexadecimal)

  • Ejemplo: '%4X' convierte un valor ASCII con un acho de cuatro caracteres en mayúsculas en sentido inverso (válido para PLCs de 16 bits/32 bits)

    Datos ASCII

    Resultado de la conversión en datos binarios

    '˽B2A'

    16#B2A (en formato hexadecimal)

  • Ejemplo: '%06d' convierte un valor ASCII con una anchura de seis caracteres, valor decimal con tres ceros a la izquierda (válido solo para PLC de 32 bits)

    Datos ASCII

    Resultado de la conversión en datos binarios

    '000100'

    16#100 (en formato hexadecimal)

  • Ejemplo: '%+4d' convierte un valor ASCII con una anchura de cuatro caracteres, valor decimal, signo + añadido (válido solo para PLC de 32 bits)

    Datos ASCII

    Resultado de la conversión en datos binarios

    '+100 ˽ ˽'

    100 (en formato decimal)

  • Ejemplo: '%-6d' convierte un valor ASCII con un ancho de seis caracteres, alineado a la izquierda (válido solo para PLC de 32 bits)

    Datos ASCII

    Resultado de la conversión en datos binarios

    '100˽ ˽ ˽'

    100 (en formato decimal)

  • Ejemplo: '%˽4d' convierte un valor ASCII con una anchura de cuatro caracteres con un espacio inicial (válido solo para PLC de 32 bits)

    Datos ASCII

    Resultado de la conversión en datos binarios

    '˽100'

    100 (en formato decimal)

  • Ejemplo: '%#8.0f' convierte un valor ASCII con una anchura de ocho caracteres, número de coma flotante, cuatro espacios iniciales (válido solo para PLC de 32 bits)

    Datos ASCII

    Resultado de la conversión en datos binarios

    '˽ ˽ ˽ ˽123.'

    123.45678 (en formato decimal)

  • Ejemplo: '%8.3f' convierte un valor ASCII con una anchura de ocho caracteres y una precisión de tres caracteres después del punto decimal (válido solo para PLC de 32 bits)

    Datos ASCII

    Resultado de la conversión en datos binarios

    '˽123.456'

    123.45599 (en formato decimal)

  • Ejemplo: '+%10u' convierte un valor ASCII con una anchura de 10 caracteres, siete espacios a la izquierda, entero sin signo (válido solo para PLC de 32 bits)

    Datos ASCII

    Resultado de la conversión en datos binarios

    '˽ ˽ ˽ ˽ ˽ ˽ ˽100'

    -100 (en formato decimal)

  • Ejemplo: '%06d' convierte un valor ASCII de una anchura de seis caracteres con tres espacios iniciales (válido para PLCs de 16 bits/32 bits)

    Datos ASCII

    Resultado de la conversión en datos binarios

    '˽ ˽ ˽100'

    100 (en formato decimal)

    Rango admisible para el valor antes del especificador:

    1–15 antes de los especificadores d, ld, i, li

    1–4 antes del especificador X

    1–8 antes del especificador lX

    Si no se ha especificado un ancho, se añade una coma, p.ej., '%d,' (válido solo para PLC de 32 bits)

    Datos ASCII

    Resultado de la conversión en datos binarios

    '100,'

    100 (en formato decimal)

    • FP_BIN_TO_ASCII: se asume el ancho mínimo necesario

    • FP_ASCII_TO_BIN y FP_ASCII_CHECK: se necesita una separación con coma

  • Ejemplo: '+%4ld' convierte un valor ASCII con una anchura de cuatro caracteres, requiere DINT o DWORD para el resultado convertido (válido para PLCs de 16 bits/32 bits)

    Datos ASCII

    Resultado de la conversión en datos binarios

    '˽100'

    100 (en formato decimal)

  • Ejemplo: '+%6i' convierte un valor ASCII con una anchura de seis caracteres, tres espacios iniciales, entero con signo en sentido positivo (válido para PLCs de 16 bits/32 bits)

    Datos ASCII

    Resultado de la conversión en datos binarios

    '˽ ˽ ˽-100'

    -100 (en formato decimal)

  • Ejemplo: '+%6d' convierte un valor ASCII con una anchura de seis caracteres y tres ceros a la izquierda en sentido positivo (válido para PLCs de 16 bits/32 bits)

    Datos ASCII

    Resultado de la conversión en datos binarios

    '000100'

    100 (en formato decimal)

  • Ejemplo: '+%4X' convierte un valor ASCII con una anchura de cuatro caracteres, número hexadecimal en mayúsculas en sentido positivo (válido para PLCs de 16 bits/32 bits)

    Datos ASCII

    Resultado de la conversión en datos binarios

    '˽12A'

    16#12A (en formato hexadecimal)

  • Ejemplo: '+%5b' convierte un valor ASCII con una anchura de cinco caracteres, datos BCD (válido solo para PLC de 32 bits)

    Datos ASCII

    Resultado de la conversión en datos binarios

    '˽123'

    16#123 (en formato hexadecimal)

  • Ejemplo: '+%-6.2f' convierte un valor ASCII con una anchura de seis caracteres, alineado a la izquierda y una precisión de dos dígitos después del punto decimal (válido solo para PLC de 32 bits)

    Datos ASCII

    Resultado de la conversión en datos binarios

    '1.23˽'

    1.2345 (en formato decimal)

  • Ejemplo: '+%9.3e' convierte un valor ASCII con una anchura de 9 caracteres, precisión de 3 dígitos después del punto decimal, exponencial minúsculas (válido solo para PLC de 32 bits)

    Datos ASCII

    Resultado de la conversión en datos binarios

    '1.235e+03'

    1234.5678 (en formato decimal)

  • Ejemplo: '1.235E+03' convierte un valor ASCII con una anchura de 9 caracteres, precisión de 3 dígitos después del punto decimal, exponencial mayúsculas (válido solo para PLC de 32 bits)

    Datos ASCII

    Resultado de la conversión en datos binarios

    '1.235E+03'

    1234.5678 (en formato decimal)

  • Ejemplo: '+%12g' convierte un valor ASCII con una anchura de 12 caracteres, número en coma flotante (válido solo para PLC de 32 bits)

    Datos ASCII

    Resultado de la conversión en datos binarios

    '˽ ˽ ˽ ˽ ˽1234.57'

    1234.5678 (en formato decimal)

  • Ejemplo: '+%9.3G' convierte un valor ASCII con una anchura de nueve caracteres, precisión de tres caracteres después del punto decimal, número en coma flotante, exponencial mayúsculas (válido solo para PLC de 32 bits)

    Datos ASCII

    Resultado de la conversión en datos binarios

    '˽ ˽ ˽1.E+03'

    1234 (en formato decimal)

  • Para FP_BIN_TO_ASCII: es posible añadir cualquier cadena de caracteres a la conversión

    Ejemplo: '+%8dPANA' convierte un valor ASCII con una anchura de ocho caracteres, número decimal, se añade 'PANA' (válido solo para PLC de 32 bits)

    Datos ASCII

    Resultado de la conversión en datos binarios

    '˽ ˽ ˽ ˽ ˽100PANA'

    100 (en formato decimal)

Banderas de error

sys_bIsOperationErrorHold (pasa a TRUE y permanece TRUE)
  • si existe un error en el control trama de caracteres especificado por sFormat.

  • si se ha especificado la dirección directa (+) en sFormat cuando el formato es decimal.

  • si el número de caracteres ASCII por unidad convertida especificada por n_Conversions es superior a 4 para datos de 16 bits u 8 para datos de 32 bits cuando s1_Format ha especificado un forma hexadecimal.

  • si se ha especificado un 0 para el número de unidades de 16 o 32 bits (1 o 2 palabras) a convertir en n_Conversions.

  • si la cantidad de números decimales de 16 o 32 bits a convertir especificada por n_Conversions excede el área para guardar datos ASCII.

  • si el resultado de la conversión excede el área.

sys_bIsOperationErrorNonHold (pasa a TRUE para un ciclo de scan)
  • si existe un error en el control trama de caracteres especificado por sFormat.

  • si se ha especificado la dirección directa (+) en sFormat cuando el formato es decimal.

  • si el número de caracteres ASCII por unidad convertida especificada por n_Conversions es superior a 4 para datos de 16 bits u 8 para datos de 32 bits cuando s1_Format ha especificado un forma hexadecimal.

  • si se ha especificado un 0 para el número de unidades de 16 o 32 bits (1 o 2 palabras) a convertir en n_Conversions.

  • si la cantidad de números decimales de 16 o 32 bits a convertir especificada por n_Conversions excede el área para guardar datos ASCII.

  • si el resultado de la conversión excede el área.

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;
		sExample1: STRING[32]:='*1234,5678,';
		arrayValuesExample1: ARRAY [0..1] OF UINT:=[2(0)];
	END_VAR

Cuerpo de la POU

Cuando la variable bStart pasa a TRUE, se ejecuta la instrucción. Convierte a binario 2 x 4 caracteres ASCII decimal. Offset = 1 carácter ASCII (8-bit).

Cuerpo LD

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 8 ;
        NETWORK_BODY
B(B_VARIN,,'%d~',26,2,28,4,);
B(B_VARIN,,2,26,4,28,6,);
B(B_VARIN,,1,26,5,28,7,);
B(B_VAROUT,,arrayValuesExample1,41,2,43,4,);
B(B_F,Adr_Of_VarOffs_I!,,14,2,23,6,,?D@'Var'?DOffs?CAdr);
B(B_VARIN,,sExample1,12,3,14,5,);
B(B_VARIN,,2,12,4,14,6,);
B(B_F,FP_ASCII_TO_BIN!,,28,0,41,7,,?DEN?hs1_Format?ds2_AsciiData?dn_Conversions?dn_AsciiDataStartPosition?AENO?cd_BinaryData);
B(B_CONTACT,,bStart,5,1,7,3,);
L(23,4,28,4);
L(7,2,28,2);
L(1,2,5,2);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Cuerpo en ST

If (bStart) then
    FP_ASCII_TO_BIN(s1_Format := '%d,',
                s2_AsciiData := Adr_Of_VarOffs(Var := sExample1, Offs := 2),
                n_Conversions := 2, 
                n_AsciiDataStartPosition := 1,
                d_BinaryData => arrayValuesExample1);
End_if;

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