Kontinuierliche Datenerfassung m. Echtzeitgraph und Speichern der Werte
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!
Kontinuierliche Datenerfassung m. Echtzeitgraph und Speichern der Werte
Schönen guten Abend,
Vielleicht ist mein Problem innerhalb von 2 Sekunden gelöst, aber ich sitze hier im Labor und mein Gehirn ist fritiert - mit anderen Worten
ich bekomme keinen graden Gedanken mehr raus.
Ich habe ein PXIe System mit zwei 8-Kanal A/D Wandlerkarten (NI-4300).
Nun möchte ich von jeder Karte jeweils die ersten 6 A/D Wandler (Kanäle ai0:5) mit 10kHz abtasten und die Daten sowohl in Echtzeit
in einem (bzw. zwei verschiedenen) Graphen anzeigen (Zeitachse muss mit den Abtastzeitpunkten übereinstimmen) als auch in einem Array abspeichern,
da ich die Daten nach Ende der Aufzeichnung für (Offline-)Berechnungen benötige.
Die Aufnahmedauer ist nicht fest. Es wird später solange aufgezeichnet, wie ein Triggersignal HIGH ist.
Für die Aufzeichnung von einem Kanal habe ich die VI - "PXI-1Kanal" angehängt. Sie funktioniert einwandfrei. Wenn ich die Vi starte sehe ich Echtzeitdaten, wenn ich "Stopp" drücke bekomme ich die gespeicherten Werte aus der While-Schleife übergeben und sie werden in dem unteren Graphen
richtig angezeigt. (siehe Bild 1)
So nun habe ich das ganze für n-Kanäle abgeändert in der VI-"PXI-NKanal". Nur bekomme ich da weder fortlaufend die Echtzeitdaten angezeigt noch werden sie fortlaufend gespeichert. Ich bekomme nur ein ganz kleines Fenster angezeigt, das er immer wieder überschreibt. (siehe Bild 2)
Als ein Problem habe ich schon ausgemacht, dass die Daten in meine VI wohl fortlaufend in Spalten und nicht in Zeilen gespeichert werden. Ich kann das Array aber nicht im laufenden Betrieb, bei jedem Schleifendurchlauf transponieren. Das macht der Rechner nicht mit bzw. LabVIEW nicht mit.
Wie kann ich das Problem lösen? Geht es vielleicht ganz anders?
Kontinuierliche Datenerfassung m. Echtzeitgraph und Speichern der Werte
' schrieb:Vielleicht ist mein Problem innerhalb von 2 Sekunden gelöst, aber ich sitze hier im Labor und mein Gehirn ist fritiert - mit anderen Worten
ich bekomme keinen graden Gedanken mehr raus.
Du sitzt aber noch spät im Labor. Wenn du keinen geraden Gedanken mehr herausbekommst, empfehle ich dringend eine Pause.;)Vielleicht sogar eine mehrstündige...
' schrieb:Ich habe ein PXIe System mit zwei 8-Kanal A/D Wandlerkarten (NI-4300).
Nun möchte ich von jeder Karte jeweils die ersten 6 A/D Wandler (Kanäle ai0:5) mit 10kHz abtasten und die Daten sowohl in Echtzeit
in einem (bzw. zwei verschiedenen) Graphen anzeigen (Zeitachse muss mit den Abtastzeitpunkten übereinstimmen) als auch in einem Array abspeichern,
da ich die Daten nach Ende der Aufzeichnung für (Offline-)Berechnungen benötige.
Die Aufnahmedauer ist nicht fest. Es wird später solange aufgezeichnet, wie ein Triggersignal HIGH ist.
Ich hoffe, die Zeitdauer, die das Triggersignal HIGH ist, bewegt sich nur im Sekundenrahmen? Ansonsten sammelst du da heftigst Daten an.
10 kHz bei sechs Kanälen, das sind 60.000 Daten pro Sekunde. Und so wie dein Programm ist, werden die auch alle im Graphen angezeigt. Nach mehr als 1 Minute wird der heftigst in die Knie gehen, und das Update im FP wird zäh und langsam werden. Auch die dauernd nötige neue Speicheranforderung durch das "Build-Array" ist nicht gerade resourcenschonend, wenn wir in den Minutenrahmen geraten. Wenn es also um längere Messungen geht, solltest du dein Konzept überdenken und kontinuierlich mitspeichern.
' schrieb:Für die Aufzeichnung von einem Kanal habe ich die VI - "PXI-1Kanal" angehängt. Sie funktioniert einwandfrei. Wenn ich die Vi starte sehe ich Echtzeitdaten, wenn ich "Stopp" drücke bekomme ich die gespeicherten Werte aus der While-Schleife übergeben und sie werden in dem unteren Graphen
richtig angezeigt. (siehe Bild 1)
So nun habe ich das ganze für n-Kanäle abgeändert in der VI-"PXI-NKanal". Nur bekomme ich da weder fortlaufend die Echtzeitdaten angezeigt noch werden sie fortlaufend gespeichert. Ich bekomme nur ein ganz kleines Fenster angezeigt, das er immer wieder überschreibt. (siehe Bild 2)
Als ein Problem habe ich schon ausgemacht, dass die Daten in meine VI wohl fortlaufend in Spalten und nicht in Zeilen gespeichert werden. Ich kann das Array aber nicht im laufenden Betrieb, bei jedem Schleifendurchlauf transponieren.
Doch, das kannst du. Transponieren ist in LabVIEW keine "zeitaufwändige" Operation. In Wahrheit wird das Array nämlich im Speicher gar neu kopiert.
Alternativ kannst du auch auf deine Graphen gehen, Rechtsklick mit der Maus->Option "Transpose Array" aktivieren, dann werden Zeilen und Spalten der 2D-Arrays für die Darstellung getauscht. In deinem VI-Upload werden aktuell nämlich 1000 Plots dargestellt, und das ist alles andere als ressourcensparend.
Gute Nacht,
Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Kontinuierliche Datenerfassung m. Echtzeitgraph und Speichern der Werte
Ich sitze hier nicht wirklich freiwillig, aber was sind schon 16 Stunden Arbeitstage wenn man noch jung ist
Die Aufnahmedauer wird vermutlich maximal 30 Sekunden dauern und ich zeichne sogar 12 Kanäle synchron auf (mit 12 seperaten A/D Wandlern).
Der Datenstrom sollte aber eigentlich handlebar sein. Bei maximaler Abtastgeschwindigkeit von 250kS/s und wenn man pro Datenwert von 2byte Overhead ausgeht sind das "nur" ca. 11MB die pro Sekunde an Daten entstehen. Ich betreibe ja kein Oszilloskop im GS Bereich
Man mag es kaum Glauben nach einem Kaffee habe ich mal ein einer alten VI geschaut und das Problem wie folgt gelöst. Einfach mal das "build array" gegen "insert to array ersetzt" und den Schleifeniterationszähler an den Spaltenindex gelegt.
Um die Daten danach zu speichern habe ich das "write to spreadsheet file" verwendet und transponiere das Array da, damit es in einer csv abspeicherbar ist.
Das klappt auch. Jetzt bin ich natürlich gleich größenwahnsinnig geworden und habe noch eine Funktion eingebaut, damit man im laufenden Betrieb Kanäle ein und ausschalten kann.
Jetzt geht die Prozessorauslastung dann schon etwas hoch, ob ich das so lassen kann weiß ich nicht genau. Gäbe es da eine andere Möglichkeit das zu realisieren?
Optimal wäre sowieso, wenn ich 2 bzw. 4 Graphen zeichnen könnte, aber da müsste ich ja das erstelle 2d Array im laufenden Betrieb auseinanderpflücken. Ich weiß nicht wie sinnvoll das ist.
Hast du eine Idee das ganze Resourcenschonender zu machen? Wie gesagt, ich darf die Messung nicht unterbrechen, die muss absolut synchron und zeitgenau laufen. Die Werte brauche ich wie gesagt alle danach noch in einem Array, weil ich damit Berechnungen anstellen muss.
Hier nochmal die überarbeitete Version. Den Echtzeitgraphen zeiche ich jetzt auch nicht mehr als fortlaufenden Graphen, weil das eh Murks ist.
Wie du gehst schon schlafen? Jetzt ist nicht nur im Institut keiner mehr sondern auch nicht mehr im Internet - gibts ja nich
20.10.2010, 00:48 (Dieser Beitrag wurde zuletzt bearbeitet: 20.10.2010 20:10 von jg.)
Kontinuierliche Datenerfassung m. Echtzeitgraph und Speichern der Werte
Heureka! Also so ein bisschen
Das Aktivieren bzw. Deaktivieren der Plots sollte kein Problem mehr sein - Master-Slave sei dank.
Falls du kannst wäre es trotzdem cool, wenn du auf meine alten Fragen noch eingehen könntest. Ich bin immer offen für Vorschläge Dinge Resourcenschohnender zu programmieren.
Jetzt habe ich noch ein etwas anderes Problem. Ich weiß ohne Realdaten ist es etwas schwer nachzuvollziehen, aber wenn Ihr Euch das VI in in diesem Anhang anseht und dann einen Blick auf den Graph ganz unten, der die kompletten Offlinedaten zeigt, werft.
Mein Problem ist, dass bei einer Aufzeichnung die letzten Geschehnisse ganz links im Graphen abgebildet werden und die Ältesten ganz rechts.
Das ist natürlich mehr als suboptimal, wenn man, wie ich, einen zeitlich veränderlichen Vorgang erfassen möchte.
Leider fällt mir dazu jetzt irgendwie keine Lösung mehr ein. Ich glaub ich pack jetzt auch mal ein und mache mich auf den Heimweg. Würde mich freuen, wenn morgen jemand eine Idee zur Lösung hat. Dann kann ich das vlt. noch morgen früh einbauen um das Messsystem Testweise in Betrieb zu nehmen.
Kontinuierliche Datenerfassung m. Echtzeitgraph und Speichern der Werte
Ich konnte mir dein VI nicht anschauen, aber
' schrieb:Mein Problem ist, dass bei einer Aufzeichnung die letzten Geschehnisse ganz links im Graphen abgebildet werden und die Ältesten ganz rechts.
Das ist natürlich mehr als suboptimal, wenn man, wie ich, einen zeitlich veränderlichen Vorgang erfassen möchte.
Leider fällt mir dazu jetzt irgendwie keine Lösung mehr ein.
verstehe ich nicht.
Möchtest du von der allgemein üblichen Darstellung abweichen? Im Oszilloskop (und überall sonst auch) hast du auch die ältesten Messwerte ganz links und die jüngsten Werte rechts in der Darstellung.
Oder versuchst du uns zu sagen, dass du nicht das komplette Signal, sondern immer nur einen kleinen Ausschnitt angezeigt bekommen möchtest?
Kontinuierliche Datenerfassung m. Echtzeitgraph und Speichern der Werte
Ah da hat sich zu später Uhrzeit der Fehlerteufel eingeschlichen
Mein Problem ist natürlich, dass ganz links die NEUSTEN Ereignisse stehen, also die jenigen, die zuletzt aufgezeichnet wurden und rechts im Graph sind die Ältesten Ereignisse.
D.h. noch einmal, dass der Anfang meines Graphen rechts ist, anstatt links wie bei z.B. einem Oszilloskop.
Kontinuierliche Datenerfassung m. Echtzeitgraph und Speichern der Werte
Dein Insert Into Array ist falsch.
Mach mer mal ein Beispiel hierzu:
Number of Samples steht aktuell auf 1000. Also hat nach dem ersten Durchlauf das Array "Offline-Daten" im Schieberegister eine Größe von 12x1000.
Du hast den Index der While-Schleife an das Insert-Into-Array angeschlossen.
Im zweiten Durchlauf ist der Index 1, es wird also in Spalte 1 des bestehenden Arrays das nächste 12x1000 Array eingefügt. Du willst das aber eigentlich hinten dranhängen.
Guckst du hier:
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!