LabVIEWForum.de
DAQmx Messwerte Chart X-Achse - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ)
+---- Thema: DAQmx Messwerte Chart X-Achse (/Thread-DAQmx-Messwerte-Chart-X-Achse)

Seiten: 1 2 3


DAQmx Messwerte Chart X-Achse - samuel - 21.11.2013 13:46

Hallo,

ich sitze gerade an meinem ersten komplett selbst erstellten Messprogramm. Die eigentliche Funktion scheint auch gegeben zu sein. Die Datenerfassung scheint zu Funktionieren ebenso das Übergeben von Einstellungen an die Hardware. Allerdings schaffe ich es nicht die x-Achse im Chart so zu konfigurieren, dass Sie einfach nur Sekunden darstellt. Ich will einfach nur ein Startintervall von 0 bis 10 Sekunden. Sobald die 10 Sekunden "voll" sind soll der Chart weiterlaufen.
Ich habe langsam die Angst, dass an meiner Art der Datenerfassung ein Fehler ist oder die Programmierung so nicht gut ist.

Zum Ablauf der Messwerteverarbeitung:
- Ich lese im SubVI Messen eine Anzahl von Messwerten aus Screenshots SubVI )
-Messwerte werden dann im HauptVI in den Charts ausgegeben ( Dazu dient das Case Messen ) -Danach werden die Max und Min Werte über die Historie berechnet und ausgegeben
- Als letztes werden auch die Messwerte alle in die Messwertedatei geschrieben

Solange nicht "Messen Stoppen" gedrückt wird springt die State Machine ( ist es eine? Big Grin) wieder zum SubVI und wiederholt das ganze.

Deswegen wäre ich sehr froh wenn mir jemand mit Erfahrung weiterhelfen kann. Dies gilt sowohl für grundlegende Fehler meines Programms als auch für mein Problem mit der x-Achse des Charts.

VIs darf ich leider nicht anhängen. Aber ich hab von allem Screenshots gemacht.

PS: Screenshot "C" des SubVIs konnte ich nicht mehr anhängen. Da wird aber nur der Task beendet und das SubVI beendet.



Vielen Dank für eure Hilfe


RE: DAQmx Messwerte Chart X-Achse - GerdW - 21.11.2013 14:03

Hallo Samuel,

Zitat:Dies gilt sowohl für grundlegende Fehler meines Programms
- du nutzt ganz selten die Autoindizierung bei Loops! Wenn man die Elemente eines Arrays haben will, dann schließt man dieses Array über einen autoindizierenden Tunnel an eine FOR-Loop an. Du dagegen nutzt oft IndexArray mit dem Schleifeniterator...
- viel unnötiger Code wie unnötige Sequenzstrukturen (THINK DATAFLOW!); Kopien von identischen Konstanten; Konstanten an Anschlüssen, die eben diesen Wert per Default benutzen...
- ich persönlich finde es nicht "schön", die Historie eines Charts als Datenspeicher zu missbrauchen. Für Min/Max-Berechnung gibt es einfache Lösungen, die sich eines Schieberegisters bedienen...
- warum 12 Controls programmatisch in einen Cluster verdrahten und nicht einfach eben diese Controls schon auf dem FP in einen (typdefinierten!) Cluster packen?
- LabVIEW hat eine Aufräumfunktion, die zieht zumindest die Drähte (einigermaßen) glatt...
- du öffnest Dateien, schließt sie aber nicht...
- statt lokaler Variablen würde ich eher Schieberegister und Drähte verwenden, um Daten von einem State in den nächsten zu transportieren...
- die States einer Statemachine A,B und C zu nennen, ist nicht im Sinne einer guten Code-Dokumentation...

Zitat:mein Problem mit der x-Achse des Charts
Ein Chart ist immer etwas eingeschränkt in seinen Möglichkeiten, wenn man ihn mit der Alternative Graph vergleicht. Der einzige Pluspunkt (?) ist die eingebaute Historie...
Mögliche Lösung:
- bei Start der Messung die Autoskalierung der X-Achse ausschalten und die X-Achse zur Anzeige der ersten 10s formatieren.

Zitat:x-Achse im Chart so zu konfigurieren, dass Sie einfach nur Sekunden darstellt.
Die X-Achse eines Charts zählt einfach die Anzahl der Datenpunkte hoch. Du kannst per Faktor/Offset etwas daran herumspielen, aber eine echte Zeitangabe wirst du dort kaum hinbekommen...


RE: DAQmx Messwerte Chart X-Achse - Lucki - 21.11.2013 14:39

