Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
09.01.2013, 23:10 (Dieser Beitrag wurde zuletzt bearbeitet: 11.01.2013 08:41 von TSC.)
im Moment hänge ich mal wieder an einem wahrscheinlich ganz einfachen Problem. Es geht darum ein Array mit vielen Messdaten in einem XY-Graph darzustellen. Das Array mit den Messdaten "GraphData" hat 10 Spalten, Spalte0 ist Datum/Zeit, Spalte 1-8 sind die 8 Messwerte, Spalte9 dient zur Speicherung von Markern.
In einer Schleife werden kontinuierlich (z.B. alle 50 mSec) Zeilen mit Daten an das Array angehängt (ja, ich weiß, statt der Variablen sollte das mit Schieberegister gemacht werden ). Da kommen schnell mal 60.000 Zeilen zusammen!
In einer anderen Schleife im Hauptprogramm soll dieses Array einem XY-Graphen übergeben werden. Da das Format meines Messdatenarrays "GraphData" anber nicht direkt an den Graphen angeschlossen werden kann, muss ich die Daten erst umformen. Im Moment mache ich das im angehängten SUB_Vi. Das funktioniert auch, allerdings nur solange das Messdatenarray "GraphData" nicht zu groß wird. Ich nehme mal an das liegt daran dass bei jedem Aufruf immer Alle Messdaten umgewandelt werden, nicht sehr effizient!
Wie könnte man das effizienter und sinnvoll gestalten? Ich dachte zuerst an ein "XY-Graph" Array, das geht aber nicht, da im Eingangsdaten Array des XY Graphen die "Spalten" die einzelnen Plotts sind, die wieder aus einem Cluster aus X und Y Arrays (Werten) bestehen.
Hoffentlich habe ich das jetzt verständlich beschrieben...
wenn du das, was da in deinem Screenshot zu sehen ist 60000 mal machst, glaub ich wohl, dass sich da irgendwann nix mehr rührt. Du sagst, dass´n Schieberegister wohl besser wäre - noch schneller würde es über Queues gehen.
Aber dein Problem scheint ja die Darstellung zu sein. Wenn du aber dein 60000-er Array immerzu in einem X/Y-Graph darstellst, wird es ja jedes Mal neu dargestellt, das dauert dann schonmal.
Ich würde mir beim Erstellen schonmal einen Datentyp zusammenbauen, der einfach darzustellen ist, das ganze über Queues realisieren und entweder nach der Datensammelei alles einmal darstellen oder bei kontinuierlicher Darstellung dann auf Verlaufsgraphen ausweichen.
PS: konverrtier mal dein VI in 2011 - 2012 können hier nicht viele lesen
erst mal danke für den Tip mit den Queues, das kannte ich bis jetzt noch nicht. Wie gesagt, die Datenerfassung funktioniert einwand- und ruckelfrei, das Problem ist ehr die Umrechnung. Leider muss der Graph ständig aktualisiert werden, da ich mit dem Graph sowohl kleine wie auch große Messzeiten (Sekunden bis Stunden) anzeigen will.
Gerade der von dir angesprochene "besser geeignete Datentyp" macht mir eben Kopfzerbrechen, konvertiert werden muss er ja trotzdem um die Messdaten anzuzeigen, oder?
P.S. Anbei das VI für LabView 2010, sicher ist sicher!
10.01.2013, 09:05 (Dieser Beitrag wurde zuletzt bearbeitet: 10.01.2013 09:06 von GerdW.)
du hast schon mal gehört, das LabVIEW auch mit Arrays in Schleifen verarbeiten kann?
Wenn nicht, empfehle ich die Links in meiner Signatur...
(statt deiner IndexArray-Orgie... [IndexArray könnte man auch aufziehen, um mehrere Einträge auf einmal zu indizieren.])
Wie oft rufst du dieses subVI auf? Ständig an irgendwelchen Properties rumzuschrauben kann auch Rechenzeit kosten...
Wenn Du immer neue Daten hinzufügst: dafür ist doch speziell das Signalverlaufsdiagramm konzipiert. Dann fällt das ganze Gedöns mit Schieberegistern, lokale Variablen, Ringpuffern usw. weg. Was spricht denn dagegen?
Außerdem: Falls das dt immer konstant ist, lohnt es sich bei so vielen Daten, die Zeitwerte in der ersten Spalte gar nicht zu verwenden bzw. nur dazu, das dt herauszulesen.
10.01.2013, 20:18 (Dieser Beitrag wurde zuletzt bearbeitet: 10.01.2013 20:19 von RabenFlug.)
(10.01.2013 09:11 )Lucki schrieb: Wenn Du immer neue Daten hinzufügst: dafür ist doch speziell das Signalverlaufsdiagramm konzipiert. Dann fällt das ganze Gedöns mit Schieberegistern, lokale Variablen, Ringpuffern usw. weg. Was spricht denn dagegen?
Außerdem: Falls das dt immer konstant ist, lohnt es sich bei so vielen Daten, die Zeitwerte in der ersten Spalte gar nicht zu verwenden bzw. nur dazu, das dt herauszulesen.
Das Problem ist, dass es nicht nur um die reine Darstellung der Daten in dem großen Array geht. An anderer Stelle verarbeite ich die Daten noch weiter, exportiere bestimmte Bereiche, setze, lese und modifiziere Merker, reagiere auf bestimmte Zeitstempel usw. Leider ist das dt auch nicht immer gleich, so dass es reichen würde die Startzeit, Anzahl der Messpunkte und dt zu kennen. Es kann sich währen der Messung ändern. Den Zeitstempel brauche ich leider auch an anderer Stelle, der ist mir sehr wichtig
Werde aber gleich mal versuchen ob der Signalverlaufsgraph nicht wirklich besser geeignet ist.
(10.01.2013 09:05 )GerdW schrieb: du hast schon mal gehört, das LabVIEW auch mit Arrays in Schleifen verarbeiten kann?
Hallo GerdW,
ja, das ist bekannt. Aber das hilft mir auch nicht weiter wenn die 60.000 und mehr Messdaten Zeilen bei jedem Update des Graphen (alle paar 100 mSec) in einer Schleife in ein XY-Graph taugliches Format gebracht werden müssen. Aber es stimmt natürlich, die "GraphControllerData2Graph" ist nicht gerade sehr "schön", in einer Schleife wäre das evtl. besser aufgehoben.
wenn du 60000 Daten und mehr im 100ms-Takt in einen Graphen schreiben willst, geht das mit dem X/Y sowieso nicht mehr, da kommst du am Verlaufsgraphen garnicht vorbei, erst recht nicht bei dieser Update-Rate.
Danke für das Beispiel Wenn ich es richtig verstehe kann das Signalverlaufsdiagramm aber "nur" mit einer Startzeit und einem dt die Zeit auf der X-Achse bestimmen? Jedem einzelnen Messpunkt einen Zeitstempel zu geben geht nicht, oder?
Das Problem ist, dass meine Samples nicht immer zu 100% im gleichen zeitlichen Abstand kommen. Die Zeit zwischen den Samples variiert minimal (wir sprechen von einigen Millisekunden). Das liegt daran dass die Mess-Hardware über USB/FTDI232 (seriell) im halb-duplex Mode angesprochen wird und gelegentlich größere Kommandos in Richtung Hardware geschickt werden, was das Auslesen der Messdaten verzögert. ein festes dt gibt es leider nicht.
Gibt es denn wirklich keine Möglichkeit Daten "dynamisch" an einen XY-Graph Datentyp hinten anzuhängen ohne jedes mal das komplette Messarray umwandeln zu müssen?
Ich habe mal ein Beispiel ( Format) angehängt, wie ich mir das vorstelle. So funktioniert es zwar, nur ist auch dieser Weg sehr ineffizient. Wenn man das noch effizienter hinbekommen würde wäre es genau das was ich suche.
Das sieht ja am Anfang noch schnuckelig aus, aber lass das mal ne Stunde laufen.
Du hast immer das Problem, dass du im normalen X/Y-Graph nur komplett neu schreiben kannst. im 10000. Durchlauf schreibst du also 10000 Werte und im 10001. Durchlauf alle bisherigen 10000 + einen neuen.
So wirst du keine flüssige Anzeige hinbekommen.
Versuch doch mal, den X/Y-Express-Graph in der Palette daneben. Dem kannst du sagen, dass es die alten Daten stehenlassen soll.
Vielleicht hilft dir das ja weiter.