Werte fehlen bei DLOG_STORE_FILE_CSV

Begonnen von ffox, 30. September 2012, 10:25:20

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

ffox

Hallo,

ich habe ein Problem beim Schreiben eines CSV files.
Eigentlich will ich nur die aktuelle Temperatur, die Temperaturvorgabe und den Zustand des Heizventiles loggen.
Das klappt auch in 99.5% der Fälle. Allerdings fehlen mitunter in einer Zeile einmal die Temperaturinformationen (nicht 0.0 sondern fehlen komplett).
2012-09-30      07:37:21      21,437504      20,5      0
2012-09-30      07:37:25      0      2012-09-30      07:37:27      21,437504
20,5      0      2012-09-30      07:37:31      21,437504

Damit wird die Struktur des CSV files leider so zerhackt, dass Excel es nicht geparsed bekommt und man es manuell aufbereiten muss (kein Spass).
Der Logger wir in einem separaten Task niederer Priorität alle 1s ausgeführt. Muss man mit den TRIG_? noch was beachten (lieber gar nicht setzen?)?

Danke!
Frank



date_log(X:=log_data, COLUMN:='Time');
n:=8;
temp_log(VALUE:=gRooms[n].Temp, N:=6, D:=',', COLUMN:=gRooms[n].Name, X:=log_data);
temp_target_log(VALUE:=gRooms[n].TempTarget, N:=1, D:=',', COLUMN:=gRooms[n].Name, X:=log_data);
heating_log(STATE:=gRooms[n].HeatingOn, ON:='1', OFF:='0', COLUMN:=gRooms[n].Name, X:=log_data);
cvs_storage(X:=log_data, ENABLE:=TRUE, TRIG_T:=1, DTI:= gCalendar.UTC, SEP:=32, FILENAME:='A:\DATA\test.csv');

peewit

hallo

1. welche bibliothek versionen (basic network) verwendest du
2. welche hardware und software ist im einsatz
3. hast du schon mal die standard dlog_programme ausprobiert, gibt es damit auch das gleiche problem


ffox

Hallo,

basic 333 und network 121.
Das ganze läuft auf einer Wago 750-881 mit Codesys 2.3(?)
Die Demo-Programme hab ich noch nicht probiert. Sorry.

Wenn ich TRIG_M auf TRUE setze und den Baustein zyklisch mit 1s Taktung aufrufe bleibt er irgendwann stehen. Sprich der idx und step zählen nicht weiter.

Gruß,
Frank

peewit

ZitatWenn ich TRIG_M auf TRUE setze und den Baustein zyklisch mit 1s Taktung aufrufe

alle dlog bausteine sollen zyklisch aufgerufen werden
bei einer positiven flanke bei TRIG_M wird eine speicherung durchgeführt

eine flanke kann aber nur erkannt werden wenn der dlog zyklisch aufgerufen wird.
wenn du jede sekunde eine speicherung haben willst, dann brauchst du nur bei TRIG_T = 1 vorgeben

ps: schau dir wirklich mal die demo programme an
die werden wahrscheinlich auch gleich funktionieren
öffne die network.lib als projekt und schau in den gruppenordner "demo" hinein


ffox

Hallo,

nach Durchsehen der Beispiele sehe ich keinen Fehler. Kann es sein, dass man den Logger nicht in einen eigenen Task mit niederer Priorität
als den Hauptthread sperren sollte? Der Logger wird ja dann gelegentlich unterbrochen.

Gruß,
Frank

peewit

#5
hallo

den datalogger kannst du ja ansich in einem eigenen task laufen lassen, aber mit 1s ist das ziemlich schlecht.
der datenlogger ist ein komplizierteres gebilde als es den anschein hat

sobald ein trigger vorhanden ist, wird sofort im nächsten zyklus der befehl an die anderen bausteine gegeben, das die aktuellen datenwerte in einen grossen ringspeicher gelegt werden, dieser buffer wird wiederum autonom weiterverarbeitet, und je nach zustand werden dann daten geschreiben. dazu werden daten ausgelesen, datei öffnen, daten schreiben, datei schliessen etc...

diese vorgänge laufen in vielen einzelnen zyklen ab
wenn du das ganze nur im 1 sekunden takt aufrufst, würgst du den datalogger regelrecht ab, da er zuwenig zeit bekommt seinen arbeiten geteilt in zyklen zu verrichten
dadurch kann es auch sein, das der buffer nicht schnell genug in die datei übertragen werden kann, weil einfach der notwendigen verarbeitungszyklen fehlen

lass das mal in einen schnellerer task laufen

schicke mir eine pn , dann gebe ich dir die neueste beta version, vielleicht ist das schon eine lösung

ffox

Hallo Peewit,

ich denke Du hast den Grund gefunden. Ich rufe den Logger jetzt höher frequent auf und schreibe etwas seltener ... damit gibt es keine Probleme mehr.
Ich war nur versucht den Logger niederfrequent laufen zu lassen, da ich ihn für resourcen-fressend hielt (ich habe leider bisher quasi keine Ahnung von/Erfahrung mit SPS).
Die Zykluszeit meiner Wago geht jedoch trotz Logger gerade mal 1ms hoch.

