# DataLogCreate macht keine Aufzeichnungen



## Bernd87 (1 September 2021)

Hallo zusammen,

ich hätte gerne einen Log welcher mir kontinuierlich(oder ein paar Tage am Stück [Ringspeicher]) Werte hinterlegt. ich habe mich für einen DataLog-Baustein der Fa. SIEMENS entschieden und hänge jetzt etwas fest. Aktiviert wird diese Funktion über eine Schaltfläche mit Var. "Log_Starten".





Erhalten habe ich eine CSV mit nix als dem Header.  Der Statuswert ist 7000 (Keine Auftragsbearbeitung aktiv).
Ich denke dass ich nix schreiben kann da der Log bereits erstellt ist. Der Zeitstempel des zu erstellenden Logs ändert sich nicht.
Leider kann ich die Datei im Webserver nicht löschen obbwohl ich Admin bin...




Habt Ihr evtl. Anmerkungen um mich aus dieser Lage zu holen?
Danke im Voraus!!!


----------



## Ralle (1 September 2021)

Ohne bereits damit gearbeitet zu haben,sieht das für mich so aus, als wird mit dem "Log-Starten" die CSV erzeugt und dann mit dem zweiten Baustein immer je ein Wert in die Log-Datei geschrieben. Wann nimmst du den "Log-Starten" zurück? Das sollte mit Done oder Error erfolgen. Erst danach solltest du auch schreiben können.


----------



## Bernd87 (2 September 2021)

Hallo Ralle,

wenn ich das richtig verstanden habe meinst du "tag100" soll nur ein Impuls sein und nicht durch meinen Schalter "Log_Starten" gehalten werden?


----------



## escride1 (2 September 2021)

Da Du schreibst das nur Deine Kopfzeile drin steht tippe ich darauf das Write kommt bevor Create fertig ist, dann kommt ein Fehler im 8xxx-Bereich für nur einen einzigen Zyklus. Schau Dir den Status an.

Also Create benötigt am REQ nur eine steigende Flanke, ob das Signal danach noch anliegt oder nicht spielt keine Rolle. Es wird nur einmal das Log erstellt. Das gleiche gilt für Write. Es wird nur die steigende Flanke genutzt. Solange EN auf true steht wird die Anweisung bis zur eigenen Beendigung ausgeführt. Sie zu stoppen ist nicht vorgesehen.
Du nutzt EN am Write. Vermeide es das Loggen hierüber starten und stoppen zu wollen. Damit könnte ein aktueller Auftrag unterbrochen und somit der Datensatz verloren gehen.

Du hast am Record eine 1 stehen, vermutlich zur Fehlersuche. Ich bin mir unsicher ob die Kopfzeile zu den Datensätzen zählt oder nicht. Wäre unsinnig aber man weiß ja nie. Vielleicht mal 2 oder 5 einsetzen.
Am Timestamp steht Systemzeit. Soll das so sein? Ich arbeite nur mit der Lokalzeit nachdem alles richtig eingestellt ist.

Du schreibst im Clock 0,5Hz. Das sollte vermieden werden. Schreibe dann wenn neue Daten vorhanden sind. Also erst in ein Array, das Array wegschreiben und per Index wechseln. Immer nur 1 Datensatz wird geschrieben. Und darauf achten das kein neuer Schreibbefehl kommt solange Create oder Write noch busy sind. Am besten Done benutzen.

Das Log muss bei jedem Neustart der CPU wieder geöffnet sein. Du hast zwar ein Create aber scheinbar kein Delete genutzt. Sollte es bereits vorhanden sein so wird Create einen Fehler ausgeben. Irgendwas bei 8xxx - Schau in der Hilfe nach. Ob das Log bei bereits vorhandenem Log mit Create geöffnet wird und offen bleibt wage ich zu bezweifeln, sonst bräuchte man Open ja nicht. Aber möglich ist es trotzdem.
Soll ein Log fortgeführt werden, so muss es geöffnet werden, dafür wird DataLogOpen genutzt.

Wie erwähnt immer auf Busy und Done achten. Die Datensätze können mehrere hundert MB groß werden, da kann ein einziges Schreiben oder Lesen etwas dauern.

Der Status von 8xxx ist in der Hilfe einsehbar. Ich "glaube" Siemens hat sogar ein Beispielprogramm dort hinterlegt. Das einfach mal "abgetippt"?
Ich schreibe den Status immer wenn Error auf True steht in eine Variable. So kann man den letzten Fehler immer einsehen. Das ist sowohl bei Create als auch bei Write hilfreich. Da Du bereits die Kopfzeile eingetragen hast denke ich das es bei Write hapert, also diesen Status bevorzugt ansehen.

Die Datei auf dem Webserver lässt sich nicht löschen. Nutze erst Close im Programm. Offene Dateien bekommt man meistens schwieriger gelöscht.


----------



## Ralle (2 September 2021)

