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.
Las instrucciones FP FP_ASCII_TO_BIN y FP_ASCII_CHECK no diferencian entre mayúsculas y minúsculas
Entrada
Control y formato trama de caracteres entre comillas simples
Dirección de inicio para guardar datos ASCII
Cantidad de números a convertir: 0–65535
Posición inicial en datos ASCII: 0–255
Salida
Dirección de inicio para guardar datos binarios
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 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) |
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;
sExample1: STRING[32]:='*1234,5678,';
arrayValuesExample1: ARRAY [0..1] OF UINT:=[2(0)];
END_VAR
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).
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
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;