Danke! Gruß,
Frank

GES123

Hallo peewit,
ich benutze im Moment die modifizierte Testversion des DLOG_STORE_CSV-Bausteins auf einer Eaton Moeller XV102, Codesys V2.9.3. Das ganze lief ohne Probleme bis ich die Anzahl der mitzulogenden Parameter ordentlich erhöht habe. Ich logge jetzt 142 Parameter (Bool, String, real, …). Laut Anleitung sollten 255 Parameter möglich sein.
Der Baustein logt auch weiterhin alle Daten brav mit, es geht nichts verloren. Das Problem liegt in der ersten Zeile (Überschriften). Diese wird zu früh durch einen Zeilenumbruch beendet. Die fehlenden Überschriften folgen dann in Zeile 2, gefolgt von Daten, bis die Spalte 142 (In Excel Spalte „EL“) erreicht ist. Hier erfolgt dann wieder ein Zeilenumbruch und die mitgelogten Daten werden geschrieben. (Siehe Anhang)
Durch diesen falschen Zeilenumbruch in der ersten Zeile werden meine Daten ordentlich durcheinander gemischt und man muss das ganze manuell ordnen. Das ist möglich aber aufwändig. Wo könnte die Ursache für das Verhalten liegen?
Ich hatte erst befürchtet, dass die Einträge für die Zeilenüberschrift (z.B. Column:= ‚Statusbyte 12‘) in Summe zu lange sind und hab diese deshalb auf ein Minimum gekürzt, hat leider nichts gebracht.
Außerdem habe ich die Zeiten modifiziert. Der Datalog-Task wird alle 15ms ausgeführt (Priorität 1), geloggt wird alle 2 Minuten. Jeden Tag wird eine neue Datei erstellt.
Vielen Dank für deine Tipps


[gelöscht durch Administrator]

peewit

#8
hallo

du bist mir aber ein schlimmer...... verwendest einfach 142 spalten ......

Ich nehme an das das problem reproduzierbar ist, also immer auftritt
wenn ja, dann werde ich sicherlich das problem auch finden und beheben können..

kannst du ein kleines testprogramm machen (reduziert auf das notwendigste), das ich dann laufen lassen kann , zum fehler suchen. Aber das muss ausserhalb deines gesamtprogramm ganz alleine laufen , und auch den fehler erzeugen

alleine das anlegen eines testprojektes mit 142 elementen erschöfft schon meine zeitressourcen
ich bin mir aber ziemlich sicher -> bis weihnachten läuft es ....  :-)

ich habe etwas probleme den inhalt der csv zu interpretieren, da ich ja nicht erahnen kann was in deinen programm steht
kannst du auch mal einen fehlerhafte csv, und die gleiche von hand korrigierte version online stellen

öffne die datei mal in einem normalen texteditor
in deiner sample csv sind ja am ende unendlich viele ";" drinnen , das kann doch so nicht stimmen ?

GES123

Vielen Dank für die schnelle Antwort.
Beim kürzen des Files ist wohl ein Fehler passiert, deswegen die vielen „ ; “.
Unten findest du das Original-CSV wie es aus dem DLOG_Store_File_CSV herauskommt und dazu die von mir manuell bearbeitete Version, wie ich das ganze gerne hätte.
Zum Hintergrund: Es handelt sich um eine Steuerung eines PV-Parks mit Nachführsystemen (17 Teilnehmer). Abhängig von Datum und Uhrzeit wird der Sonnenstand berechnet und die Systeme bei Bedarf verfahren.
Ich werde versuchen ein Testprogramm zu schreiben. Vielen Dank.


[gelöscht durch Administrator]

peewit

hallo

wie sieht es mit dem testprogramm aus, notfalls kannst du mir ja auch nur den datalog teil geben, vielleicht reicht es schon zum suchen des problems !

GES123

Hallo peewit
Sorry dass es etwas gedauert hat.
Ich hab gerade mein Programm auf den Datalog-Teil reduziert. Leider lässt sich der Fehler damit nicht wiederholen, sprich das  Datalogging funktioniert perfekt. Ich werde mal noch etwas an den Prioritäten der Task schrauben, vielleicht hängt es damit zusammen…
Ich melde mich sobald ich den Fehler nachstellen konnte.

peewit

#12
hallo

hole dir aus dem forum die codesys_network.130 (testversion)

http://www.oscat.de/community/index.php/topic,1872.0.html

dort habe ich beim datalogger an der performance schraube etwas gedreht , da nun nicht nur mehr 1 element pro zyklus verarbeitet wird, sondern so viele elemente wie möglich in 5 millisekunden (die max zeit lässt sich notfalls auch noch einstellen)

das ganze habe ich extra nur für dich gebastelt , weil du ja unbedingt über 140 elemente nutzen musstest :-)