F108_BITR

Desplazamiento a la derecha de varios bits en un bloque de datos de 16 bits

Esta función desplaza a la derecha los bits especificados dentro del rango determinado por las salidas d1 y d2. El número de bits a desplazar se especifica en n. El valor puede estar entre 0 y 16. Los bits desplazados se ponen a 0. Si la entrada n = 0, no se produce el desplazamiento. Cuando la entrada n = 16, se produce el desplazamiento de una palabra WORD, es decir, en este caso la función F108_BITR es equivalente a F110_WHSL.

Parámetros

Entrada

n (INT)

Número de bits a desplazar

Salida

d1_Start (WORD, INT, UINT)

Área de inicio de 16 bits

d2_End (WORD, INT, UINT)

Área final de 16 bits

Observaciones

  • En lugar de utilizar esta instrucción F, se recomienda utilizar la instrucción FP7 correspondiente:

  • Las direcciones de las variables en las entradas d1_Start y d2_End deben ser del mismo tipo.

  1.  (1) Rango de datos especificado
  2.  (2) start: TRUE
  3.  (3) n bits se desplazan
  4.  (4) n bits

Banderas de error

sys_bIsOperationErrorHold (pasa a TRUE y permanece TRUE)

si las direcciones de las salidas d1_Start > d2_End ó n³ 16.

sys_bIsOperationErrorNonHold (pasa a TRUE para un ciclo de scan)

si las direcciones de las salidas d1_Start > d2_End ó n³ 16.

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
		start: BOOL:=FALSE;
			(*activates the function*)
		data_array: ARRAY [0..2] OF WORD:=[16#1234,16#5678,16#9012];
			(*result after a 0->1 leading edge
from start:
[16#8123,16#0567,16#9012]*)
	END_VAR

En este ejemplo se ha declarado la variable de entrada number_bits. Sin embargo, se puede introducir una constante directamente en la entrada de la función.

Cuerpo de la POU

Cuando la variable start pasa de FALSE a TRUE, se ejecuta la función.

Desplaza a la derecha 4 bits (equivalentes a una posición en representación hexadecimal). Se rellena con ceros los 4 bits desplazados en data_field[2].

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_VARIN,,number_bits,5,2,7,4,);
B(B_VAROUT,,data field[0],16,2,18,4,);
B(B_VAROUT,,data field[2],16,3,18,5,);
B(B_F,F108_BITR,,7,0,16,5,,?DEN?Dn?AENO?Cd1?Cd2);
B(B_CONTACT,,output,3,1,5,3,R);
L(1,0,1,5);
L(1,2,3,2);
L(5,2,7,2);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Cuerpo en ST

IF DF(start) then
    F108_BITR( n:=number_bits,
         d1_Start=> data_field[0],
         d2_End=> data_field[2]);
END_IF;

Cuerpo IL

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