LabVIEWForum.de - Kontinuierliche Datenspeicherung, Zyklenzähler und Versuchszeitermittlung

LabVIEWForum.de

Normale Version: Kontinuierliche Datenspeicherung, Zyklenzähler und Versuchszeitermittlung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo liebe LV- Gemeinde,

seit einigen Wochen beschäftige ich mich mit LabVIEW und dies ist mein erster Beitrag im Forum.
Nach diversen Tutorials, viel Ausprobieren und mehrmaligem Störbern im Forum bin ich allerdings am Ende meines Lateins...

Nun zu meinem Problem: Mit einem Messaufbau (cDAQ-9174) sollen kontinuierlich Daten gemessen und gespeichert werden.
Die prinzipielle Struktur ist im angehängten VI "AnzeigenUndSpeichern" realisiert (Bitte stört euch nicht an den Express-VIs).
[attachment=33288]

Nach dem Programmstart werden kontinuierlich die aktuelle Zeit und das aktuelle Datum sowie sämtliche Messwerte "live" dargestellt.
Durch Klicken auf den Button "Messung starten" werden die Daten gespeichert und die Zyklen (entsprechend der Bedingung) kontinuierlich gezählt. Die Messung kann unterbrochen und auch wieder fortgesetzt werden.

Bis hierher funktioniert alles auch wie gewünscht, nun kommt das Problem:

Zusätzlich soll die seit Beginn der Datenspeicherung ("Messung starten") verstrichene Versuchsdauer angezeigt werden. Bei einer Unterbrechung der Messung soll die Versuchszeit gestoppt, bei einer Fortsetzung der Messung soll die Versuchszeit wieder fortgesetzt werden. Zudem sollte die Versuchszeit manuell zurückgesetzt werden können.
Eine funktionierende "Stoppuhr" habe ich im angehängten VI "VersuchszeitErmitteln" bereits realisiert (Das Prinzip entspricht einem früheren Vorschlag aus diesem Forum).
[attachment=33289]

Jetzt weiß ich nicht mehr weiter, denn die "Verknüpfung" dieser beiden VIs mag mir einfach nicht gelingen...
Alles zusammen in eine große While-Schleife funktioniert genausowenig wie die Variante mit beiden While-Schleifen in einem VI.

Gibt es vielleicht noch eine etwas elegantere Lösung, die Versuchszeit nach den gewünschten Vorgaben zu realisieren?
Ich bin für jede hilfreiche Antwort dankbar!

Viele Grüße und besten Dank im Voraus
Stefan

Lv10
Hallo MPA,

wow, man kann die Zeit auch "sehr" kompliziert messen... (Es geht möglichweise noch einfacher als in meiner Bearbeitung, aber ist ja auch nur proof-of-concept.)

Siehe Anhang:
Du darfst noch einen Stop-Button einfügen, wie willst du dein VI sonst jemals stoppen können?
Und die Umrechnung von ms nach "dd:hh:mm: ss" bekommst du sicher auch hin Smile

[attachment=33291]
Welchen Zweck soll dieses RubeGoldberg-Konstrukt erfüllen? Wenn TRUE dann TRUE sonst FALSE Smile
Im zweiten VI finden sich auch wieder ungebremste Schleifen, die dafür aber ewiglich laufen dürfen...Flop
(Anders ausgedrückt: wie oft pro Sekunde soll die Zeitanzeige refresht werden, damit du ihr vertraust?)
Hallo Stefan!

Leider kann ich deine Anhänge nicht öffnen wg. Version.
Du kennst ja bestimmt die Möglichkeiten von Notifier/Melder und Queue?

Ich nutze aber auch gerne die globalen Variablen.
Liebe Superprogrammierer, bitte nicht steinigen!! Es ist manchmal auch Geschmacksache.

Man kann sich mit den globalen Variablen recht üble Bugs einbauen. Doch wenn man sich immer bewusst ist welches VI drauf schreibt, kann wenig passieren.

Ein wesentlicher Vorteil der Global ist, dass man sich den Inhalt in der Laufzeit ständig betrachten kann.

Wenn Du nicht genau weißt wie man mit Globals arbeitet, melde Dich noch mal.

Gruß

Joachim
Guten Morgen Gerd,

