Codificar estado de bit -> hexadecimal
Estas instrucciones FP codifican el contenido de los datos especificado por s1_Start conforme al contenido de s2_Control si la entrada de trigger EN es TRUE. El resultado codificado se guarda en el área de destino de 16 bits especificada por d_Start que comienza con la posición del bit especificada. Los bits no válidos del área especificada para el resultado codificado se rellenan con ceros.
FP_ENCODE es la instrucción inversa de FP_DECODE.
Entrada
Área de 16 bits inicial a codificar (fuente)
Palabra de control que especifica la posición del bit inicial y el número de bits a codificar
Salida
Área de 16 bits para almacenar el resultado de la codificación
Las variables s1_Start, s2_Control y d_Start tienen que ser del mismo tipo de datos.
Ejemplo con s2_Control=16#0005
16# |
0 |
0 |
0 |
5 |
|
↑ |
↑ |
Número de bits a codificar: 25=32 bits |
|||
Posición del bit inicial de los datos a codificar: posición del bit 0 |
El resultado codificado 8 (decimal) se guarda en d_Start cuando el trigger EN es TRUE.
Descripción del proceso
Se codifica el contenido del segmento de 2^nL bits al principio del área especificada por s1_Start (donde nL es el número de bits a codificar).
El resultado codificado se guarda como datos decimales en los ocho bits, a partir del bit especificado como bit nH (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 especifica la posición del bit inicial de los datos destino y el número de bits a codificar utilizando datos hexadecimales.
Los bits marcados con "-" no son válidos. |
|||||
Valor de preselección 16#0–16#F |
(3) Posición del bit inicial de los datos destino codificados |
Valor de preselección 16#0–16#8 |
(4) Número de bits codificados |
||
16#0 |
0 |
16#1 |
2 |
||
16#1 |
1 |
16#2 |
4 |
||
16#2 |
2 |
16#3 |
8 (1 byte) |
||
16#3 |
3 |
16#4 |
16 (1 palabra) |
||
16#4 |
4 |
16#5 |
32 (2 palabras) |
||
16#5 |
5 |
16#6 |
64 (4 palabras) |
||
16#6 |
6 |
16#7 |
128 (8 palabras) |
||
16#7 |
7 |
16#8 |
256 (16 palabras) |
||
16#8 |
8 |
||||
16#9 |
9 |
||||
16#A |
10 |
||||
16#B |
11 |
||||
16#C |
12 |
||||
16#D |
13 |
||||
16#E |
14 |
||||
16#F |
15 |
Ejemplo de codificación
Cuando se codifican datos de 16 bits (nL=4), los resultados codificados son los que se muestran a continuación.
Datos a codificar (4 bits) |
Resultado codificado |
|
---|---|---|
Hex. |
Dec. |
|
0000 0000 0000 0001 |
16#0000 |
0 |
0000 0000 0000 0010 |
16#0001 |
1 |
0000 0000 0000 0100 |
16#0010 |
2 |
0000 0000 0000 1000 |
16#0011 |
3 |
0000 0000 0001 0000 |
16#0100 |
4 |
0000 0000 0010 0000 |
16#0101 |
5 |
0000 0000 0100 0000 |
16#0110 |
6 |
0000 0000 1000 0000 |
16#0111 |
7 |
0000 0001 0000 0000 |
16#1000 |
8 |
0000 0010 0000 0000 |
16#1001 |
9 |
0000 0100 0000 0000 |
16#1010 |
10 |
0000 1000 0000 0000 |
16#1011 |
11 |
0001 0000 0000 0000 |
16#1100 |
12 |
0010 0000 0000 0000 |
16#1101 |
13 |
0100 0000 0000 0000 |
16#1110 |
14 |
1000 0000 0000 0000 |
16#1111 |
15 |
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 los datos a codificar son todos cero.
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 los datos a codificar son todos cero.
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#0000000001000000;
wControlCode: WORD:=16#0003;
(*specifies the encodation*)
wOutput_value: WORD:=0;
(*result after a 0->1 leading
edge from start:
2#0000000000000110*)
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 := 5 ;
NETWORK_BODY
B(B_CONTACT,,bStart,6,1,8,3,);
B(B_VARIN,,wInput_value,10,2,12,4,);
B(B_VARIN,,wControlCode,10,3,12,5,);
B(B_VAROUT,,wOutput_value,20,2,22,4,);
B(B_F,FP_ENCODE!,,12,0,20,5,,?DEN?Ds1_Start?Ds2_Control?AENO?Cd_Start);
L(1,2,6,2);
L(8,2,12,2);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF bStart then
FP_ENCODE(s1_Start := wInput_value,
s2_Control := wControlCode,
d_Start => wOutput_value);
END_IF;