# LGF_ShiftRegister (FB / 4.0.0)

Übersicht

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 |  |  | enable |  | valid |  |  | Bool
Bool |  |  | shiftLeft |  | busy |  |  | Bool
Bool |  |  | shiftRight |  | error |  |  | Bool
UInt |  |  | shiftRange |  | status |  |  | Word
Bool |  |  | reset |  | leftShiftCount |  |  | DInt
Bool |  |  | clear |  | rightShiftCount |  |  | DInt
Bool |  |  | fill |  | shiftOffsetCounter |  |  | DInt
Variant |  |  | initialItem |  | diagnostics |  |  | LGF_typeDiagnostics
Variant |  |  | bufferRegister |  |  | Variant

### Input Parameter

Bezeichner | Datentyp | Default Wert | Beschreibung
--- | --- | --- | ---
enable | Bool | FALSE | TRUE: Aktiviert die Funktionalität des FB
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.
reset | Bool | FALSE | Puffer initialisieren (Index und Zähler zurücksetzen)
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 des Puffers initialisiert wird (meistens: `0` / default wert)

### Output Parameter

Bezeichner | Datentyp | Beschreibung
--- | --- | ---
valid | Bool | TRUE: Ausgabewerte am FB gültig
busy | Bool | TRUE: FB ist aktive und neue Ausgabewerte können erwartet werden.
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)
leftShiftCount | DInt | Anzahl der Elemente im Puffer
rightShiftCount | DInt | Anzahl der Elemente im Puffer
shiftOffsetCounter | DInt | Offset der Schiebeoperationen. `rightShift` - `leftShift`
diagnostics | LGF_typeDiagnostics | Diagnosestruktur zur Speicherung und Übertragung von Diagnoseinformationen von Blöcken über die Schnittstelle.

### 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#7001 | STATUS_FIRST_CALL Erstaufruf nach steigender Flanke
16#7002 | STATUS_SUBSEQUENT_CALL Status: Unteraufruf ohne weitere Detail Information
16#8001 | ERR_BUFFER_EMPTY Fehler: Der Puffer ist leer
16#8002 | ERR_BUFFER_FULL Fehler: Der Puffer ist voll
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#8204 | ERR_BOOL_NOT_SUPPORTED Fehler: Boolesche Variablen und Arrays werden von `MOVE_BLOCK_VARIANT` nicht unterstützt. (Verwenden Sie stattdessen einen PLC-Datentyp)
16#8401 | ERR_MULTIPLE_COMMANDS_DEDECTED 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#8600 | ERR_UNDEFINED_STATE Fehler: Unbekannter Zustand in der Statemaschine
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#8621 | 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

## Benutzer definierte Datentypen

### LGF_typeDiagnostics (UDT / V1.0.1)

Diagnosestruktur zur Speicherung und Übertragung von Diagnoseinformationen von Blöcken über die Schnittstelle.

Bezeichner | Datentyp | Default Wert | Beschreibung
--- | --- | --- | ---
status | Word | 16#0000 | Status des Bausteins oder Fehleridentifikation beim Auftreten des Fehlers
subfunctionStatus | Word | 16#0000 | Status oder Rückgabewert von aufgerufenen FB's, FC's und Systembausteinen
stateNumber | DInt | 0 | Zustand in der Zustandsmaschine des Blocks, in dem der Fehler aufgetreten ist

## Änderungshistorie

Version & Datum | Änderungsbeschreibung
--- | ---
| 1.0.0 | Siemens Industry Online Support
| 03.07.2018 | First released version
| 3.0.0 | Simatic Systems Support
| 09.04.2021 | Refactoring and alignment to Datatype Variant Insert documentation
| 4.0.0 | Simatic Systems Support
| 04.09.2024 | Rework to PLC Open `Enable` behavior Add `reset` input / counter outputs Fix Bug while filling after left shift operation Rework to diagnostic output datatype