F119_LRSR

LINKS/RECHTS-Schieberegister

Verschiebt 1 Bit des 16-Bit-Datenbereichs nach links oder rechts.

Parameter

Eingang

LeftDirection (BOOL)

Links-/rechts-Trigger; gibt die Richtung des Herausschiebens an:

  • TRUE: Herausschieben nach links.
  • FALSE: Herausschieben nach rechts.
DataInput (BOOL)

Gibt den neuen Signalzustand zum Hineinschieben an.

  • Neuer Signalzustand = TRUE = 1: wenn der Eingang TRUE ist

  • Neuer Signalzustand= FALSE = 0: wenn der Eingang FALSE ist
ShiftTrigger (BOOL)

Aktiviert Verschiebung

Verschiebt ein 1 Bit nach links oder rechts, wenn die steigende Flanke des Triggers erkannt wird (FALSE®TRUE).

Reset (BOOL)

Setzt alle Bits des von d1_Start und d2_End angegebenen Datenbereichs auf 0, wenn sich dieser Trigger im Zustand TRUE befindet.

Setzt die Daten in dem durch d1_Start und d2_End angegebenen Bereich auf Null.

d2_End (WORD, INT, UINT)

16-Bit-Endadresse

d1_Start (WORD, INT, UINT)

16-Bit-Anfangsadresse

Ausgang

Carry (BOOL)

Herausgeschobenes Bit

Beispiel

  1. Herausschieben nach links

  2. Das herausgeschobene Bit wird in R9009 (Carry-Flag) gespeichert.

  3. LeftDirection: ON; Shift Trigger: OFF→ON

  4. Wenn DataInput = TRUE, wird “1“ an die Bitposition 0 geschoben.

  5. Wenn DataInput = FALSE, wird “0“ an die Bitposition 0 geschoben.

  6. Herausschieben nach rechts

  7. LeftDirection: OFF; ShiftTrigger: OFF→ON

  8. Das herausgeschobene Bit wird in R9009 (Carry-Flag) gespeichert.

  9. Wenn DataInput = TRUE, wird “1“ an die Bitposition 15 geschoben.

  10. Wenn DataInput = FALSE, wird “0“ an die Bitposition 15 geschoben.

Anmerkungen

  • Die Variablen d1_Start und d2_End müssen vom gleichen Datentyp sein.

  • Diese Funktion erfordert am Ausgang Carry keine Variable.

  • Links-/Rechts-Schieben ist eine Schieberegister, das 1 Bit im festgelegten Datenbereich nach links (auf die höherwertige Bitposition) oder nach rechts (auf die niederwertige Bitposition) verschiebt.

Beispiel

POE-Kopf

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
		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

POE-Rumpf

Wenn die Variable enable_leftShift auf TRUE gesetzt ist, wird nach links verschoben, sonst nach rechts.

KOP-Rumpf

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

ST-Rumpf

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]);

Letzte Änderung am: 2021-07-26Feedback zu dieser SeitePanasonic Hotline