# LGF_DataLogC (FB / 1.0.0)

Übersicht

Autor: Siemens Industry Support

## Kurzbeschreibung

Die Funktion LGF_DataLogC (C -> Compact) integriert alle Funktionen des Datenlog-Systems und kann als eigenständiger Datenlogger verwendet werden.

### Baustein Schnittstelle

| LGF_DataLogC (FB) |
--- | --- | ---
Bool |  |  | enable |  | valid |  |  | Bool
String |  |  | name |  | busy |  |  | Bool
Bool |  |  | triggerLogEntry |  | error |  |  | Bool
Bool |  |  | clearLog |  | status |  |  | Word
Bool |  |  | deleteLog |  | writeEntryDone |  |  | Bool
LGF_typeDataLogParameter |  |  | parameter |  | clearLogDone |  |  | Bool
|  |  |  |  | deleteLogDone |  |  | Bool
|  |  |  |  | lastEntryReached |  |  | Bool
|  |  |  |  | noOfEntries |  |  | UDInt
|  |  |  |  | diagnostics |  |  | LGF_typeDiagnostics
Variant |  |  | data |  |  | Variant

### Input Parameter

Bezeichner | Datentyp | Default Wert | Beschreibung
--- | --- | --- | ---
enable | Bool | FALSE | TRUE: Aktiviert die Funktionalität des FB
name | String | 'DefaultDataLog' | Name des Datenlogs, auch als Dateiname verwendet
triggerLogEntry | Bool | FALSE | Steigende Flanke löst einen Eintrag im Datenlog aus (nur wenn `parameter.isLoggingByInterval` := FALSE)
clearLog | Bool | FALSE | Steigende Flanke triggert das Löschen der Datenprotokolldatei
deleteLog | Bool | FALSE | Steigende Flanke löst Löschen der Datenprotokolldatei aus, falls vorhanden
parameter | LGF_typeDataLogParameter | --- | Dieser UDT gehört zum Module `LGF_DataLogC` und listet alle möglichen Parameter zur Konfiguration des Verhaltens auf.

### 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)
writeEntryDone | Bool | TRUE: DataLog-Schreiben erfolgreich durchgeführt
clearLogDone | Bool | TRUE: DataLog löschen erfolgreich abgeschlossen
deleteLogDone | Bool | TRUE: DataLog löschen erfolgreich durchgeführt
lastEntryReached | Bool | TRUE: Letzter Eintrag des Datenprotokolls erreicht, wenn `enableRingBuffer` gesetzt ist, von Anfang an starten, sonst endet der Block hier
noOfEntries | UDInt | Anzahl der Einträge im Datenprotokoll
diagnostics | LGF_typeDiagnostics | Diagnosestruktur zur Speicherung und Übertragung von Diagnoseinformationen von Blöcken über die Schnittstelle.

### In/Out Parameter

Bezeichner | Datentyp | Beschreibung
--- | --- | ---
data | Variant | Datenstruktur für die Protokollierung in der Datalog-Datei

### Remanente Statische Parameter

Bezeichner | Datentyp | Retain | Beschreibung
--- | --- | --- | ---
statNoOfEntries | UDInt | ✓ | Anzahl der Einträge im Datenprotokoll
statLlastEntryReached | Bool | ✓ | TRUE: Letzter Eintrag des Datenprotokolls erreicht, wenn `enableRingBuffer` gesetzt ist, Start von Anfang, sonst endet der Block hier

### Status & Error Meldungen

Code / Wert | Bezeichner / Beschreibung
--- | ---
16#0000 | STATUS_FINISHED_NO_ERROR KEIN Fehler beim Aufruf aufgetreten / Aktive Bearbeitung
16#7000 | STATUS_NO_CALL Kein Auftrag wird gerade bearbeitet
16#7001 | STATUS_FIRST_CALL Erster Aufruf nach Eingang eines neuen Auftrags (steigende Flanke `enable`)
16#7002 | STATUS_SUBSEQUENT_CALL Nachfolgender Aufruf bei aktiver Verarbeitung ohne weitere Angaben
16#7010 | STATUS_MAX_ENTRIES_REACHED Maximum Anzahl der Einträge erreicht
16#8401 | ERR_WRONG_COMMAND_CALL_ORDER Fehler: Falsche Befehlsaufrufreihenfolge - `deleteLog` oder `clearLog` muss beim Starten / Aktivieren des Bausteins FALSE sein
16#8600 | ERR_UNDEFINED_STATE Fehler aufgrund eines undefinierten Zustands in der Zustandsmaschine
16#8601 | ERR_DATALOG_OPEN Fehler: `DataLogOpen` führt zu einem Fehler, siehe `diagnostics.subFunctionStatus` in der Diagnosestruktur für weitere Informationen
16#8602 | ERR_DATALOG_CREATE Fehler: `DataLogCreate` löst einen Fehler aus, bitte sehen Sie `diagnostics.subFunctionStatus` in der Diagnosestruktur für weitere Informationen
16#8603 | ERR_DATALOG_CLOSE Fehler: `DataLogClose` löst einen Fehler aus, bitte sehen Sie `diagnostics.subFunctionStatus` in der Diagnosestruktur für weitere Informationen
16#8604 | ERR_DATALOG_WRITE Fehler: `DataLogWrite` löst einen Fehler aus, bitte siehe `diagnostics.subFunctionStatus` in der Diagnosestruktur für weitere Informationen
16#8605 | ERR_DATALOG_CLEAR Fehler: `DataLogClear` führt zu einem Fehler, siehe `diagnostics.subFunctionStatus` in der Diagnosestruktur für weitere Informationen
16#8605 | ERR_DATALOG_DELETE Fehler: `DataLogDelete` löst einen Fehler aus, bitte sehen Sie `diagnostics.subFunctionStatus` in der Diagnosestruktur für weitere Informationen

