FP_SHR_BLOCK

Décaler à droite des blocs de données

Cette instruction FP décale la plage de données spécifiée par d1_Start et d2_End du nombre de bits spécifié par n_Bits vers la droite (vers le bit de poids faible) lorsque le déclencheur EN est TRUE.

Les positions vacantes (vides) sont complétées par des zéros.

  • Lorsque n_Bits = 0, aucun décalage n’est effectué.

  • Lorsque n_Bits = 16, un décalage d’un mot est effectué, comme avec FP_WSHR_BLOCK.

Paramètres

Entrée

n_Bits (WORD, INT, UINT)

Nombre de bits (intervalle autorisé : 0–15)

Sortie

d1_Start (BOOL)

Adresse de départ

d2_End (BOOL)

Adresse finale

Drapeaux d’erreur

sys_bIsOperationErrorHold (passe à TRUE et reste TRUE)
  • Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.
  • Si d1_Start > d2_End

  • Si n_Bits ³ 16

sys_bIsOperationErrorNonHold (passe à TRUE pendant un cycle)
  • Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.
  • Si d1_Start > d2_End

  • Si n_Bits ³ 16

Exemple

GVL

Dans la liste des variables globales, vous définissez des variables qui sont accessibles par tous les POU dans le projet.

En-tête du POU

Toutes les variables d’entrée et de sortie utilisées pour programmer cette fonction ont été déclarées dans l’en-tête du POU.Le même en-tête de POU est utilisé pour tous les langages de programmation.

	VAR
		bStart: BOOL:=FALSE;
			(*activates the function*)
	END_VAR
	VAR_EXTERNAL
		bStartAddress: BOOL:=FALSE;
		bEndAddress: BOOL:=FALSE;
	END_VAR

Corps en LD

La fonction est exécutée lorsque la variable bStart passe de FALSE à TRUE.

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

Corps en ST

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

Modifié le : 2023-05-09Commentaires sur cette pageAssistance téléphonique