LabVIEWForum.de - Parallele While Schleife, oder andere Lösungsansätze?

LabVIEWForum.de

Normale Version: Parallele While Schleife, oder andere Lösungsansätze?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo!

Ich habe ein fertiges komplexes Labview Messprogramm, welches im Sekundentakt, Messdaten erfasst, mittelt, auswertet, anzeigt und speichert (Textfile).
Ich muss jetzt zusätzlich eine Funktion programmieren, welche es ermöglicht die aufgezeichneten Daten darzustellen, und darin "herumzuscrollen". Diese Aufgabe habe ich bereits weitgehend erledigt, allerdings habe ich jetzt das Problem, dass wärend dieses neue Unterprogramm,"Dataviewer", läuft, die aktuellen Messwerte nicht erfasst werden, da die Whileschleife des Hauptprogramms ja nicht weiterläuft, da sie ja durch das Unterprogramm "Dataviewer" angehalten wird, bis dieses wieder beendet wird (Im Unterprogramm läuft eine schnelle Whileschleife, die das Textfile ausließt, und Daten in einem Diagramm darstellt usw..

Die Whileschleife des Hauptprogramms hat aber auch eine viel zu lange Durchlaufzeit (1sek) , um darin direkt vergangene Messdaten anzusehen.

Ich müsste also eine Parallele Whileschleife dazu laufen lassen, in welcher das Umterprogramm "Dataviewer" lauft. Ich hab das mal kurz probiert, aber irgendwie hat das mächtig ressourcen gefressen. Hab ich was falsch gemacht, bzw gibt es andere Lösungsideen?
Nö, das ist schon richtig (Stichwort: Producer Consumer Pattern).
Lad' mal Dein Bsp. hoch. Vielleicht hast Du eine ungebremste Whileschleife....

Gruß Markus

(10.06.2013 14:23 )Lumberjacker schrieb: [ -> ]Ich müsste also eine Parallele Whileschleife dazu laufen lassen, in welcher das Umterprogramm "Dataviewer" lauft. Ich hab das mal kurz probiert, aber irgendwie hat das mächtig ressourcen gefressen. Hab ich was falsch gemacht, bzw gibt es andere Lösungsideen?
(10.06.2013 14:38 )Y-P schrieb: [ -> ]Nö, das ist schon richtig (Stichwort: Producer Consumer Pattern).



ist das zwingend notwendig? ist das nicht nur für den Datenaustausch? Den wollte ich mit Variablen machen? Oder könnte daran das problem mit der Performance liegen? Ich hab eigentlich in die zweite schnelle While-Schleife extra ein Warten(20ms) eingebaut, um sie zu bremsen. Hat aber nichts gebracht
(10.06.2013 14:23 )Lumberjacker schrieb: [ -> ]welches im Sekundentakt, Messdaten erfasst, mittelt, auswertet, anzeigt und speichert (Textfile).
Da kannst Du doch das Auswerten und Speichern in (einer) anderen Schleife(n) machen.
(11.06.2013 10:32 )Lumberjacker schrieb: [ -> ]ist das zwingend notwendig? ist das nicht nur für den Datenaustausch? Den wollte ich mit Variablen machen? Oder könnte daran das problem mit der Performance liegen? Ich hab eigentlich in die zweite schnelle While-Schleife extra ein Warten(20ms) eingebaut, um sie zu bremsen. Hat aber nichts gebracht

Gruß Markus
(11.06.2013 11:04 )Y-P schrieb: [ -> ]Da kannst Du doch das Auswerten und Speichern in (einer) anderen

leider nicht wirklich. Das Hauptprogramm ist quasi vorgegeben, das kann und darf ich nur geringfügig ändern.

was im Moment auch noch nicht funktioniert, ist, dass wenn das DataViewer programm läuft, ich nicht mehr auf das Hauptprogramm zugreifen kann, obwohl das eigentlich in einer parallelschleife läuft
Hier mal ein ganz vereinfachtes Beispiel wie meine Programme so aufgebaut sind! Das Ganze ist natürlich mit Vorsicht zu genießen und ist auf keinen Fall in jeder Situation die optimale Struktur!
Durch die Verwendung von Umgebungsvariablen kann man jede Schleife (bis auf die Events) auch in ein extra VI packen und separat starten!
Vielleicht hilft dir das ja?
[attachment=44963]
Das ist nicht wirklich synchronisiert und es gehen auch Daten verloren. Dann doch lieber eine "Producer-Consumer" Architektur. Big Grin

Gruß Markus
Wie gesagt: es ist ein ganz plattes Beispiel.

Nach meinem Verständnis ist es sogar Producer-Consumer. Sicherlich könnte man anstelle der Umgebungsvariablen Queues verwenden um alle Daten zu sichern was aber in meinen Projekten nie eine Rolle spielt! Auch das Synchronisieren wäre hier noch problemlos machbar, wenn man es denn wirklich braucht! Gerade bei der Anzeige ist es mir egal, ob ein Wert schon ne Sekunde alt ist! Hier kommt es natürlich wie immer auf die Anwendung an. Ne Sekunde kann lang sein, oder eben sehr kurz.

Meist habe ich in der LogSchleife dann die Abfrage: "Wert geändert"? Wenn ja, dann schreibe ihn, wenn nein, ignorieren! Dann kann die Schleife auch deutlich schneller laufen und macht in 90% der fälle nichts außer einer Abfrage!
Hallo,

eine große Anzahl von While-Schleifen, so wie du sie im Example.vi verwendet hast, stellt immer ein Risiko bezüglich des Benutzerhandlings bzw. sauberen starten und schließen dar. Wie schon gesagt über eine Consumer-Producer-Architektur wär der beste Weg um dein Problem zu lösen.
Ich stelle mir nur die Frage warum liest du die Daten wieder aus der .TXT? Sammel sie doch lieber in eine Queue und unter der Bedingung "X" leerst du diese. Performance technisch machst du dort richtig plus.
Meine Empfehlung: Einen Thread zum loggen und einem zum messen. Diese feuerst du dann immer mit Befehlen aus einer "Command-Queue" bzw. Notifier.

Grüße Kinx
irgendwie komm ich auf keinen grünen zweig mit dem Programm, darum jetzt hier mal die Labview dateien

Also, das unterprogramm "SignalViewer" sollte jetzt im Moment über den schalter "Boolesch" über das Frontpanel aufgerufen werden können, und dann parallel zum Messdatenerfassungsprogramm laufen. Ob das Programm so wie ich es hochgeladen hab lauffähig ist weiß ich nicht. schließlich fehlt ja unter anderem auch die ganz hardware.

Aber vielleicht kann mir trotzdem irgendjemand etwas dazu sagen, würde mir sehr weiterhelfen.... im der Sequenz"11" der While schleife befindet sich das "SignalViewer" Proramm (in einer Deaktivierungsstrukur), die auch schon funktioniert hat, aber eben ohne parallel zu laufen.

hat jemand tips für mich, oder kann mir weiterhelfen?

danke
Seiten: 1 2
Referenz-URLs