Registre à décalage bidirectionnel (gauche/droite)
Décale un bit de la zone de données de 16 bits vers la gauche ou vers la droite.
Entrée
Déclencheur droite/gauche : indique la direction du décalage
Indique l’état du signal pour le décalage.
État du signal = TRUE = 1 : lorsque l’entrée est TRUE
Active le décalage.
Décale un bit vers la gauche ou vers la droite lorsque le front montant du déclencheur est détecté (FALSE®TRUE).
Met tous les bits de la zone de données spécifiée par d1_Start et d2_End à zéro lorsque le déclencheur est TRUE.
Réinitialise les données dans la zone spécifiée par d1_Start et d2_End.
Adresse de fin de la zone de 16 bits
Adresse de départ de la zone de 16 bits
Sortie
Bit décalé
Décalage vers la gauche
Bit décalé transféré vers R9009 (drapeau "retenu").
LeftDirection : TRUE ; ShiftTrigger : FALSE, TRUE
Lorsque DataInput est TRUE, “1” est décalé vers la position du bit 0.
Lorsque DataInput est FALSE, “0” est décalé vers la position du bit 0.
Décalage vers la droite
LeftDirection : FALSE ; ShiftTrigger : FALSE, TRUE
Bit décalé transféré vers R9009 (drapeau "retenu").
Lorsque DataInput est TRUE, “1” est décalé vers la position du bit 15.
Lorsque DataInput est FALSE, “0” est décalé vers la position du bit 15.
Les variables d1_Start et d2_End doivent être du même type de données.
Cette fonction n’a pas besoin de variable en sortie Carry.
Ce registre à décalage bidirectionnel permet de décaler 1 bit de la zone de données spécifiée vers la gauche (décalage en direction du bit de poids fort). ou vers la droite (décalage en direction du bit de poids fort).
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
data_array: ARRAY [0..2] OF INT:=[2#0000000000000001,2#0011111111111111,2#0011111111111110];
enable_leftShift: BOOL:=FALSE;
(*function shifts left if TRUE,
else it shifts right*)
reset: BOOL:=FALSE;
(*if TRUE, the whole array
will be set to zero*)
input: BOOL:=TRUE;
(*specifies the new shift-in data*)
shift_trigger: BOOL:=FALSE;
(*activates the function at a 0->1
leading edge*)
carry_out_value: BOOL:=FALSE;
(*result after a 0->1 leading edge
from shift_trigger: 1.
After the next cycle the value will be
set back to zero.*)
END_VAR
Lorsque la variable enable_leftShift est sur TRUE, la fonction décale vers la gauche sinon vers la droite.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 9 ;
NETWORK_BODY
B(B_F,F119_LRSR!,Instanz,12,1,22,9,,?DLeftDirection?DDataInput?DShiftTrigger?DReset?Dd1_Start?Dd2_End?ACarry);
B(B_CONTACT,,enable_leftShift,7,2,9,4,);
B(B_VARIN,,input,9,3,11,5,);
B(B_VARIN,,shift_trigger,9,4,11,6,);
B(B_VARIN,,reset,9,5,11,7,);
B(B_VARIN,,data_array[0],9,6,11,8,);
B(B_VARIN,,data_array[2],9,7,11,9,);
B(B_VAROUT,,carry_out_value,22,2,24,4,);
L(1,3,7,3);
L(9,3,12,3);
L(11,4,12,4);
L(11,5,12,5);
L(11,6,12,6);
L(11,7,12,7);
L(11,8,12,8);
L(1,0,1,9);
END_NETWORK_BODY
END_NET_WORK
END_BODY
carry_out_value:=F119_LRSR( LeftDirection:= enable_leftShift,
DataInput:= input,
ShiftTrigger:= shift_trigger,
Reset:= reset,
d1_Start:= data_array[0],
d1_End:= data_array[2]);