Daten loggen in xml-Datei

Niklas96

Level-1
Beiträge
9
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forenmitglieder,

ich arbeite erst seit kurzem mit Codesys und habe ein Problem an dem ich nicht weiter komme. Und zwar möchte ich mehrere Daten in eine XML-Datei loggen. Dies geschieht über ein Programm was dauerhaft mitläuft und die Speicherung wird nur durch bestimmte Aktionen ausgelöst. Das Problem was ich habe ist, dass die Daten überschrieben werden. Das heisst: Die Datei mit Datum wird erstellt, so wie es auch sein soll. Der Ablauf der Speicherung sieht zurzeit noch so aus: Startzeit, Messung der SPannung, Messung der Stromstärke, zweite Messung der Stromsärke und Endzeit. Wenn ich nach einem Durchlauf die XML Datei öffne, wurde jedoch nur die letzte Aktion, also die Endzeit, abgespeichert. Ich möchte jedoch die volle Dokumentation der Daten erreichen.
Ich hoffe mir kann jemand weiterhelfen.

Mit freundlichen Grüßen
Niklas
 
Wie öffnest du denn die Datei? Normalerweise gibt es da mehrere Modi. Der Modus zum Öffnen und neue Daten ans Ende der Datei schreiben heißt idR "Append", also anhängen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich glaube ich habe mich am Anfang missverständlich ausgedrückt. Mein Problem ist nicht das öffnen, sondern dass er die Daten die er eigentlich alle speichern soll immer überschreibt und nur den letzten Wert ausgibt. Mir kommt es vor, wie eine Variable die einfach überschrieben wird, aber eigentlich sollen alle Werte ausgegeben werden.
 
Hi,
setzt du dir die Daten vorher zu einem einzigen String zusammen und schreibst ihn dann weg, oder wie machst du das?

Ich mach das so (Beckhoff):

-> File öffnen (FB_FileOpen)
-> String in Datei schreiben (FB_FilePuts)
-> File schließen (FB_FileClose)

funktioniert problemlos

gruß
 
Danke für die Antwort,

aber öffne und schließe die Datei nicht explizit. Ich benutze den Baustein DLOG_STORE_FILE_XML aus der Oscat Bibliothek in Verbindung mit dem Baustein DLOG_STRING, ebenfalls aus der Oscat Bibliothek. Sollte ich dann noch extra die Datei öffnen und schließen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

bin mir nicht ganz sicher ob ich dich richtig verstanden habe.

willst du nur ein Logfile erzeugen das in einem bestimmten Intervall Daten mitschreibt,
oder willst du Prozessvariablen sichern um später wieder darauf zugreifen zu können?

gruß
 
Hallo,

ich möchte Prozessvariablen sichern. Dies dient jedoch lediglich zur Dokumentation. Es handelt sich um einen Prüfstand, sodass mithilfe der Dokumentation sich später nachvollziehen lässt, welche Fehler zum beispiel aufgetreten sind.

MfG
 
Sollen nur immer die Letzten Daten gesichert werden
oder möchtest du letztendlich eine Tabelle der Letzten Messungen mit Startzeit, Messung 1, Messung 2, Endzeit?
 
Dann würde ich dir empfehlen das ganze im CSV Format abzuspeichern, dann kannst dus auch mit excel öffnen.Wenn du zwischen den einzelnen Daten dann ';' setzt, erkennt das Excel und macht 1 Variable = 1 Feld.
Erleichtert dir später die Auswertung erheblich.
 
Ok Danke.
Ich habe mich jetzt mit dem CSV Format auseinander gesetzt. Es wird leider nur eine Datei über 1Kb erstellt, welche nicht alle bzw zum Teil garkeine Daten erhällt. Und noch ne blöde Frage, wo gehört das Semikolon hin? Bei dem String der eingelesen wird oder bei Column?

MfG
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich setz mir meine Messdaten zu einen langen String mit 'CONCAT' zusammen (Uhrzeit;Variable1;Variable2). Jedes Semikolon = neues Feld in Excel.
Kenne den Oscat-Baustein für das CSV-Logging leider nicht.
Verwendest du Twincat?
 
Zuletzt bearbeitet:
Twincat benutze ich nicht, sondern Codesys. Der Concat Baustein ist eine gute Idee. Aber wie bekomme ich ein Semikolon dazwischen? In beiden Eingängen werden ja die beiden Strings zur Addition eingelesen und am Ausgang kommt dann der zusammengesetzte String raus.
Was außerdem ein Problem dabei darstellt ist, dass neben den Messwerten (Strom, Spannung,...) und der Uhrzeit, auch ungefähr 150 Fehlermeldungen aufgenommen werden, die auftreten können, aber nicht müssen. Meine Idee war es, alle zu speichernden Strings in ein großes Array abzulegen und am Ende des Programms den Array durch laufen zu lassen und mithilfe des Concat-Bausteins zu einem großen String zusammen zu fügen. Das ist jedoch sehr problematisch mit den Fehlermeldungen...
Verwendest du die 3 Bausteine FILE.Open, FILE.Write und FILE.Close? Das wäre eine weitere Alternative, die ich mir jetzt zu Gemüte führen wollte.
Ich glaube ein weiteres Problem bei mir ist, dass ich sehr viele einzelne Speicherung innerhalb des Programms tätige und nicht, wie bei den 3 Bausteinen (FILE.Open,...) die Datei jedes mal öffne und schließe und ich daduch überhaut nicht weiss, wann gespeichert wird und was überschrieben wird.

Mit freundliche Grüßen
Niklas Spehr
 
Hallo,

ich verwende anstatt FB_FileWrite den FB_FilePut-Baustein. Ich denke mal das es diesen nicht nur im Twincat gibt?
Hab mir aus diesen Bausteinen nen FB gebaut, setz mir meinen Logtext zur Laufzeit zusammen und übergibt ihn an diesen.
Er hängt dann noch einen Zeitstempel dran und schreibt mir das ganze in mein Logfile (1 Eintrag = 1 Zeile).

Wieso legst du nicht mehrere Files an? Eines für Prozessdaten, Fehlermeldungen. Würde das ganze etwas übersichtlicher machen.

gruß
 
Zurück
Oben