FP_FORMAT_STRING

Escribir datos formateados en una cadena de resultado

Esta instrucción escribe los datos formateados especificados en Data1 (ampliable a Data16) en una cadena formateada donde el formato está especificado por el control trama de caracteres sFormat.

Entrada

sFormat (STRING)

Control trama de caracteres con especificadores de formato que definen cómo debe crearse la cadena formateada

  • Variable de cadena o constante de caracteres (hasta 256 caracteres) que contiene la definición de cómo debe crearse la cadena.

  • El control trama de caracteres está formado por el texto a formatear, el especificador de formato (%d,%e, etc.), el código de salto de línea (\n) y el código de tabulación (\t).

  • La cadena formateada puede contener hasta 4096 caracteres. Si supera los 4096 caracteres, se producirá un error de operación.

  • Se pueden especificar hasta 16 dígitos para un especificador de formato. Si supera los 16 dígitos, se producirá un error de operación.

  • El número máximo de caracteres tras la conversión de 1 dato es de 32, excluyendo %s y %S. Si supera los 32 caracteres, se producirá un error de operación.

  • Todas las cadenas de caracteres que no se reconocen como un especificador de formato son tratadas como texto a formatear.

Data1 (INT, UINT, WORD, DINT, UDINT, DWORD, REAL, LREAL, STRING)

Datos a formatear

  • Datos de variable que se escribirán en la cadena formateada.

  • Organizar los datos de variable en el orden especificado en el control trama de caracteres.

Salida

Resultado (STRING)

Cadena formateada con datos en formato ASCII.

Observaciones

  • La entrada Data1 se puede expandir hasta un máximo de 16 entradas.

  • El número de entradas Data1..DataN debe ser el mismo que el número de especificadores de formato de la cadena de entradas especificada en sFormat.

  • El tipo de dato de una entrada de DataN debe corresponder con el especificador de formato pertinente en sFormat (ver tabla de abajo).

Explicación y ejemplos de control de trama de caracteres sFormat

sFormat: p. ej., %+12.5d,

Usar los datos de cadena en el formato que se muestra a continuación para especificar el tipo y número de caracteres, y la precisión de la cadena formateada. También se pueden seleccionar diversas opciones (como la inserción de un signo o de espacios) en función del tipo de datos que se vayan a convertir.

Posición en el ejemplo

Descripción

sFormat

Dato binario

Resultado de la conversión a datos ASCII

Comentario

0

relleno de ceros a la izquierda

'%05d'

100

'00100'

cuando se especifica el número de caracteres, se puede utilizar el relleno de ceros a la izquierda añadiendo cero (0) al control de trama de caracteres sFormat en esta posición.

+

añadir un signo positivo

'%+4d'

100

'+100'

ancho de cuatro caracteres, valor decimal, signo + añadido

-

alineación izquierda

'%-6d'

100

'100'

ancho de seis caracteres, valor decimal, alineado a la izquierda

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

'%4d'

100

'100'

ancho de cuatro caracteres, valor decimal relleno con espacios

#

introducir 0x para números hexadecimales

'%#4X'

100

'0X64'

ancho de cuatro caracteres, valor numérico en formato hexadecimal que comienza con 0X

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

'%#8.0f'

123.45678

'123.'

ancho de ocho caracteres, número en coma flotante, cuatro espacios de relleno

12

ancho del elemento de datos ASCII (con o sin coma)

Cuando la anchura es menor que el número de caracteres requerido por este valor, se produce un error de operación. Consultar "Banderas de error".

'%012d'

100

'000000000100'

ancho de 12 caracteres con nueve ceros de relleno

sin ancho:

'%d,'

100

'100,'

no se ha especificado un ancho, se asume una coma

precisión después del punto decimal

.5

cualquier dígito después del punto decimal

'%8.3f'

123.45599

'123.456'

ancho de ocho caracteres, precisión de tres caracteres después del punto decimal

12.5

especificar el número total de caracteres (n) y el número de caracteres de precisión (m) con [n.m], [n] o [.m]. El número de caracteres de precisión (m) cambia según el tipo de datos de conversión.

d , Ld, i , Li, u ,Lu, x , Lx , b, Lb

representa el número de caracteres de las cadenas numéricas.

f, Lf, e, Le, E, LE

representa el número de caracteres después del punto decimal.

g, Lg, G, LG

representa el número de cifras significativas.

Tipo de datos a convertir

'%06d'

100

'100'

d , i , u , x , X , b: número de caracteres en las cadenas numéricas

f: número de caracteres después del punto decimal.

g: número de cifras significativas.

d

entero con signo ® decimal ASCII

'%6d'

100

'000100'

ancho de seis caracteres, valor decimal con tres ceros de relleno

u

entero sin signo ® decimal ASCII

'%10u'

-100

'100'

ancho de 10 caracteres, siete espacios de relleno, entero sin signo

x

entero sin signo ® hexadecimal ASCII

'%4x'

16#12A

'12a'

ancho de cuatro caracteres, número hexadecimal en minúsculas

X

hexadecimal mayúsculas

'%4X'

16#12A

'12A'

ancho de cuatro caracteres, número hexadecimal en mayúsculas

b

entero BCD ® hexadecimal ASCII

'%5b'

16#123

'123'

ancho de cinco caracteres, datos BCD

f

número real de coma flotante ® ASCII coma flotante

'%-6.2f'

1.2345

'1.23'

