# LGF_ShiftRegister (FB / V1.0.3)

Autor: Siemens Digital Industry Support

## Kurzbeschreibung

Die Funktion repräsentiert ein Schieberegister für alle möglichen Datentypen (durch Nutzung von `Variant`).
Es ist möglich die Elemente im Array `bufferRegister` nach Links (Index `array[n]:=array[n+1]`) oder Rechts (Index `array[n]:=array[n-1]`) zu schieben.
Sie kann zum Beispiel zur Materialverfolgung durch eine Maschine und den Prozess genutzt werden, zum Beispiel für Rundschalttische.

Hinweis
  Da diese Funktion die Array Elemente verschiebt, kann es zu Auswirkungen auf die Zykluszeit kommen, abhängig von der Größe des verschaltenden Arrays am Eingang `bufferRegister`.
  Bitte beachten Sie, dass ein FIFO oder LIFO Speicher, basierend auf Indizierung, für viele Applikation genauso ausreichend ist.

### Baustein Schnittstelle

| LGF_ShiftRegister (FB) |
--- | --- | ---
Bool |  |  | shiftLeft |  | error |  |  | Bool
Bool |  |  | shiftRight |  | status |  |  | Word
UInt |  |  | shiftRange |  | subFunctionStatus |  |  | Word
Bool |  |  | clear |  |  |  |  |
Bool |  |  | fill |  |  |  |  |
Variant |  |  | initialItem |  |  |  |  |
Variant |  |  | bufferRegister |  |  | Variant

### Input Parameter

Bezeichner | Datentyp | Default Wert | Beschreibung
--- | --- | --- | ---
shiftLeft | Bool | FALSE | Positive Flanke: Elemente in `bufferRegister` werden nach links geschoben, von Index `N` nach `N - 1`. Das Element im Index `N = 0` wird überschrieben.
shiftRight | Bool | FALSE | Positive Flanke: Elemente in `bufferRegister` werden nach rechts geschoben, von Index `N` nach `N + 1`. Das Element im Index `N = letzter Index` wird überschrieben.
shiftRange | UInt | 1 | Anzahl der Plätze, um die die Elemente im Eingangs Array an `bufferRegister` verschoben werden.
clear | Bool | FALSE | Clear / Ablöschen der Elemente in Eingangsarray `bufferRegister` mit `initialItem`
fill | Bool | FALSE | Überschreiben der Pufferelemente nach der Schiebeoperation. * `shiftLeft` - die links gelegenen Elemente * `shiftRight` - die rechts gelegenen Elemente werden mit `initalItem` überschrieben.
initialItem | Variant | --- | Wert mit dem das Array am Eingang `bufferRegister` initialisiert wird (meistens der Default wert)

### Output Parameter

Bezeichner | Datentyp | Beschreibung
--- | --- | ---
error | Bool | FALSE: Kein Fehler TRUE: Während der Ausführung des FB ist ein Fehler aufgetreten
status | Word | 16#0000-16#7FFF: Status des FB 16#8000-16#FFFF: Fehleridentifikation (siehe folgende Tabelle)
subFunctionStatus | Word | Status oder Rückgabewert von aufgerufenen FB's / FC's und Systemfunktionen

### In/Out Parameter

Bezeichner | Datentyp | Beschreibung
--- | --- | ---
bufferRegister | Variant | Puffer / Register Speicher als Array in welchem die Daten gespeichert sind. Die Daten im Register werden nach Links oder Rechts verschoben, abhängig vom Kommando.

### Status & Error Meldungen

Code / Wert | Bezeichner / Beschreibung
--- | ---
16#0000 | STATUS_NO_ERROR Status: Abarbeitung ohne Fehler beendet
16#7000 | STATUS_NO_CURRENT_JOBS Status: Keine aktuelle Bearbeitung, initial State
16#8200 | ERR_NO_ARRAY Fehler: Am Eingang `bufferREgister` liegt kein Array an.
16#8201 | ERR_CLEARING_WITHOUT_INITIAL_ITEM Fehler: Ein Ablöschen des Arrays an `bufferRegister` ohne einen Datenpunkt an `initialItem` ist nicht möglich.
16#8202 | ERR_FILL_WITHOUT_INITIAL_ITEM Fehler: Ein Überschreiben der Arrayelemente an `bufferRegister` mit der Option `fill` ohne einen Datenpunkt an `initialItem` ist nicht möglich.
16#8203 | ERR_WRONG_TYPE_INITIAL_ITEM Fehler: Der Datentyp des Eingangs `initialItem` entspricht nicht dem Datentyp des Arrays am InOut-Parameter `bufferRegister`.
16#8401 | ERR_MORE_THAN_ONE_COMMAND Fehler: Mehr als ein Kommando an den Eingängen präsent. Nur ein Kommando an den Eingängen `shiftLeft`, `shiftRight` oder `clear` ist zulässig.
16#8402 | ERR_IN_SHIFT_RANGE Fehler: Der Wert an `shiftRange` darf nicht die maximale Größe des Arrays an `bufferRegister` annehmen oder übersteigen.
16#8610 | ERR_CLEAR_BUFFER Fehler: Während des Ablöschens des Puffers in Funktion `MOVE_BLK_VARIANT`. Weitere Infos in `subFunctionStatus`
16#8611 | ERR_SHIFT_BUFFER_LEFT Fehler: Schieben der Elemente nach links fehlgeschlagen, Fehler in Funktion `MOVE_BLK_VARIANT` - weitere Infos in `subFunctionStatus
16#8612 | ERR_SHIFT_BUFFER_LEFT_FILL Fehler: Überschreiben der Elemente nach Schieben / Links mit dem Initialwort in Funktion `MOVE_BLK_VARIANT` fehlerhaft - weitere Infos in `subFunctionStatus
16#8622 | ERR_SHIFT_BUFFER_RIGHT Fehler: Schieben der Elemente nach rechts fehlgeschlagen, Fehler in Funktion `MOVE_BLK_VARIANT` - weitere Infos in `subFunctionStatus
16#8622 | ERR_SHIFT_BUFFER_RIGHT_FILL Fehler: Überschreiben der Elemente nach Schieben / Rechts mit dem Initialwort in Funktion `MOVE_BLK_VARIANT` fehlerhaft - weitere Infos in `subFunctionStatus

## Änderungshistorie

Version & Datum | Änderungsbeschreibung
--- | ---
| 01.00.00 | Siemens Industry Online Support
| 03.07.2018 | First released version
| 03.00.00 | Simatic Systems Support
| 09.04.2021 | Refactoring and alignment to Datatype Variant Insert documentation