# LGF_RampCI (FB / V3.0.1)

Autor: Siemens Digital Industries

## Kurzbeschreibung

Diese Funktion generiert eine Fahrkurve anhand einer Stützpunkttabelle. Zwischen den Punkten wird innerhalb der vorgegebenen Zeit linear interpoliert.

### Baustein Schnittstelle

| LGF_RampCI (FB) |
--- | --- | ---
LReal |  |  | defaultOutValue |  | outputValue |  |  | LReal
Int |  |  | contStepNbr |  | actTimeTable |  |  | Bool
Time |  |  | contStepTime |  | stepNumber |  |  | Int
Bool |  |  | enDefaulftOutValue |  | remainTime |  |  | Time
Bool |  |  | start |  | totalTime |  |  | Time
Bool |  |  | hold |  | remainTotalTime |  |  | Time
Bool |  |  | continue |  | error |  |  | Bool
Bool |  |  | cyclicOP |  | status |  |  | Word
Bool |  |  | updateTime |  | subfunctionStatus |  |  | Word
Bool |  |  | reset |  |  |  |  |
OB_CYCLIC |  |  | callOB |  |  |  |  |
Array[*] of LGF_typeRampTimeTable |  |  | setpoints |  |  | Array[*] of LGF_typeRampTimeTable

### Input Parameter

Bezeichner | Datentyp | Default Wert | Beschreibung
--- | --- | --- | ---
defaultOutValue | LReal | 0.0 | Wert für die Default Vorbelegung der Ausgangsgröße (`outputValue` = `defaultOutValue`)
contStepNbr | Int | 0 | Nummer des nächsten Stützpunktes zur Weiterverarbeitung
contStepTime | Time | T#0MS | Restzeit zum Weitermachen bis zum Stützpunkt `contStepNbr`
enDefaulftOutValue | Bool | FALSE | Zuweisen des Default Ausgangswert (`outputValue` = `defaultOutValue`)
start | Bool | FALSE | Stützpunkttabelle abarbeiten
hold | Bool | FALSE | Aktuellen Wert am Ausgang halten/ einfrieren
continue | Bool | FALSE | Weiterverarbeitung
cyclicOP | Bool | FALSE | Stützpunkttabelle zyklisch wiederholen
updateTime | Bool | FALSE | Zeitwerte aktualisieren
reset | Bool | FALSE | Neustart der Funktion
callOB | OB_CYCLIC | --- | Aufrufender Weckalarm-OB (Cyclic Interrupt OB)

### Output Parameter

Bezeichner | Datentyp | Beschreibung
--- | --- | ---
outputValue | LReal | Ausgangsgröße
actTimeTable | Bool | Stützpunkttabelle wird bearbeitet.
stepNumber | Int | aktuelle Stützpunktnummer (Stützpunkt, der angefahren wird)
remainTime | Time | Restzeit bis Erreichen des nächsten Stützpunktes
totalTime | Time | Gesamtzeit für die Stützpunkt Tabelle
remainTotalTime | Time | Gesamtrestzeit
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
--- | --- | ---
setpoints | Array[*] of LGF_typeRampTimeTable | Stützpunkttabelle. Informationen zum Datentyp `LGF_typeRampTimeTable` finden Sie unter dem Punkt "Globale Daten" .

### Status & Error Meldungen

Code / Wert | Bezeichner / Beschreibung
--- | ---
16#0000 | STATUS_FINISHED_NO_ERROR Status: Abarbeitung ohne Fehler beendet
16#7000 | STATUS_NO_CALL Status: Keine aktuelle Blockabarbeitung
16#7001 | STATUS_FIRST_CALL Status: Erstaufruf, Steigende Flanke `start`.
16#7002 | STATUS_FURTHER_CALLS Status: Folgeaufruf, Eingang `cyclicOP` gesetzt.
16#8200 | ERR_OB_UNAVAILABLE Fehler: OB am Eingang `callOB` ist nicht projektiert / vorhanden. Verschalten Sie am Eingang `callOB` den Konstanten Namen eines projektierten Weckalarm-OB.
16#8201 | ERR_ARRAY_LOWER_BOUND Fehler: Array startet nicht bei 0 / Untere Arraygrenze <> 0. Das Array mit den Stützpunkten muss mit dem Index 0 beginnen.
16#8400 | ERR_QRY_CINT Fehler in Anweisung `QRY_CINT` - weitere Infos in `subFunctionStatus`