ancho de seis caracteres, alineado a la izquierda, precisión de dos dígitos después del punto decimal

e

número real de coma flotante ® ASCII notación exponencial

'%9.3e'

1234.5678

'1.235e+03'

ancho de 9 caracteres, precisión de 3 dígitos después del punto decimal, exponencial minúsculas

E

exponencial mayúsculas 1.23E10

'%9.3E'

1234.5678

'1.235E+03'

ancho de 9 caracteres, precisión de 3 dígitos después del punto decimal, exponencial mayúsculas

g

número real de coma flotante ® ASCII de coma flotante o ASCII notación exponencial

'%12g'

1234.5678

'1234.57'

ancho de 12 caracteres, número en coma flotante

G

flotante o exponencial mayúsculas

'%#9.3G'

1234

'1.E+03'

ancho de nueve caracteres, precisión de tres caracteres después del punto decimal

s

Cadena de caracteres ®ASCII

'%10s'

abcdef

'abcdef'

datos de cadena (para el número de caracteres especificado)

S

cadena de caracteres ®ASCII mayúsculas

'%-10S'

abcDEF

'abcDEF'

datos de cadena de caracteres con distinción entre mayúsculas y minúsculas

Datos de conversión del control trama de caracteres sFormat

Control trama de caracteres

Datos binarios antes de la conversión

Datos ASCII después de la conversión

Ejemplo

'%d' o '%i'

Dato de 16 bits (entero con signo)

Datos ASCII decimales

'%d' , '%5d' , '%+5d"

'%-5d' , '%05d' , '%10.5d' , '%d,' , '% d'

'%Ld' o '%Li'

Dato de 32 bits (entero con signo)

'%u'

Dato de 16 bits (entero sin signo)

'%u' , '%5u' , '%+5u'

'%-5u' , '%05u' , '%10.5u' , '%u,'

'%Lu'

Dato de 32 bits (entero sin signo)

'%x'

Dato de 16 bits

Datos ASCII hexadecimales (dirección directa/inversa)

'%x' , '%5x' , '%-5x'

'%05x' , '%10.5x' , '%x,' , '%#x' , '%X'

'%Lx'

Dato de 32 bits

'%b'

Dato BCD de 16 bits

'%b' , '%5b' , '%-5b'

'%05b' , '%10.5b' , '%b,'

'%Lb'

Dato BCD de 32 bits

'%f'

Dato de número real de 32 bits y precisión simple

Datos ASCII en coma flotante

'%f' , '%5.2f' , '%+5.2f'

'%-5.2f' , '%05.2f' , '%f,' , '%#f' , '% f'

'%Lf'

Dato de número real de 64 bits y precisión doble

'%e'

Dato de número real de 32 bits y precisión simple

Datos ASCII de notación exponencial

'%e' , '%5.2e' , '%+5.2e'

'%-5.2e' , '%05.2e' ,'%e,'

'%#5.2e' , '% e' , '%E'

'%Le'

Dato de número real de 64 bits y precisión doble

'%LE'

Dato de número real largo de 64 bits y precisión doble

'%#5.2E' , '% E' , '%E'

'%g'

Dato de número real de 32 bits y precisión simple

Datos ASCII de notación exponencial o datos ASCII de coma flotante (lo que sea más corto en la notación correspondiente)

'%g' , '%5.2g' , '%+5.2g'

'%-5.2g' , '%05.2g' ,'%g," '%#5.2g' , '%G'

'%Lg'

Dato de número real de 64 bits y precisión doble

'%LG'

Dato de número real largo de 64 bits y precisión doble

'%-5.2G' , '%05.2G' ,'%G," '%#5.2G' , '%G'

'%s'

Datos de cadena

Datos de cadena (para el número de caracteres especificado)

'%s' , '%5s' , '%-5s' , '%-05s'

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 resultado de la conversión excede el área.

  • si se especifica el elemento de datos ASCII con una anchura menor que el número de caracteres requerido por el valor

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 resultado de la conversión excede el área.

  • si se especifica el elemento de datos ASCII con una anchura menor que el número de caracteres requerido por el valor

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
		bFormat: BOOL:=FALSE;
		sFormatString: STRING[50]:='Current Value: %6d [Min: %6d, Max: %6d]';
		sFormattedString: STRING[50]:='';
		iCurrentValue: INT:=815;
		iMin: INT:=-16756;
		iMax: INT:=23456;	END_VAR

Cuerpo LD

Cuando la variable bStart pasa de FALSE 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 := 7 ;
        NETWORK_BODY
B(B_CONTACT,,bFormat,7,1,9,3,);
B(B_F,E_FP_FORMAT_STRING-3!,,25,0,36,7,,?DEN?dsFormat?dData1?dData2?dData3?AENO?c);
B(B_VARIN,,sFormatString,23,2,25,4,);
B(B_VAROUT,,sFormattedString,36,2,38,4,);
B(B_VARIN,,iCurrentValue,23,3,25,5,);
B(B_VARIN,,iMin,23,4,25,6,);
B(B_VARIN,,iMax,23,5,25,7,);
L(1,0,1,7);
L(1,2,7,2);
L(9,2,25,2);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Cuerpo en ST

if (bFormat) then
    sFormattedString := FP_FORMAT_STRING(sFormatString,
                                         iCurrentValue, iMin, iMax);
end_if;

Modificado el: 2022-11-15Comentarios sobre esta páginaPanasonic hotline