Bereich-Rechtsschieben
Die Funktion schiebt die Bits eines Speicherbereichs, dessen Anfang und Ende an den Ausgängen d1 und d2 anliegt nach rechts. Die Anzahl der Bits um die der Speicherbereich nach rechts geschoben werden soll, wird mit dem Wert am Eingang n festgelegt. Bei n können Sie einen Wert zwischen 0 und 16 eingeben. Die durch die Verschiebung freiwerdenden Bitstellen werden mit Nullen aufgefüllt. Bei einem Eingang n = 0 findet keine Verschiebung statt. Bei einem Eingang n = 16 findet eine Verschiebung um ein WORT statt, d.h. es wird wie beim Befehl F110_WHSL vorgegangen.
Eingang
Anzahl der Bits, die verschoben werden
Ausgang
16-Bit-Anfangsadresse
16-Bit-Endadresse
Wir empfehlen, anstelle von diesem F-Befehl den entsprechenden FP7-Befehl zu verwenden:
Die Adressen der Variablen von den Eingängen d1_Start und d2_End müssen vom gleichen Adresstyp sein.
wenn die Adresse der Variablen an den Ausgängen von d1_Start > d2_End ist oder der Wert am Eingang n³ 16 ist.
wenn die Adresse der Variablen an den Ausgängen von d1_Start > d2_End ist oder der Wert am Eingang n³ 16 ist.
Im POE-Kopf werden alle Ein- und Ausgangsvariablen deklariert, die für die Programmierung dieser Funktion verwendet werden. Für alle Programmiersprachen wird der gleiche POE-Kopf verwendet.
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#8123,16#0567,16#9012]*)
END_VAR
In diesem Beispiel wird die Eingangsvariable number_bits deklariert. Stattdessen können Sie im Rumpf eine Konstante auch direkt an den Eingang der Funktion schreiben.
Wenn die Variable start von FALSE auf TRUE gesetzt wird, wird die Funktion ausgeführt.
Sie schiebt 4 Bits (entspricht einer Stelle in der hexadezimalen Darstellung) nach rechts heraus. Die durch die Verschiebung entstandenen 4 Bits in data_field[2] werden mit Nullen aufgefüllt.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,,number_bits,5,2,7,4,);
B(B_VAROUT,,data field[0],16,2,18,4,);
B(B_VAROUT,,data field[2],16,3,18,5,);
B(B_F,F108_BITR,,7,0,16,5,,?DEN?Dn?AENO?Cd1?Cd2);
B(B_CONTACT,,output,3,1,5,3,R);
L(1,0,1,5);
L(1,2,3,2);
L(5,2,7,2);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(start) then
F108_BITR( n:=number_bits,
d1_Start=> data_field[0],
d2_End=> data_field[2]);
END_IF;