Comprobar datos ASCII
Estas instrucciones FP comprueban si los códigos ASCII guardados en el área especificada por s2_AsciiData pueden convertirse correctamente utilizando el método de conversión especificado por s1_Format.
Si los resultados son correctos, la variable del sistema sys_bIsEqual y la salida d_IsValid se activan.
Si los resultados son incorrectos, la variable del sistema sys_bIsEqual y la salida d_IsValid se desactivan.
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
TRUE, si los datos ASCII constan de números binarios que pueden convertirse al formato deseado
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)
Datos ASCII válidos para este ejemplo: '˽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)
Datos ASCII válidos para este ejemplo: '˽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)
Datos ASCII válidos para este ejemplo: '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)
Datos ASCII válidos para este ejemplo: '+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)
Datos ASCII válidos para este ejemplo: '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)
Datos ASCII válidos para este ejemplo: '˽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)
Datos ASCII válidos para este ejemplo: '˽ ˽ ˽ ˽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)
Datos ASCII válidos para este ejemplo: '˽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)
Datos ASCII válidos para este ejemplo: '˽ ˽ ˽ ˽ ˽ ˽ ˽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)
Datos ASCII válidos para este ejemplo: '˽ ˽ ˽100'
Rango admisible para el valor antes del especificador:
'˽ ˽ ˽ ˽ ˽100PANA'
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 válidos para este ejemplo: '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)
Datos ASCII válidos para este ejemplo: '˽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)
Datos ASCII válidos para este ejemplo: '˽ ˽ ˽-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)
Datos ASCII válidos para este ejemplo: '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)
Datos ASCII válidos para este ejemplo: '˽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)
Datos ASCII válidos para este ejemplo: '˽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)
Datos ASCII válidos para este ejemplo: '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)
Datos ASCII válidos para este ejemplo: '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)
Datos ASCII válidos para este ejemplo: '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)
Datos ASCII válidos para este ejemplo: '˽ ˽ ˽ ˽ ˽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)
Datos ASCII válidos para este ejemplo: '˽ ˽ ˽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)
Datos ASCII válidos para este ejemplo: '˽ ˽ ˽ ˽ ˽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;
sExample1: STRING[32]:='*1234,5678,';
bIsAsciiValid: BOOL:=FALSE;
END_VAR
Si bStart se encuentra a TRUE, las instrucciones comprueban si los datos conectados en s2_AsciiData pueden convertirse a datos decimales cuando la cadena de formato es '%d'.
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_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_VAROUT,,bIsAsciiValid,41,2,43,4,);
B(B_F,FP_ASCII_CHECK!,,28,0,41,7,,?DEN?hs1_Format?ds2_AsciiData?dn_Conversions?dn_AsciiDataStartPosition?AENO?cd_IsValid);
B(B_CONTACT,,bStart,5,1,7,3,);
L(23,4,28,4);
L(1,2,5,2);
L(7,2,28,2);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
END_BODY
If (bStart) then
FP_ASCII_CHECK(s1_Format := '%d,',
s2_AsciiData := Adr_Of_VarOffs(Var := sExample1, Offs := 2),
n_Conversions := 2,
n_AsciiDataStartPosition := 1,
d_IsValid => bIsAsciiValid);
End_if;