## Benutzer definierte Datentypen

### LGF_typeRampTimeTable (UDT)

Datentype zur Erstellung einer Fahrkurve auf der Basis einer Stützpunkttabelle für die Funktion `LGF_RampCI`

Bezeichner | Datentyp | Default Wert | Beschreibung
--- | --- | --- | ---
outputValue | LReal | 0.0 | Stützpunktwert für die Interpolation zum Anfahren
time | Time | T#0s | Zeit innerhalb bis zu der der Stützpunkt angefahren wird

## Funktionsbeschreibung

Hinweis
  In `subFunctionStatus` wird der Status von aufgerufenen Anweisungen ausgegeben. Der Ausgangswert in `status` gibt in diesem Fall an, welche Anweisung den Fehler verursacht hat. Holen Sie sich in diesem Fall die Informationen aus der TIA Portal Online Hilfe zu den jeweiligen Anweisungen.

###### Globale Daten

Zusammen mit dem Baustein erhalten Sie automatisch den PLC-Datentyp `LGF_typeRampTimeTable`, der sich aus den Parametern `outVal` für den Wert eines Stützpunktes und `time` für die Zeit bis zum Erreichen des nächsten Stützpunktes zusammensetzt. Die Deklaration erfolgt in einem eindimensionalen Array vom Datentyp `LGF_typeRampTimeTable` beginnend mit dem Index `0`. Das Array wird in einem globalen Datenbaustein angelegt und dann an den Baustein `LGF_RampCI` übergeben.

Abbildung: Beispiel für die Deklaration der Stützpunkte

Der Parameter `time` des letzten Stützpunktes muss mit `0s` parametriert werden, da kein Nachfolgestützpunkt mehr vorhanden ist.

###### Funktionsweise

Mit dem Baustein lassen sich anhand parametrierter Stützpunkte Fahrkurven ausführen; in jedem Aufrufzyklus werden Werte nach einem Zeitplan ausgegeben, wobei zwischen den Stützpunkten interpoliert wird.

In jedem Zyklus werden die aktuell angefahrene Stützpunktnummer `stepNumber`, die aktuelle Restzeit `remainTime` bis zum Erreichen des Stützpunktes, die Gesamtzeit `totalTime` und die Gesamtrestzeit bis zum Erreichen des Fahrkurvenendes `remainTotalTime` ausgegeben. Desweitern wird der Ausgang `actTimeTable` gesetzt, wenn gerade die projektierte Fahrkurve ausgegeben wird.

Der Zeittakt des aufrufen Weckalarm-OBs wird ermittelt, indem am Eingangsparameter `callOB` der aufrufende Weckalarm-OB verschaltet wird.

Abbildung: Weckalarm-OB verschalten

Über Steuereingänge können folgende Betriebsarten ausgewählt werden:

- Neustart
- Ausgang vorbelegen
- Fahrkurve ausgeben
- Bearbeitung anhalten
- Bearbeitungsschritt und –zeit vorgeben
- Zyklischen Betrieb einschalten
- Gesamtzeit und Restzeit aktualisieren

###### Überblick über die Betriebsarten

Tabelle: Überblick über die Betriebsarten

###### Neustart

Mit einer steigenden Flanke am Eingang `reset` wird der Ausgang `outValue` auf `0.0` zurückgesetzt. Bei `enDefaultOutValue = TRUE` wird am Ausgang `defaultOutValue` ausgegeben. Die Gesamtzeit und Gesamtrestzeit werden aktualisiert und am Ausgang ausgegeben.

