F109_BITL

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

Esta función desplaza a la izquierda 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 F109_BITL es equivalente a F111_WSHL.

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 y d2 deben ser del mismo tipo.

  1.  (1) Rango de datos especificado
  2.  (2) start: TRUE
  3.  (3) n bits final 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#2340,16#6781,16#9012]*)
	END_VAR

Cuerpo de la POU

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

Desplaza a la izquierda 4 bits (equivalentes a una posición en representación hexadecimal). Se rellena con ceros los 4 bits desplazados en data_field[0]. Se asigna la constante 4 directamente en la entrada de la función n. También se puede declarar una variable de entrada en la cabecera de la POU.

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,,4,7,2,9,4,);
B(B_VAROUT,,data_field[0],16,2,18,4,);
B(B_VAROUT,,data_field[2],16,3,18,5,);
B(B_CONTACT,,start,3,1,5,3,R);
B(B_F,F109_BITL!,Instance,9,0,16,5,,?DEN?Dn?AENO?Cd1_Start?Cd2_End);
L(1,0,1,5);
L(1,2,3,2);
L(5,2,9,2);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Cuerpo en ST

IF DF(start) then
    F109_BITL( n:=4,
         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