FP_BIN_TO_ASCII

Convertir binario -> ASCII

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

Parámetros

Entrada

s1_Format (STRING)

Control y formato trama de caracteres entre comillas simples

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

Dirección de inicio para guardar datos binarios

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_AsciiData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)

Dirección de inicio para guardar datos ASCII

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 binario en un valor con una anchura de cuatro caracteres en mayúsculas en sentido positivo (válido para PLCs de 16 bits/32 bits)

    Dato binario

    Resultado de la conversión a datos ASCII

    16#12A

    '˽12A'

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

    Dato binario

    Resultado de la conversión a datos ASCII

    16#B2A

    '˽B2A'

  • Ejemplo: '%06d' convierte un valor binario en un valor con una anchura de seis caracteres, valor decimal con tres ceros al principio (válido solo para PLC de 32 bits)

    Dato binario

    Resultado de la conversión a datos ASCII

    16#100

    '000100'

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

    Dato binario

    Resultado de la conversión a datos ASCII

    100

    '+100 ˽ ˽'

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

    Dato binario

    Resultado de la conversión a datos ASCII

    100

    '100˽ ˽ ˽'

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

    Dato binario

    Resultado de la conversión a datos ASCII

    100

    '˽100'

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

    Dato binario

    Resultado de la conversión a datos ASCII

    123.45678

    '˽ ˽ ˽ ˽123.'

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

    Dato binario

    Resultado de la conversión a datos ASCII

    123.45599

    '˽123.456'

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

    Dato binario

    Resultado de la conversión a datos ASCII

    -100

    '˽ ˽ ˽ ˽ ˽ ˽ ˽100'

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

    Dato binario

    Resultado de la conversión a datos ASCII

    100

    '˽ ˽ ˽100'

    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)

    Dato binario

    Resultado de la conversión a datos ASCII

    100

    '100,'

    • 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 binario en un valor con una anchura de cuatro caracteres, requiere DINT o DWORD para el resultado convertido (válido para PLCs de 16 bits/32 bits)

    Dato binario

    Resultado de la conversión a datos ASCII

    100

    '˽100'

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

    Dato binario

    Resultado de la conversión a datos ASCII

    -100

    '˽ ˽ ˽-100'

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

    Dato binario

    Resultado de la conversión a datos ASCII

    100

    '000100'

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

    Dato binario

    Resultado de la conversión a datos ASCII

    16#12A

    '˽12A'

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

    Dato binario

    Resultado de la conversión a datos ASCII

    16#123

    '˽123'

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

    Dato binario

    Resultado de la conversión a datos ASCII

    1.2345

    '1.23˽'

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

    Dato binario

    Resultado de la conversión a datos ASCII

    1234.5678

    '1.235e+03'

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

    Dato binario

    Resultado de la conversión a datos ASCII

    1234.5678

    '1.235E+03'

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

    Dato binario

    Resultado de la conversión a datos ASCII

    1234.5678

    '˽ ˽ ˽ ˽ ˽1234.57'

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

    Dato binario

    Resultado de la conversión a datos ASCII

    1234

    '˽ ˽ ˽1.E+03'

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

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

    Dato binario

    Resultado de la conversión a datos ASCII

    100

    '˽ ˽ ˽ ˽ ˽100PANA'

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;
		iArray1: ARRAY [0..1] OF INT:=[1234,-56];
		iAscii1: ARRAY [0..4] OF WORD:=[5(16#FFFF)];
	END_VAR

Cuerpo de la POU

Cuando la variable bStart pasa de FALSE a TRUE, se ejecuta la función. Convierte dos unidades de 16 bits a 2 x 4 datos ASCII decimales. 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 := 10 ;
        NETWORK_BODY
B(B_VARIN,,'%4d',10,5,12,7,);
B(B_VARIN,,iArray1,10,6,12,8,);
B(B_VARIN,,2,10,7,12,9,);
B(B_VAROUT,,iAscii1,25,5,27,7,);
B(B_CONTACT,,bStart,7,4,9,6,R);
B(B_COMMENT,,Converts two 16-bit units to 2x4 decimal ASCII data. Offset = 1 ASCII character (8-bit).,5,1,38,3,);
B(B_F,FP_BIN_TO_ASCII!,,12,3,25,10,,?DEN?hs1_Format?ds2_BinaryData?dn_Conversions?dn_AsciiDataStartPosition?AENO?cd_AsciiData);
B(B_VARIN,,1,10,8,12,10,);
B(B_COMMENT,,Result iAscii1: 'x1234 -56x',28,8,41,9,);
L(9,5,12,5);
L(1,5,7,5);
L(1,0,1,10);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Cuerpo en ST

IF DF(bStart) then
    FP_BIN_TO_ASCII(s1_Format := '%4d', 
        s2_BinaryData := iArray1, 
        n_Conversions := 2, 
        d_AsciiData => iAscii1);
END_IF;

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