Decodificar hexadecimal -> estado de bit
Estas instrucciones FP decodifican el contenido de datos especificado por s1_Start conforme al contenido de s2_Control si la entrada de trigger EN se encuentra TRUE. El resultado de la decodificación se guarda en el área que comienza desde d_Start.
FP_DECODE es la instrucción inversa de FP_ENCODE.
Entrada
Área fuente o constante equivalente a decodificar
Palabra de control que especifica la posición del bit inicial y el número de bits a decodificar
Salida
Dirección de inicio para guardar datos decodificados (destino)
Las variables s1_Start, s2_Control y d_Start tienen que ser del mismo tipo de datos.
Ejemplos2_Control=16#404
Los datos decodificados TRUE se guardan en la posición del bit 7 de d_Start.
Todos los bits, excepto el 7, se rellenan con ceros.
Se decodifica el contenido del segmento de 2^nL bits desde el bit nH del área especificada por s1_Start (donde nL es el número de bits a decodificar).
Los resultados decodificados se guardan en los segmentos de 2^nL bits a partir del área especificada por d_Start (donde nH es el bit inicial de la conversión). Los bits no válidos del área especificada para el resultado se rellenan con ceros.
Descripción de s2_Control
s2_Control indica el bit inicial y el número de bits a decodificar utilizando un formato hexadecimal.
Los bits marcados con "-" no son válidos. |
|||||
Valor de preselección 16#0–16#F |
(3) Posición del bit inicial a decodificar |
Valor de preselección 16#0–16#8 |
(4) Número de bits decodificados |
||
16#0 |
0 |
16#0 |
0 |
||
16#1 |
1 |
16#1 |
1 |
||
16#2 |
2 |
16#2 |
2 |
||
16#3 |
3 |
16#3 |
3 |
||
16#4 |
4 |
16#4 |
4 |
||
16#5 |
5 |
16#5 |
5 |
||
16#6 |
6 |
16#6 |
6 |
||
16#7 |
7 |
16#7 |
7 |
||
16#8 |
8 |
16#8 |
8 |
||
16#9 |
9 |
||||
16#A |
10 |
||||
16#B |
11 |
||||
16#C |
12 |
||||
16#D |
13 |
||||
16#E |
14 |
||||
16#F |
15 |
Equivalencia entre el número de bits y el área que va a ocupar el resultado decodificado
Número de bits a decodificar |
Área necesaria para el resultado |
Número de bits decodificados (resultado) |
---|---|---|
1 |
1 palabra |
2 bits 1) |
2 |
1 palabra |
4 bits 1) |
3 |
1 palabra |
8 bits 1) |
4 |
1 palabra |
16 bits |
5 |
2 palabras |
32 bits |
6 |
4 palabras |
64 bits |
7 |
8 palabras |
128 bits |
8 |
16 palabras |
256 bits |
1) Los bits no válidos del área de datos necesarios para el resultado se rellenan con ceros.
Ejemplo de datos decodificados
Cuando se decodifican datos de 4 bits, a continuación se muestran los datos de 16 bits del resultado decodificado.
Condición de decodificación: s2_Control
Posición 0 del bit inicial: 16#0
Número de bits a decodificar: 16#4 (4 bits)
Datos a decodificar (4 bits) |
Resultado decodificado |
|
---|---|---|
Hex. |
Dec. |
|
16#0000 |
0 |
0000 0000 0000 0001 |
16#0001 |
1 |
0000 0000 0000 0010 |
16#0010 |
2 |
0000 0000 0000 0100 |
16#0011 |
3 |
0000 0000 0000 1000 |
16#0100 |
4 |
0000 0000 0001 0000 |
16#0101 |
5 |
0000 0000 0010 0000 |
16#0110 |
6 |
0000 0000 0100 0000 |
16#0111 |
7 |
0000 0000 1000 0000 |
16#1000 |
8 |
0000 0001 0000 0000 |
16#1001 |
9 |
0000 0010 0000 0000 |
16#1010 |
10 |
0000 0100 0000 0000 |
16#1011 |
11 |
0000 1000 0000 0000 |
16#1100 |
12 |
0001 0000 0000 0000 |
16#1101 |
13 |
0010 0000 0000 0000 |
16#1110 |
14 |
0100 0000 0000 0000 |
16#1111 |
15 |
1000 0000 0000 0000 |
si el área especificada utilizando el modificador índice supera el límite.
si 1 £ nL £ 8, siendo nL el número de bits a codificar/decodificar.
si 1 £ nH + nL £ 16, siendo nH el bit inicial de conversión, y nL el número de bits a codificar/decodificar.
si el área de memoria utilizada por el resultado de la decodificación excede el límite.
si el área especificada utilizando el modificador índice supera el límite.
si 1 £ nL £ 8, siendo nL el número de bits a codificar/decodificar.
si 1 £ nH + nL £ 16, siendo nH el bit inicial de conversión, y nL el número de bits a codificar/decodificar.
si el área de memoria utilizada por el resultado de la decodificación excede el límite.
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;
(*activates the function*)
wInput_value: WORD:=2#1100011000011110;
wControlCode: WORD:=16#0003;
(*specifies decoding*)
wConversionResult: WORD:=0;
(*result after a 0->1 leading
edge from start:
2#0000000001000000*)
END_VAR
Cuando la variable bStart se encuentra a TRUE, se ejecuta la función.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_CONTACT,,bStart,8,1,10,3,);
B(B_VARIN,,wInput_value,11,2,13,4,);
B(B_VARIN,,wControlCode,11,3,13,5,);
B(B_VAROUT,,wConversionResult,21,2,23,4,);
B(B_F,FP_DECODE!,,13,0,21,5,,?DEN?Ds1_Start?Ds2_Control?AENO?Cd_Start);
L(10,2,13,2);
L(1,2,8,2);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
FP_DECODE(s1_Start := wInput_value,
s2_Control := wControlCode,
d_Start => wConversionResult);
END_IF;