## Benutzer definierte Datentypen

### LGF_typeDataLogParameter (UDT / V1.0.0)

Dieser UDT gehört zum Module `LGF_DataLogC` und listet alle möglichen Parameter zur Konfiguration des Verhaltens auf.

Bezeichner | Datentyp | Default Wert | Beschreibung
--- | --- | --- | ---
header | String | '' | Überschrift des Datenprotokolls, String aller Datenfelder, getrennt durch einen Komma: "field1,field2,field3,..."
maxNumberOfEntries | UDInt | 1000 | Maximale Anzahl von Einträgen im Datenprotokoll
timestampFormat | USInt | 0 | Zeitstempelformat - siehe Handbuch unter "DataLogCreate" für den verwendeten SPS-Typ (S7-1200 oder S7-1500)
clearOnOpen | Bool | FALSE | Löschen des Datenprotokolls beim Öffnen des Datenprotokolls während der Aktivierung der Sperre
deleteFile | Bool | FALSE | Beim Löschen des Datenprotokolls auch die Datenprotokolldatei löschen
enableRingBuffer | Bool | FALSE | TRUE: Überschreibe alte Werte und beginne von vorne, wenn das Datenprotokoll seine maximalen Einträge erreicht FALSE: Stoppe die Aufzeichnung, wenn `maxNumberOfEntries` Einträge erreicht
loggingByInterval | Bool | FALSE | TRUE: Loggen bei Intervall Zeitparameter FALSE: loggen bei "triggerEntry"
loggingInterval | Time | T#1M | Zeit für automatisches Logging-Intervall

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

## Funktionsbeschreibung

Die Funktion `LGF_DataLogC` kombiniert die Systemfunktionen zum Erzeugen und Schreiben von Datalogs in einem Baustein.

Der Ablauf sieht vor, dass ein bestehendes Datalog anhand des Namens (`name`) geöffnet wird, wurde es zuvor nicht angelegt wird dieses erkannt und die Funktion legt das Datalog an.

Anschließend wird je nach Parametrierung der Datenhaushalt an `data` in einem einstellbaren Interval geschrieben oder aber nur auf Anforderung an `triggerLogEntry`.

Lies mich

  Die Funktionsweise von Datalogs können sie dem Anwenderhandbuch entnehmen:

  - `DataLogCreate`
  - `DataLogOpen`
  - `DataLogClose`
  - `DataLogWrite`
  - `DataLogClear`
  - `DataLogDelete`

Achtung

  Die folgenden Parameter sind nur beim Anlegen eines Datalogs wirksam:

  - `parameter.header`
  - `parameter.maxNumberOfEntries`
  - `parameter.timestampFormat` (S7-1200 und die S7-1500 unterstützen verschiedenen Formate, siehe dazu im Handbuch `DataLogCreate`)

Achtung
  Beim Loggen von Daten per Intervall (`isLoggingByInterval`) treten Zeitliche varianzen auf, die durch eine schwankende Zyklus Zeit hervorgerufen werden.
  Es empfiehlt sich daher die Funktion, neben dem Aufruf im zyklischen Programm, in einem Zeit Interrupt OB aufzurufen und in diesem den Trigger zum Schreiben zu setzen.

Achtung
  Ein Datalog welches durch die Funktion gelöscht wird, ohne die Datei zu löschen, kann nicht wieder angelegt werden solange die Datei existiert, sie muss zuerst von Hand im System gelöscht werden.
  Beachten Sie hierfür auch den Parameter `parameter.deleteFile` der bei einem löschbefehlt `deleteLog` auch die Datei neben den Daten ablöscht.

## Änderungshistorie

Version & Datum | Änderungsbeschreibung
--- | ---
| 1.0.0 | Simatic Systems Support
| 19.02.2022 | First released version