Convertir BCD -> ASCII
Estas instrucciones FP convierten el código BCD de s1 a un código ASCII si la entrada de trigger EN es TRUE. s2_Control especifica el número de bytes a convertir y la dirección de conversión.
El resultado se guarda en el área especificada por d_Start. El código ASCII necesita 8 bits (1 byte) para representar 1 carácter BCD. Después de la conversión a ASCII, la longitud de los datos será por tanto el doble de la longitud de los datos de origen.
Entrada
Código BCD
Número de bytes y dirección de conversión
Salida
Dirección de inicio del área de datos para los resultados. El tamaño es n_Bits * 2 palabras.
Especificación del código de control s2_Control
16 bits: 1–2 bytes a convertir
32 bits: 1–4 bytes a convertir
0: directo
1: inverso
Cuando se almacenan, se intercambian los dos caracteres que forman un byte. Los dos bytes se convierten como un solo segmento de datos.
Dirección directa:
Dirección inversa:
Códigos ASCII HEX para representar caracteres BCD:
Carácter BCD |
Código ASCII HEX |
---|---|
0123456789 |
16#3016#31 16#32 16#33 16#34 16#35 16#36 16#37 16#38 16#39 |
si el área especificada utilizando el modificador índice supera el límite.
si los datos especificados por s1_Start no son datos BCD
si el número de bytes especificado por s2_Control es superior al área especificada por s1_Start
si el resultado de la conversión es superior al área de datos especificada por d_Start
si s2_Control = 0
si la dirección de conversión está fuera de rango
si el número de bytes especificado en s2_Control es superior a 4
si el área especificada utilizando el modificador índice supera el límite.
si los datos especificados por s1_Start no son datos BCD
si el número de bytes especificado por s2_Control es superior al área especificada por s1_Start
si el resultado de la conversión es superior al área de datos especificada por d_Start
si s2_Control = 0
si la dirección de conversión está fuera de rango
si el número de bytes especificado en s2_Control es superior a 4
Offset |
Caracteres BCD |
Offset |
Códigos ASCII convertidos |
Equivalente BCD |
|||
s1 |
0 |
16#1234 |
Þ |
d_Start |
0 |
16#3433 |
43 |
s2_Control |
16#0002 |
16#3231 |
21 |
||||
Offset |
Caracteres BCD |
Offset |
Códigos ASCII convertidos |
Equivalente BCD |
|||
s1 |
0 |
16#1234 |
Þ |
d_Start |
0 |
16#3231 |
21 |
s2_Control |
16#1002 |
16#3433 |
43 |
||||
Offset |
Caracteres BCD |
Offset |
Códigos ASCII convertidos |
Equivalente BCD |
|||
s1 |
0 |
16#5678 |
Þ |
d_Start |
0 |
16#3837 |
87 |
1 |
16#1234 |
1 |
16#3635 |
65 |
|||
s2_Control |
16#0004 |
16#3433 |
43 |
||||
16#3231 |
21 |
Offset |
Caracteres BCD |
Offset |
Códigos ASCII convertidos |
Equivalente BCD |
|||
s1 |
0 |
16#5678 |
Þ |
d_Start |
0 |
16#3231 |
21 |
1 |
16#1234 |
1 |
16#3433 |
43 |
|||
s2_Control |
16#1004 |
16#3635 |
65 |
||||
16#3837 |
87 |
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;
wInput: WORD:=16#1234;
awResult: ARRAY [0..2] OF WORD:=[3(0)];
END_VAR
Cuando la variable bStart se encuentra a TRUE, se ejecuta la función. Se convierten dos bytes de s1_Start a un valor ASCII en dirección inversa.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 8 ;
NETWORK_BODY
B(B_COMMENT,,After conversion: ø^awResult[0]=16#3231ø^awResult[1]=16#3433ø^awResult[2] is not written,24,1,39,5,);
B(B_CONTACT,,bStart,4,4,6,6,R);
B(B_F,FP_BCD_TO_ASCII!,,12,3,22,8,,?DEN?D@'s1'?Ds2_Control?AENO?Cd_Start);
B(B_VARIN,,wInput,10,5,12,7,);
B(B_VAROUT,,awResult[0],22,5,24,7,);
B(B_VARIN,,16#1002,10,6,12,8,);
L(1,0,1,8);
L(1,5,4,5);
L(6,5,12,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
If (DF(bStart)) Then
FP_BCD_TO_ASCII(s1 := wInput, s2_Control := 16#1002,
d_Start => awResult[0]);
(* After conversion:
awResult[0]=16#3231
awResult[1]=16#3433
awResult[2] is not written *)
End_if;