FP_ENCODE

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.

Parámetros

Entrada

s1_Start (WORD)

Área de 16 bits inicial a codificar (fuente)

s2_Control (WORD)

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

Salida

d_Start (WORD)

Área de 16 bits para almacenar el resultado de la codificación

Observaciones

  • 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

    1.  (1) Fuente
    2.  (2) Posición del bit
    3.  (3) 32 bits como lo especifica 16#0005
    4.  (4) El 8o bit de los datos de 32 bits es TRUE.
    5.  (5) Destino

      El resultado codificado 8 (decimal) se guarda en d_Start cuando el trigger EN es TRUE.

    6.  (6) Posición del bit inicial
    7.  (7) La posición del bit 8-15 se rellena con ceros.
    8.  (8) Resultado codificado: 8

    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.

    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 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

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 los datos a codificar son todos cero.

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 los datos a codificar son todos cero.

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#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

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 := 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

Cuerpo en ST

IF bStart then
    FP_ENCODE(s1_Start := wInput_value, 
              s2_Control := wControlCode, 
              d_Start => wOutput_value);
END_IF;

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