Daten-Logger CSV Datei Rechtsverschiebung

Begonnen von magMAR, 21. Mai 2014, 08:32:50

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

magMAR

Hallo OSCAT Forum  :)
Wir arbeiten an einer Steuerung für eine Versuchsanlage und müssen dabei unteranderem eine Vielzahl an Messwerten speichern.
Hierzu habe ich zunächst eine allgemeine Frage:
In der Doku zum Datenlogger steht, dass in einem Paket bis zu 255 Prozesswerte verarbeitet werden können. Heißt das bis zu 255 verschiedene Variablen können gespeichert werden?
Ist es möglich diese Anzahl zu vergrößern?

Wir haben unteranderem eine Wago 750-880 mit der über 60 Temperaturwerte im 0,5s Takt geloggt werden sollen. Dies habe ich mit Hilfe der Bausteine DLOG_STORE_FILE_CSV und den entsprechenden Speicherbausteinen realisiert. Außerdem wird die fertige Datei per FTP an einen Server gesendet (mit FTP_CLIENT). Dies funktioniert alles auch ganz gut bis auf eine Ausnahme.
Wenn mehrere Variablen mit demselben Baustein (hier DLOG_DINT) gespeichert werden, kommt es zu einer Verschiebung der gespeicherten Werte um eine Spalte nach rechts. Dadurch sind die Werte der letzen Spalte in der ersten und so weiter. Ist ein solcher Effekt bereits bekannt oder habe ich einfach einen Fehler im Programm?

MfG
Stefan

peewit

die 255 zu ändern wäre ziemlich viel aufwand
möglich ja, aber grosse aufwand.... und für manche steuerungen ein performance problem

aber ich zweifle an das so viele werte pro 0,5sek auf echtzeit eine datei geschrieben werden können
das das ganze paket ziemlich flexibel aufgebaut ist und um auch mit unter keine hohen zykluszeiten zu verursachen, werden viele sachen in mehrere zyklen verteilt.
die bausteine für den dateizugriff arbeiten auch blockierung also synchron



du kannst es aber ja mal ausprobieren wo die grenzen sind

ich würde alleine wegen der übersicht  das ganze in mehrere pakete zerteilen
mehrere dateien loggen mit je 50 prozesswerten
und die dann später zusammen führen.



von einen datenverschiebe problem ist mir nichts bekannt

prüfe ob du auch die neueste version benutzt
http://www.oscat.de/community/index.php/topic,1872.msg9862.html#msg9862

magMAR

Hallo peewit,
ich habe mir schon gedacht, dass es nicht ohne weiteres möglich ist.
Das Problem mit der Verschiebung habe ich gelöst, in dem ich für jeden Prozesswert eine eigene Instanz des FB DLOG_DINT verwende (als Array). Allerdings weiß ich nicht ob das so gedacht ist.
Ich verwende die Version 1.3 genau aus diesem Post.

Aktuell teste ich noch das Schreiben der Werte in eine MySQL Datenbank. Jedoch wird auch hier eine Aufteilung auf mehrere Tabellen notwendig, da allein das Erstellen einer großen Tabelle sehr lange dauert.

peewit

das ist natürlich notwendig das jeder dlog_* baustein eine eigene instanz benötigt
da wundert es mich sogar das es trotzdem so gut funktioniert !!

magMAR

Ich habe jetzt noch eine Frage zum DLOG_STORE_MYSQL. Prinzipiell funktioniert die Datenübertragung zum Server, jedoch kann ich bei großen Tabellen beobachten, dass in einigen Fällen der Fehler
Code: FF00, Typ: 2 auftritt.

Ich kenne von den Wago-Libs ein Problem mit zu langen SQL-Befehlen (ich glaub die max. String-Länge beträgt 255?!) und vermute, dass hier die gleiche Ursache den Fehler verursacht. Denn wenn ich die gleichen Daten nur mit verkürzten Spaltennamen senden möchte funktioniert alles.
Liege ich hier richtig mit meiner Vermutung oder kann ich noch einen Fehler im Programm haben?

peewit

error 0x0000FF00  Type 2

bedeutet das die die antwortdaten vom mysql server nicht angekommen sind oder aufgrund eines problem nicht korrekt verarbeitet werden konnten.

das hier irgendein längenproblem die ursache ist, ist relativ wahrscheinlich, jedoch würde mir hier nur ein mitschnitt mit etherneal bzw. wireshark helfen.... da könnte man sehen was versendet wurde und was die antwort war


momentan sind die sende/empfangsbuffer auf 4096 bytes begrenzt
eine möglichkeit wäre diese in den globalen konstanten zu erhöhen


magMAR

Der Hinweis auf den Buffer war genau richtig. Ich habe ihn testweise verdoppelt und die langen Spaltennamen verwendet, dann ging alles.
Vielen Dank für die Hilfe :)