Sposta a sinistra bit multipli di un intervallo dati a 16 bit
La funzione sposta i bit di un intervallo dati specificato, il cui inizio e fine vengono specificati dalle uscite d1 e d2, a sinistra. Il numero di bit di cui l'intervallo dati deve essere spostato a sinistra è specificato dal valore allocato all'ingresso n. Il valore può attestarsi tra 0 e 16. I bit cancellati a seguito dello spostamento diventano 0.
Quando l'ingresso n = 0, non si verifica alcuno spostamento.
Quando l'ingresso n = 16, si verifica uno spostamento di una WORD, ossia avviene lo stesso processo che per la funzione F111_WSHL.
Ingresso
Numero di bit su cui eseguire lo spostamento
Uscita
Area a 16 bit iniziale
Area a 16 bit finale
Anziché utilizzare questa istruzione F, si consiglia di utilizzare l'istruzione FP7 corrispondente:
Gli indirizzi delle variabili agli ingressi d1 e d2 devono presentare la medesima tipologia di indirizzo.
se l'indirizzo delle variabili alle uscite d1_Start > d2_End o il valore all'ingresso è n ³ 16.
se l'indirizzo delle variabili alle uscite d1_Start > d2_End o il valore all'ingresso è n ³ 16.
Tutte le variabili di ingresso e uscita utilizzate per programmare questa funzione sono state dichiarate nell'intestazione del POU. La stessa intestazione del POU è utilizzata per tutti i linguaggi di programmazione.
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
Quando la variabile start passa da FALSE a TRUE, la funzione viene eseguita.
Rimuove 4 bit (corrisponde a una posizione in una rappresentazione esadecimale) verso sinistra. I 4 bit in data_field[0] risultanti dallo spostamento vengono riempiti con caratteri zero. All'ingresso n la costante 4 viene allocata direttamente alla funzione. Potete tuttavia dichiarare una variabile di ingresso nell'intestazione del POU.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
IF DF(start) then
F109_BITL( n:=4,
d1_Start=> data_field[0],
d2_End=> data_field[2]);
END_IF;