FP_SHR_BLOCK

Desplazar el bloque de datos hacia la derecha

Esta instrucción FP desplaza el rango de datos especificado por d1_Start y d2_End el número de bits especificado por n_Bits hacia la derecha (hacia la posición más baja) si el trigger EN es TRUE.

Las posiciones vacías se rellenan con ceros.

  • Para n_Bits = 0, no se produce el desplazamiento.

  • Para n_Bits = 16, se produce un desplazamiento de una palabra como con FP_WSHR_BLOCK.

Parámetros

Entrada

n_Bits (WORD, INT, UINT)

Número de bits (rango admisible: 0–15)

Salida

d1_Start (BOOL)

Dirección de inicio

d2_End (BOOL)

Dirección final

Banderas de error

sys_bIsOperationErrorHold (pasa a TRUE y permanece TRUE)
  • si el área especificada utilizando el modificador índice supera el límite.
  • si d1_Start > d2_End

  • si n_Bits ³ 16

sys_bIsOperationErrorNonHold (pasa a TRUE para un ciclo de scan)
  • si el área especificada utilizando el modificador índice supera el límite.
  • si d1_Start > d2_End

  • si n_Bits ³ 16

Ejemplo

Variables Globales

En la Lista de Variables Globales, se definen las variables a las que pueden acceder todas las POUs del proyecto.

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*)
	END_VAR
	VAR_EXTERNAL
		bStartAddress: BOOL:=FALSE;
		bEndAddress: BOOL:=FALSE;
	END_VAR

Cuerpo LD

Cuando la variable bStart pasa de FALSE 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 := 6 ;
        NETWORK_BODY
B(B_VARIN,,3,6,3,8,5,);
B(B_CONTACT,,bStart,3,2,5,4,R);
B(B_F,FP_SHR_BLOCK!,,8,1,17,6,,?DEN?Dn_Bits?AENO?Cd1_Start?Cd2_End);
B(B_VAROUT,,bStartAddress,17,3,19,5,);
B(B_VAROUT,,bEndAddress,17,4,19,6,);
L(1,3,3,3);
L(5,3,8,3);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Cuerpo en ST

IF DF(start) then
    FP_SHR_BLOCK(n_Bits := 3, 
                 d1_Start => bStartAddress, 
                 d2_End => bEndAddress);
END_IF;

Modificado el: 2023-05-16Comentarios sobre esta páginaLínea directa de Panasonic