Wie ich schon schrieb, mit Done bzw. Error jeweils das Craete- bzw. Schreib-Signal zurücksetzen.
Danach  kann man dann neue Daten schreiben. Done wird wahrscheinleich (wie bei Siemens üblich) nur einen Zyklus lang True sein, also direkt damit das Schreibsignal zurücksetzen oder besser mit einer statischen Variable "fangen", Signale (falls noch mehr gemacht wird) zurücksetzen, dann das gemerkte Done natürlich ebenfalls. Bei Error mache ich es auch so, mit dem Error-Signal schreibe ich den Status in eine statische Variable, damit man ihn zur Auswertung und Anzeige parat hat. Je nachdem wie lang Error ansteht (1 Zyklus oder bis man Write zurücnimmt ???) mit einer steigenden Flanke.


----------



## Bernd87 (2 September 2021)

Das schreiben erfolgte nicht weil die Auflösung nach ID und Name ergeben hat das ein File bereits vorhanden ist. Dadurch wurde nichts erstellt und kein Done hat das Schreibenasgeführt.
ID auf 0, also variabl gestaltet und einen anderen Namen für den Log. Dann wird eine neue erstellt und geschrieben.
Zusätzlich habe ich gesehen dass der header zwar erstellt aber nie mit Daten versorgt wurde. Da habe ich also eine Struktur in der DB mit den Variablen eingefügt.

Danke an die schnellen Antworten!!!


----------



## Bernd87 (2 September 2021)

Wie kann ich das Thema Beenden? 😅


----------



## Ralle (2 September 2021)

Bernd87 schrieb:


> Wie kann ich das Thema Beenden? 😅


Das geht im im neuen Forum noch nicht.
Dein "Abschlußbericht" war schon  mehr, also manch anderer hinbekommt. 
Dann einfach ruhen lassen.


----------



## PN/DP (2 September 2021)

escride1 schrieb:


> Am Timestamp steht Systemzeit. Soll das so sein? Ich arbeite nur mit der Lokalzeit nachdem alles richtig eingestellt ist.


Lokalzeit ergibt aber das Problem, daß bei Umschaltung Sommer-/Winterzeit Einträge mit den Zeitstempeln 02:00 ... 02:59 zweimal im Log stehen (und bei Umschaltung Winter-/Sommerzeit fehlen). Deshalb macht man Logs/Archive üblicherweise mit Systemzeit bzw. UTC, da gibt es diese Probleme nicht. Erst für eine Anzeige/Auswertung werden die Zeitstempel auf Lokalzeit umgerechnet.

Harald


----------



## escride1 (2 September 2021)

PN/DP schrieb:


> Lokalzeit ergibt aber das Problem, daß bei Umschaltung Sommer-/Winterzeit Einträge mit den Zeitstempeln 02:00 ... 02:59 zweimal im Log stehen (und bei Umschaltung Winter-/Sommerzeit fehlen). Deshalb macht man Logs/Archive üblicherweise mit Systemzeit bzw. UTC, da gibt es diese Probleme nicht. Erst für eine Anzeige/Auswertung werden die Zeitstempel auf Lokalzeit umgerechnet.
> 
> Harald


Richtig, das habe ich für ihn nicht mit bedacht.
Ich habe "nur" 9 Anlagen mit dem Datalog in Betrieb, und dort ist der Zeitstempel so oder so komplett uninteressant, da im Datensatz die Zeit in Sekunden ab Start eingetragen werden muss.
Aber kann ich mir für andere Gelegenheiten merken .


----------



## Bernd87 (3 September 2021)

Ergänzung: Ich hab noch bemerkt dass das Log nicht anläuft wenn die Anzahl der Aufnahmen für die Speicherkarte zu groß ist, also die aufzunehmende Datenmenge den verfügbaren Speicherplatz überschreitet. Kann es sein dass sich SIEMENS selbst schützt und uns nichts davon mitteilt!? Das einzige was einem angezeigt wird ist dass keine Auftragsbearbeitung aktiv ist, sprich Status 7000


----------



## escride1 (3 September 2021)

Bernd87 schrieb:


> Ergänzung: Ich hab noch bemerkt dass das Log nicht anläuft wenn die Anzahl der Aufnahmen für die Speicherkarte zu groß ist, also die aufzunehmende Datenmenge den verfügbaren Speicherplatz überschreitet. Kann es sein dass sich SIEMENS selbst schützt und uns nichts davon mitteilt!? Das einzige was einem angezeigt wird ist dass keine Auftragsbearbeitung aktiv ist, sprich Status 7000


Das konnte ich nun nicht glauben und habe einfach mal die TIA-Hilfe für DatalogCreate sowie Write geöffnet:
Status 
80B3 - Speicherplatz auf der Memory Card nicht ausreichend.

Davon abgesehen kann ein Log bei einer 1200er 500MB, bei einer 1500er 1GB groß werden. Da bist Du nicht angekommen oder?

Also ich denke schon das da eine Meldung erschienen ist.
Wie Ralle und ich oben geschrieben haben schreiben wir den Status in eine Variable wenn ein Fehler auftritt. Dadurch kann man ihn beobachten weil er nicht sofort von dem normalen 0-7xxx-Status überschrieben wird.
Hast Du das probiert bzw. so umgeändert und es kommt wirklich gar kein Fehler?


----------

