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.
Entrada
Control y formato trama de caracteres entre comillas simples
Dirección de inicio para guardar datos binarios
Cantidad de números a convertir: 0–65535
Posición inicial en datos ASCII: 0–255
Salida
Dirección de inicio para guardar datos ASCII
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
|
'%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' |
- |
● |
|
|
'+%8dPANA' |
- |
● |
● disponible en PLCs de 16/32 bits
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' |
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.
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.
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
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).
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
IF DF(bStart) then
FP_BIN_TO_ASCII(s1_Format := '%4d',
s2_BinaryData := iArray1,
n_Conversions := 2,
d_AsciiData => iAscii1);
END_IF;