10.06.2013, 14:23
Beitrag #1
|
Lumberjacker
LVF-Grünschnabel
Beiträge: 19
Registriert seit: Dec 2006
2012
2005
kA
Oesterreich
|
Parallele While Schleife, oder andere Lösungsansätze?
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?
|
|
|
10.06.2013, 14:38
Beitrag #2
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
|
RE: Parallele While Schleife, oder andere Lösungsansätze?
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?
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
11.06.2013, 10:32
Beitrag #3
|
Lumberjacker
LVF-Grünschnabel
Beiträge: 19
Registriert seit: Dec 2006
2012
2005
kA
Oesterreich
|
RE: Parallele While Schleife, oder andere Lösungsansätze?
(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
|
|
|
11.06.2013, 11:04
Beitrag #4
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
|
RE: Parallele While Schleife, oder andere Lösungsansätze?
(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
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
11.06.2013, 11:44
Beitrag #5
|
Lumberjacker
LVF-Grünschnabel
Beiträge: 19
Registriert seit: Dec 2006
2012
2005
kA
Oesterreich
|
RE: Parallele While Schleife, oder andere Lösungsansätze?
(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
|
|
|
11.06.2013, 12:01
Beitrag #6
|
TSC
LVF-Team
Beiträge: 1.882
Registriert seit: Sep 2008
LV 2018 SP1
2008
EN
52379
Deutschland
|
RE: Parallele While Schleife, oder andere Lösungsansätze?
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?
Example.vi (Größe: 16,31 KB / Downloads: 594)
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" ( Konrad Zuse)
|
|
|
11.06.2013, 13:31
Beitrag #7
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
|
RE: Parallele While Schleife, oder andere Lösungsansätze?
Das ist nicht wirklich synchronisiert und es gehen auch Daten verloren. Dann doch lieber eine "Producer-Consumer" Architektur.
Gruß Markus
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
11.06.2013, 13:58
Beitrag #8
|
TSC
LVF-Team
Beiträge: 1.882
Registriert seit: Sep 2008
LV 2018 SP1
2008
EN
52379
Deutschland
|
RE: Parallele While Schleife, oder andere Lösungsansätze?
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!
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" ( Konrad Zuse)
|
|
|
12.06.2013, 15:29
(Dieser Beitrag wurde zuletzt bearbeitet: 12.06.2013 15:30 von Kinx.)
Beitrag #9
|
Kinx
LVF-Grünschnabel
Beiträge: 16
Registriert seit: May 2012
LabVIEW 2012
2010
EN
09112
Deutschland
|
RE: Parallele While Schleife, oder andere Lösungsansätze?
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
|
|
|
17.06.2013, 13:19
|
|
|
| |