(21.11.2013 14:03 )GerdW schrieb:  Die X-Achse eines Charts zählt einfach die Anzahl der Datenpunkte hoch. Du kannst per Faktor/Offset etwas daran herumspielen, aber eine echte Zeitangabe wirst du dort kaum hinbekommen...
Die Einstellung von Offset und Faktor ist ein Programmierschritt wie jeder andere auch. Wieso ist das "herumspielen"?
Und was verstehst Du unter "echter Zeitangabe". Mit Datum und Uhrzeit? Gerade das soll ja vermieden werden.
Das müßte funktionieren: Kein Offset, Faktor = reziproke Samplingrate, In den Diagrammeigenschaften einstellen: Anzeigeformat X-Achse Fiießkomma (kein Zeitformat wählen)


RE: DAQmx Messwerte Chart X-Achse - samuel - 21.11.2013 15:05

Sooooo, danke erstmals für die berechtigte Kritik GerdW. Ich habe einige Sachen sehr kurzfristig ändern können, einige Fragen bleiben aber noch.

-Die Messdatei wird jetzt via Schieberegister durch die While-Schleife übertragen
-Das Referenzen Array der Charts wird nun über Schieberegister übertragen
-die. tdms Datei wird jetzt geschlossen (meine Güte ist das peinlich Big Grin )
-beide Index Array Funktionen hab ich einfach durch die Autoindizierung der For-Schleife ersetzt. Ich habe mal einen Screenshot mit der Änderung angehängt und hoffe das du es so meintest. (Dumm wenn man bedenkt, dass die For-Schleifen sowieso schon da waren…..)
-Die States haben jetzt sinnvolle Namen
- Sequenzstruktur habe ich entfernt. Da war in einer früheren Version noch mehr enthalten. Im Anschluss habe ich es einfach versäumt die Sequenz zu entfernen.
- Anschlüsse die den angeschlossenen Wert als Standard verwenden wurden entfernt.

Zwecks der Controls bleibt zu sagen, dass mir das auch nicht gefällt. Allerdings sind die einzelnen Controls auf verschiedenen Registerkarten verteilt und müssen auch dort hin. Anfangs hatte ich diese zentral in einem Cluster ist aber anscheinend zu unübersichtlich.

Die Min Max Berechnung via Schieberegister habe ich schon mal gesehen, aber die Funktion ist ja dafür da Big Grin.

Hättest du einen Tipp wie ich die Historie leicht ersetzen kann? Ich dachte eigentlich das wäre eine ganz gute Methode.

Zu der eigentlichen Frage bleibt die Frage wie ich es denn anderst umsetzen kann.....


@Lucki
Danke für die Antwort. Habe diese erst gesehen als ich den Beitrag verfasst hatte. Ich habe nämlich schon am Offset und Faktor herumgespielt, bin aber zu keinem sinnvollen Ergebnis gekommen. Ja Datum und Uhrzeit soll vermieden werden.....

Ich werde deinen Vorschlag mal bearbeiten und mich dann wieder melden.

Vielen Dank für die Antwort


Gruss Samuel


RE: DAQmx Messwerte Chart X-Achse - samuel - 21.11.2013 15:48

ich kann meinen Beitrag leider nicht mehr editieren. Zu Luckis Tipp bleibt zu sagen, dass dadurch das Problem der Zählung behoben ist. Dadurch ergab sich aber ein neues Problem.... Mir wird innerhalb des Charts nur eine Sekunde angezeigt.

Die Autoskalierung ist natürlich deaktiviert und das Maximum ist eigentlich auf 10 eingestellt. Screenshot des vorliegenden Sachverhaltes liegt bei.

Vielen Dank

Gruß samuel


RE: DAQmx Messwerte Chart X-Achse - GerdW - 21.11.2013 17:51

Hallo samael,

zum Screenshot des BD:
Jetzt hast du mehrere Outputtunnels der Case-Struktur, die als "default if unwired" markiert sind. Das ist "gefährlich", wenn man mal vergisst, einen solchen Tunnel mit vernünftigen Werten zu verdrahten. Insbesondere der NextState-Anschluss sollte immer einen Wert erhalten, damit die Statemachine wirklich mit einem sinnvollen State fortfährt...

zum Chart-Problem:
Manchmal ist es hilfreich, ein VI mit als Standard hinterlegten Beispielwerten anzuhängen. Mit einem Bild des FP kann man nicht viel anfangen...


RE: DAQmx Messwerte Chart X-Achse - samuel - 22.11.2013 07:47

Erst noch eine kurze Anmerkung zu dem "Missbrauch" der Historie:

