Déplacer des digits de données
Cette instruction FP déplace le nombre de digits n_Digits de la valeur source s_Source de la position source n_SourcePos vers la position de destination n_DestPos des données de 16 bits spécifiées par d_Dest.
Entrée
Zone de données source
Spécifie la position du digit hexadécimal source (0–3)
Nombre de digits hexadécimaux (1–4)
Spécifie la position du digit hexadécimal de destination (0–3)
Sortie
Zone de données de destination
Si le nombre de digits à partir de la position du digit de départ est supérieur au nombre maximum de digits (n_SourcePos + n_Digits > 4), les digits restant sont décalés vers la position du digit à partir de 0 du même mot.
Les opérandes s1_Start et s2_End doivent être ainsi :
Dans la même zone mémoire, par ex. DT, WR, FL, LD,...
s1_Start £ s2_End
Déplacer plusieurs digits
Déplacer quatre digits
Si une des variables d’entrée/la variable de sortie est en dehors des limites autorisées.
Si une des variables d’entrée/la variable de sortie est en dehors des limites autorisées.
Instructions F correspondantes : F6_DGT
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*)
wInput_value: WORD:=2#1000100010001000;
iSourceBitPosition: INT:=0;
(*digit no.0 locates the position of the source bit (here: 2)*)
iNumberofDigit: INT:=1;
iDestinationBitPosition: INT:=2;
(*digit no.2 locates the position of the destination bit (here: 15)*)
wOutput_value: WORD:=2#1111111111111111;
(*result after a 0->1 leading
edge from start:
2#0111111111111111*)
END_VAR
La fonction est exécutée lorsque la variable bStart est définie sur TRUE.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 8 ;
NETWORK_BODY
B(B_F,FP_MOVE_DIGITS!,,13,1,22,8,,?DEN?Ds_Source?Dn_SourcePos?Dn_Digits?Dn_DestPos?AENO?Cd_Dest);
B(B_VARIN,,wInput_value,11,3,13,5,);
B(B_CONTACT,,bStart,7,2,9,4,);
B(B_VARIN,,iSourceBitPosition,11,4,13,6,);
B(B_VARIN,,iNumberofDigit,11,5,13,7,);
B(B_VARIN,,iDestinationBitPosition,11,6,13,8,);
B(B_VAROUT,,wOutput_value,22,3,24,5,);
L(1,3,7,3);
L(9,3,13,3);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
END_BODY
If (bStart) then
FP_MOVE_DIGITS(s_Source := wInput_value,
n_SourcePos := iSourceBitPosition,
n_Digits := iNumberofDigit,
n_DestPos := iDestinationBitPosition,
d_Dest => wOutput_value);
End_if;