vielen Dank erst einmal für deinen hilfreichen Tipp!
Die "Stoppuhr"-Funktion habe ich entsprechend angepasst und in mein "Haupt-VI" eingefügt:
[attachment=33301]

Zitat:Welchen Zweck soll dieses RubeGoldberg-Konstrukt erfüllen? Wenn TRUE dann TRUE sonst FALSE

Deine Anmerkung zu meiner "etwas komplizierten" Bedingungsabfrage habe ich auch eingearbeitet Smile

In die While-Schleife habe ich bewusst keinen Stopp-Button eingefügt. Das VI soll anschließend als ".exe" gespeichert und verwendet werden. Wie kann ich es sonst realisieren, dass kontinuierlich Daten in den Schaubildern angezeigt werden, auch ohne dass das VI läuft?

Jetzt habe ich eigentlich nur noch ein Problem mit dem Zyklenzähler (in der CASE-Struktur):
Er zählt zwar, allerdings stimmt die "Taktung" nicht.
Sobald die Bedingung erfüllt ist, legt der Zähler los (soweit so gut).
Allerdings soll ja eigentlich nur der "Schaltzustand" gezählt werden...
Gibt es eine Möglichkeit, dies zu realisieren?

Viele Grüße
Stefan
Hallo Stefan,

Zitat:soll ja eigentlich nur der "Schaltzustand" gezählt werden
Dann musst du das auch so programmieren - also auf Änderung des Schaltzustands testen (siehe Anhang)...

Zitat:Wie kann ich es sonst realisieren, dass kontinuierlich Daten in den Schaubildern angezeigt werden, auch ohne dass das VI läuft?
Gar nicht: wenn ein VI nicht läuft, kann es auch keine Daten produzieren. Das war aber nicht der Punkt meiner Frage...
Gegenfrage: Willst du die Exe immer über den TaskManager beenden? Bisher müsstest du das, da ja die WhileLoops unendlich laufen und du keine Abbruchbedingung vorgesehen hast. Dabei hast du doch schon eine Eventstruktur in deinem VI - und da kann man sehr einfach abfragen, ob der Benutzer rechts oben auf's "X" klickt...
Hallo Gerd,

danke für deinen Tipp: Eine Abbruchbedingung habe ich mit einer Eventstruktur leider nicht hinbekommen, aber dafür einen einfachen Stopp-Schalter erstellt Wink

Das VI (Datenerfassung /-speicherung, Versuchszeitermittlung) läuft soweit auch, allerdings bereitet mir der Zyklenzähler immer noch einiges Kopfzerbrechen.
Dein Tipp bzgl. der Änderung des Schaltzustands ist gut, allerdings zählt der Zähler zu oft.

Zum besseren Verständnis erklär ich kurz den Hintergedanken des Messprogramms:
In meinem Versuchsaufbau sollen zyklische Temperaturkurven gemessen werden, die Zustände sind "Heizen" bzw. "Kühlen".
Ein Zyklus besteht aus einer Heiz- und einer Kühlphase, der Übergang von einem Zyklus in den nächsten erfolgt nach der Kühlphase, also mit Beginn der nächsten Heizphase.

Als Bedingungen für den Zykluszähler sind folgende Varianten denkbar:
1. Wenn beide Magnetventile geschlossen sind => Heizen; wenn beide Magnetventile offen sind => Kühlen
2. Über ein Signal (TRUE/FALSE) wird der jeweilige Zustand (Heizen / Kühlen) angezeigt.
3. Weitere Varianten...?

Im angehängten VI habe ich die beiden erwähnten Varianten schon getestet, allerdings zählt der Zähler bei jedem Wechsel des Zustands und nicht nur beim gewünschten Wechsel von Kühlen zu Heizen...
Gibt es eine Möglichkeit, den Zähler entsprechend anzupassen?
[attachment=33323]

Viele Grüße
Stefan

Lv10
Hallo Stefan,

dann probier doch mal die Wunder boolscher Logik aus Smile

Z.B. statt einem XOR ein (X AND NOT Y) oder (Not X AND Y) zum Erkennen von steigenden oder fallenden Flanken, respektive...
Hallo Gerd,

nach einigem Ausprobieren und längerer Recherche klappt nun auch der Zyklenzähler (siehe Snippet):
[attachment=33359]

Viele Grüße und vielen Dank!
Stefan

*Problem gelöst*
Referenz-URLs