Zu deiner Bemerkung mit der Historie. Ich verstehe nicht wieso du sagst ich würde die Historie als Datenspeicher „missbrauchen“. Die Daten liegen doch sowieso in der Historie, egal ob ich diese nun über den Property Node abhole oder nicht. Eigentlich müsste dies doch die beste Lösung sein, da die Daten nicht extra irgendwo zwischengespeichert werden sondern an einer Stelle abgeholt werden an der diese sowieso schon liegen.



Zum verdrahten der Outputtunnels:

Die States sind jetzt alle verdrahtet. Wobei hier sowieso nur der letzte nicht verdrahtet war. Wie ich dies im Falle der anderen zwei Anschlüsse machen soll (Globale Variable und Array aus Referenzen) weiß ich leider nicht. Soll ich da in jedem Case den Schieberegister links mit dem rechts durch das ganze Case verdrahten, oder wie stellt man das sinnvoll an?

Zu meinem Achsen Problem:

Wenn man einfach einen Graph erstellt und als Offset = 0 und als Faktor = 0,001 einstellt kommt man sofort auf mein Problem. Es ist dann unmöglich bei Maximum eine 10 einzutragen. Der Wert wird immer wieder automatisch auf 1 gesetzt.
Vielen Dank für deine Antwort

Gruß Samuel


RE: DAQmx Messwerte Chart X-Achse - GerdW - 22.11.2013 08:09

Hallo samuel,

Zitat:Eigentlich müsste dies doch die beste Lösung sein, da die Daten nicht extra irgendwo zwischengespeichert werden sondern an einer Stelle abgeholt werden an der diese sowieso schon liegen.
"Eigentlich" trifft es ganz gut. Du hast zwar einen Buffer, auf den du zugreifen kannst - aber eben dieser Zugriff ist eher langsam, da er über eine PropertyNode inkl. Threadwechsel erfolgt!
Wenn man mit der Penalty leben kann, dann nutzt man den Chart-Buffer. Sonst eher nicht...

Zitat:Soll ich da in jedem Case den Schieberegister links mit dem rechts durch das ganze Case verdrahten, oder wie stellt man das sinnvoll an?
Ja. Rechtsklick auf den Ausgangstunnel und "Verknüpfter Eingangstunnel" wählen...

Zitat:Wenn man einfach einen Graph erstellt und als Offset = 0 und als Faktor = 0,001 einstellt kommt man sofort auf mein Problem. Es ist dann unmöglich bei Maximum eine 10 einzutragen. Der Wert wird immer wieder automatisch auf 1 gesetzt.
???
Wenn ich einen Graph erstelle und die X-Skalierung wie beschrieben ändere, dann kann ich die X-Achse immer noch auf 0…10 ändern...


RE: DAQmx Messwerte Chart X-Achse - samuel - 22.11.2013 08:43

Zitat:"Eigentlich" trifft es ganz gut. Du hast zwar einen Buffer, auf den du zugreifen kannst - aber eben dieser Zugriff ist eher langsam, da er über eine PropertyNode inkl. Threadwechsel erfolgt!
Wenn man mit der Penalty leben kann, dann nutzt man den Chart-Buffer. Sonst eher nicht...

Oke die Sache zwecks der Historie klingt jetzt einleuchtend. Werde mich diesbezüglich mal nach einer anderen Lösung umschauen. Allerdings wäre es interessant zu wissen was der langsame Zugriff für einen Zeitversatz erzeugt. Hast du dazu irgendwelche Informationen?

Zitat:Ja. Rechtsklick auf den Ausgangstunnel und "Verknüpfter Eingangstunnel" wählen...

Vielen Dank. Das wusste ich noch nicht.

Zitat:Wenn ich einen Graph erstelle und die X-Skalierung wie beschrieben ändere, dann kann ich die X-Achse immer noch auf 0…10 ändern...

Ich meinte natürlich den Chart.... sry

Dankeschön

Gruß Samuel


RE: DAQmx Messwerte Chart X-Achse - GerdW - 22.11.2013 08:48

Hallo samuel,

Zitat:was der langsame Zugriff für einen Zeitversatz erzeugt.
Es ist nicht unbedingt ein "Zeitversatz", es geht hier eher um CPU-Last...

Zitat:Ich meinte natürlich den Chart.... sry
Da sind wir dann bei der nächsten Einschränkung des Charts: die fest vorgegebene Historienlänge! Diese kann nur per Rechtsklick auf den Chart geändert werden, d.h. sie wird statisch in der IDE festgelegt...
Voreinstellung sind 1024 Werte. Du stellst den Faktor auf 0.001, damit ergibt sich eine X-Achse von 0…1.024. Mehr ist nicht sinnvoll, da der Chart nunmal nicht mehr Werte (aufgrund der begrenzten Historie) anzeigen kann.