###### Ausgang vorbelegen

Soll die Fahrkurve mit einem bestimmten Ausgangswert beginnen, dann muss `enDefaultOutValue = TRUE` sein. In diesem Fall steht am Ausgang des Zeitplangebers der Wert `defaultOutValue` an. Die interne Abarbeitung der Fahrkurve läuft in dieser Zeit weiter. Wechselt `enDefaultOutValue` wieder auf `FALSE`, so wird zum aktuell aktiven Stützpunkt interpoliert.

###### Fahrkurve ausgeben

Mit einer steigenden Flanke am Eingangs `start` wird die Fahrkurve ausgegeben, solange `start = TRUE` ist oder bis die Fahrkurve durch das Erreichen des letzten Stützpunktes beendet wurde. Durch eine erneute steigende Flanke wird die Fahrkurve nochmals ausgegeben. Zusätzlich wird bei jedem Einschalten die Gesamtzeit aktualisiert.

###### Zyklischen Betrieb einschalten

Wird zusätzlich zum Eingang `start` auch der Eingang `cyclicOP` auf `TRUE` gesetzt, kehrt die Fahrkurve nach Ausgabe des letzten Stützpunktwertes automatisch zum Startpunkt zurück und beginnt einen neuen Durchlauf.

Zwischen dem letzten Stützpunktwert und dem Startpunkt wird nicht interpoliert. Für einen stoßfreien Übergang muss gelten: letzter Stützpunktwert = Startpunkt.

###### Fahrkurve anhalten

Mit `hold = TRUE` wird der Wert der Ausgangsgröße (inkl. der Zeitbearbeitung) eingefroren. Bei Rücksetzen `hold = FALSE` wird an der Unterbrechungsstelle bzw. an einer parametrierten Stelle (Siehe "Bearbeitungsschritt und –zeit vorgeben") fortgefahren. Die Bearbeitungszeit der Fahrkurve verlängert sich um die Haltezeit `T1*` (siehe Abbildung unten).

###### Bearbeitungsschritt und –zeit vorgeben

Wird während dem Anhalten der Fahrkurve (`hold = TRUE`) der Eingangsparameter `continue` für das Fortsetzen auf `TRUE` gesetzt, dann wird nach dem Zurücksetzen des Eingangs `hold` die Stützpunktnummer `contStepNbr` (Zielstützpunkt) innerhalb der Zeit `contStepTime` angefahren (Interpolation). Die Gesamtrestzeit wird neu berechnet.

###### Gesamtzeit und Gesamtrestzeit aktualisieren

Bei Änderungen von Werten der Stützpunkte können sich die Gesamtzeit und die Gesamtrestzeit der Fahrkurve ändern. Da die Berechnung von `totalTime` und `remainTotalTime` bei vielen Stützpunkten die Bearbeitungszeit des Funktionsbausteins stark vergrößern kann, wird sie nur einmal bei einer steigenden Flanke am Eingang `updateTime` durchgeführt.

###### Funktionsverläufe

Abbildung: Funktionsverläufe

## Änderungshistorie

Version & Datum | Änderungsbeschreibung
--- | ---
| 01.00.00 | Siemens Industry Online Support
| 03.02.2017 | First released version
| 01.00.01 | Siemens Industry Online Support
| 16.05.2017 | Comment correction (REGION)
| 01.00.02 | Siemens Industry Online Support
| 17.08.2018 | Upgrade: TIA V15 Update 2
| 01.00.03 | Siemens Industry Online Support
| 23.11.2018 | Upgrade: TIA V15.1
| 01.00.06 | Siemens Industry Presales Support
| 15.11.2019 | Code optimization, Regions, comments and constants are added
| 03.00.00 | Simatic Systems Support
| 23.04.2020 | Set version to V3.0.0, harmonize the version of the whole library
| 03.00.01 | Simatic Systems Support
| 22.03.2021 | Insert documentation Change UDT member name from `outValue` to `outputValue`