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!
ich habe ein Vi erstellt, die drei While Schleifen beinhaltet:
1. die erste erfasst kontinuierlich ein analoges Signal und speichert die daten
2. Steuert einen analogen Ausgang Manuell
3. nimmt Aufnahmen auf und speichert sie
Die drei Schleifen laufen unabhängig voneinander und kommunizieren
nicht miteinander.
Die erste Frage ist, ob man in Labiew das wie oben machen kann oder soll ich
das anders verfahren?
Die zweite Frage ist, ob ich für diese Anwendung die Wait-Funktionen in der
3. Schleifen einbauen soll oder ist das nicht wichtig für meine Anwendung?
zu einer besseren Übersicht habe ich hier ein Screenshort-Beispiel angehängt:
' schrieb:Die erste Frage ist, ob man in Labiew das wie oben machen kann oder soll ich das anders verfahren?
Das kann man wie oben machen - ist sogar von Vorteil. Auch dann, wenn die Schleifen mittels Queues und/oder Melder miteinander kommunizieren.
Zitat:Die zweite Frage ist, ob ich für diese Anwendung die Wait-Funktionen in der 3. Schleifen einbauen soll oder ist das nicht wichtig für meine Anwendung?
Prinzipiell musst man in jeder While-Schleife eine Verzögerungszeit haben. Entweder implizit durch Elemente wie z.B. "Warten auf Melder", etc oder explizit durch diese diversen Warte-VIs. Ohne Wartezeit gibt es diverse Probleme. Die Wartezeit ist nicht applikationsabhängig, sondern systembedingt.
Ob dieses parallele Verfahren für deine Applikation optimal ist und ob du explizite Warte-VIs brauchst, kann ich nicht entscheiden. Was du machen willst weis ich ja nicht.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Zitat:Prinzipiell musst man in jeder While-Schleife eine Verzögerungszeit haben. Entweder implizit durch Elemente wie z.B. "Warten auf Melder", etc oder explizit durch diese diversen Warte-VIs. Ohne Wartezeit gibt es diverse Probleme. Die Wartezeit ist nicht applikationsabhängig, sondern systembedingt.
wenn das so ist würde ich das auch machen. Im fall von Wait-Funktion wie in der ersten Schleife, wenn ich die auch im zweiten und dritten einbaue, welche Zeiten soll ich nehmen, damit es keine Probleme gibt?
Diese Wait-Funktionen habe ich noch ganz genau durchgblickt.
Gruss Mati
04.02.2008, 08:51 (Dieser Beitrag wurde zuletzt bearbeitet: 04.02.2008 09:20 von Lucki.)
' schrieb:Die zweite Frage ist, ob ich für diese Anwendung die Wait-Funktionen in der
3. Schleifen einbauen soll oder ist das nicht wichtig für meine Anwendung?
Auf gar keinen Fall! Es ist zwar richtig, was Ichselbst sagt, daß grundsätzlich jede Schleife eine Verzögerungszeit haben soll. Nur muß man dann gleich dazu sagen, daß das VI "DAQmx Read", welches in der Schleife zu Datenerfassung vorhanden ist, diese Wartefunktion bereits leistet und mit weiteren Wartefunktionen nur Unheil angerichtet werden kann.
Es funktioniert so:
Es blockiert so lange, bis die Anzahl der Daten, die das VI auslesen soll, tatsächlich im Buffer ist.
Wenn es auf "Alle Daten aus dem Buffer lesen" konfiguriert ist, dann wartet es solange, bis wenigstens ein Datenpunkt im Buffer vorhanden ist.
04.02.2008, 09:07 (Dieser Beitrag wurde zuletzt bearbeitet: 04.02.2008 09:18 von Lucki.)
' schrieb:wenn das so ist würde ich das auch machen. Im fall von Wait-Funktion wie in der ersten Schleife, wenn ich die auch im zweiten und dritten einbaue, welche Zeiten soll ich nehmen, damit es keine Probleme gibt?
Diese Wait-Funktionen habe ich noch ganz genau durchgblickt.
Das hängt von Deiner Applikation ab, da gibt es keine feste Regel. Wenn Du den Windows-Task-Manager aufrufst, dann kannst Du sehen, daß ohne Wartezeit die CPU-Belastung 100% beträgt, aber bereits bei 1ms ist sie weit von diesen 100% entfernt.
Wenn Du z.B. Bedienelemente in der Schleife hast, dann sollten sie so oft abgefragt werden, daß keine lästige Verzögerung der Reaktion zu beobachten ist. Mit 100ms ist man da schon gut bedient. Ebenso beim Update von Anzeigen oder Diagrammen. Eine Updaterate von mehr als 10Hz nützt dem Beobachter nichts, also ist auch hier 100ms angemessen.
Die Wait-Funktion muß man sich als zeitliches "Oder" vorstellen:
In er Schleife hat man die Wait-Funktion und irgendwelchen Code. Wenn die Abarbeitungszeit des Codes länger ist als das Wait, dann ist es so also ob das Wait gar nicht vorhanden wäre. Wenn die Abarbeitungszeit kleiner ist, dann wartet die Wait-Funktion bis zur voreingestellten Zeit. Es dominiert immer die längere der beiden Zeiten.
jetzt ein ganz andere Frage. wie kann ich die 3 while Schleifen statt bisher
jede einzelne mit dem zugehörigen Stopbutton, alle drei Schleifen auf einmal mit nur einem
Stopbutton beende.
Gruss Mati
06.02.2008, 13:31 (Dieser Beitrag wurde zuletzt bearbeitet: 06.02.2008 13:34 von Lucki.)
' schrieb:wie kann ich die 3 while Schleifen statt bisher
jede einzelne mit dem zugehörigen Stopbutton, alle drei Schleifen auf einmal mit nur einem
Stopbutton beende.
Mit lokalen Variable des Stop-Bottons, wobei es da ein kleines Problem gibt: Er darf dann nicht das Schaltverhalten Latch haben, geht also beim Lesen nicht von selbst in die false-Stellung zurück. Das muß vom Programm besorgt werden.
Es gibt da drei Möglichkeiten:
1) False setzen nur bei Programmstart
2) False setzen nur bei Beenden des Programms
3) False-setzten bei Programmstart und beim Beenden, wie abgebildet.
Ich selbst bevorzuge Methode 1. Der Schönheitsfehler daran ist, daß der Knopf nach Beenden das Programms gedrückt bleibt.
Das ist bei Methode 2 nicht der Fall, dafür hat man den unerwünschten Effekt, daß, wenn jemand vor dem Start des Programms schon am Knopf herumspielt, dieser schon gedrückt sein kann und das Programm dann ungewollt sofort beendet wird.
Methode drei (Bild) ist natürlich vollkommen, aber es ist mir zu viel Aufwand.
' schrieb:würde ich gerne nach der dritten versuchen. Die Sequenz im Diagramm ist eine Flache Sequenzstruktur ?
Ja, natürlich. Aber die muß nicht in jedem Fall sein, die Reihenfolge der Abarbeitung läßt sich z,B, auch durch den Datenfluß erzwingen.
Falsch ist es auf jeden Fall, bei einer der drei Schleifen eine False-Konstante nach außen zu führen und dort die lokale Schaltervariable anzuschließen. Dann wird womöglich der Schalter zurückgesetzt zu einem zu frühen Zeitpunkt, wenn die anderen beiden Schleifen noch gar nicht beendet sind.
Zitat:Was meinst mit viel Aufwand ?
Da hast recht, es ist kein Aufwand weiter, aber es geht auch um nichts. Wenn z.B. das VI Haupt-VI ist und als exe kompiliert ist, dann wird sowieso mit den Standardwerten begonnen. Man müßte dann den Schalter nicht zu Beginn auf false stellen.