Komprimierung von Logdaten

Nioc

Level-1
Beiträge
13
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Gemeinde,

ich stehe gerade vor einem Problem, bei dem ich ein wenig Beistand gebrauchen könnte.
Es geht darum Logdaten, die in einer CSV-Datei liegen, für den weiteren Transport über eine Satellitenverbindung zu komprimieren.
Ehrlich gesagt habe ich die Komplexität dieser Aufgabe anfänglich unterschätzt, da ich dachte zip-Algorithmen gibt es zu Hauf im Internet, da werde ich irgendwas brauchbares finden. Nun stellt sich mir allerdings eher grundsätzlich die Frage, wie ich vorgehen soll.
Aber zunächst ein bisschen Background:
Als Steuerung kommt ein CX1020 von Beckhoff mit WinCE zum Einsatz. Das existierende Logging ist mit den Bausteinen DLOG_DINT, DLOG_STORE_FILE_CSV und DLOG_DATA aus der oscat lib implementiert.

Die folgenden Varianten kamen für mich bisher in Betracht:
1. Es wird "on the fly" kompriemert. Dies wäre sicher die eleganteste aber auch aufwendigste Variante, da die Bausteine aus der oscat lib nicht mehr zu gebrauchen wären. Außerdem wären die zu erreichenden Kompressionsraten nicht so gut.

2. Die erstellten CSV-Dateinen werden komprimiert, nachdem sie durch die Funktionsbausteine für das Logging geschlossen wurden. Hier stellt sich die Frage, wie die Kompressionsfunktionen implementiert werden
a) als Funktion im TwinCAT
b) als externes Programm z.B. in C# Aufruf im TwinCAT über NT_StartProcess (Nicht meine favorisierte Lösung, da ich mich erstmal damit auseinander setzten muss, wie man Anwendungen für WinCE in C# erstellt...)
c) es kommt ein existierendes Programm zum Einsatz, Aufruf über NT_StartProcess (leider habe ich bisher kein entsprechendes Programm im Netz gefunden)

Meine Frage ist, ob jemand so etwas schon mal gemacht hat, und wenn ja, wie es umgesetzt wurde. Vielleicht gibt es ja noch ganz andere Ansätze, die ich noch nicht gesehen habe :D

Vielen Dank und viele Grüße,
Robert
 
Kenne das Problem zur genüge. Ich nutzte (halt auf einem Win 7 PC) 7zip, ist ja OpenSource und hat ein gutes command line interface. Entsprechend hatte ich ein kleines Batch-Programm erstellt. Dieses hat folgende Schritte ausgeführt:
Datums-String erstellen (Es gab für jeden Tag ein Ordner, in welchem für jedes Messgerät und der PLC ein ZIP-File erstellt wurde)
Danach habe ich alle verschiebbaren Log-Files aus den normalen Ordnern in den vorbereiteten Ordner zum zippen.
In Zeile 24-29 werden nun die einzelnen Ordner gezippt. Hier mit der höchstmöglichen Kompressionsrate (da alles über Satellit übertragen wurde). Die Komprimierung brauchte manchmal 15-20Min auf einem leistungsfähigen PC.

Danach verschob ich die Daten in den lokalen Dropbox-Ordner und lösche alle temporäre Dateien.
Einziger Nachteil: Die SPS weiss nicht wirklich, ob die Komprimierung erfolgreich verlaufen ist. Ev. könnte man am Ende der Batch-Datei eine Log-Datei erstellen, welche wiederum von der SPS regelmäässig geprüft wird...

logger_bat.PNG
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo gloeru, vielen Dank für deine Antwort :)
ich hatte auch überlegt, "extern" zu Zippen. Leider habe ich bisher kein zip-Tool gefunden, das auf wince auch packen, und nicht nur entpacken kann. Soweit ich weiß kann 7zip das auch nicht :-( ich glaube fast, ich würde nicht drum herum kommen, so ein Tool selber zu schreiben, es sei denn jemand hat noch einen tip ? :)
Im Moment verfolge ich einen anderen Plan. Habe mir die oscat Network Lib geschnappt, und bohre sie dahingehend auf, dass sie die Daten binär speichert. Wenn ich die Bytes pro Zeile dann nur schreibe, wenn sich der Wert innerhalb einer Toleranz geändert hat, müsste ich mit dem datenvolumen schon deutlich runter kommen :)
 
Zurück
Oben