FP_DECODE

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.

Parámetros

Entrada

s1_Start (WORD)

Área fuente o constante equivalente a decodificar

s2_Control (WORD)

Palabra de control que especifica la posición del bit inicial y el número de bits a decodificar

Salida

d_Start (WORD)

Dirección de inicio para guardar datos decodificados (destino)

Observaciones

  • Las variables s1_Start, s2_Control y d_Start tienen que ser del mismo tipo de datos.

  • Ejemplos2_Control=16#404

    1.  (1) Fuente
    2.  (2) Posición del bit
    3.  (3) Posición del bit 4
    4.  (4) 4 bits (bit 4–7, binario: 2#0111 o decimal: 7) de s1_Start se decodifican cuando el trigger es TRUE
    5.  (5) Destino

      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.

    1.  (1) Dato de 16 bits
    2.  (2) Número de bit 0-15

    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

Banderas de error

sys_bIsOperationErrorHold (pasa a TRUE y permanece TRUE)
  • 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.

sys_bIsOperationErrorNonHold (pasa a TRUE para un ciclo de scan)
  • 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.

Ejemplo

Cabecera de la POU

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

Cuerpo de la POU

Cuando la variable bStart se encuentra a TRUE, se ejecuta la función.

Cuerpo LD

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

Cuerpo en ST

IF start then
    FP_DECODE(s1_Start := wInput_value, 
              s2_Control := wControlCode, 
              d_Start => wConversionResult);
END_IF;

Modificado el: 2024-10-18Comentarios sobre esta páginaLínea directa de Panasonic