Kurz gesagt, du hast Erzeuger- und Verbraucherschleife vertauscht. Du willst ja, soweit ich das versteh die gemessene Frequenz an die parallel laufende Schleife übertragen in der diese Frequenz analysiert werden soll. Oder?
Dann musst du die Daqmx Elemente in die andere Schleife packen! Schau dir lieber nochmal genau meinen Screenshot an!
Hallo NoD,
ich hatte Erzeuger und Verbraucher vertauscht, weil ich das Programm in der Schleife abbreche, in der die Frequenz verarbeitet wird. Ich will sozusagen die Erzeugung der Daten stoppen, wenn ich die Verarbeitung stoppe. Es gibt in der verbraucherschleife noch eine 2. Bedingung, die zum Abbruch des Programmes führt, deshalb habe ich das Bedienelement in der Verbraucherschleife. Es funktioniert auch einwandfrei, so wie ich es jetzt aufgebaut habe. :-). Bis auf das ich das Gefühl habe, dass die Datenübertragung nicht richtig funktioniert. Ich übergebe meine gemessene Frequenz mit einer lokalen Variablen, da auch der Rest des Programmes mit lokalen Variablen arbeitet. Mir ging es erstmal nur um die Stopp-Knopf-Problematik und die löst sich mit der "nutzlosen" Queue einwandfrei. Ich sehe aber ein, dass es eleganter wäre, das Bedienelement in die Erzeugerschleife zu tun (ist ja eigentlich egal, oder?) und werde das mal ausprobieren.
viele grüße
Ich verstehe nicht ganz, welche Bedingung an die Case-Struktur in der Erzeugerschleife angeschlossen werden muss. Hat da jemand noch eine Erklärung? Danke!!
Also die Datenübertragung (genauer Werte die gemessen werden) solltest du nicht mit Lokalen Variablen von Schleife zu Schleife übertragen da es zu Laufzeitfehlern führt, wenn du nicht konsequent mit Semaphoren arbeitest. Zudem sollte man lokale Variablen immer initialisieren!
Ich denke, dass dies auch dein Problem sein wird: Laufzeitfehler (Timing)!
Du solltest besser das so aufbauen, wie ich das gesagt habe (Erzeuger Verbraucher Struktur). Mit Lokalen Variablen übertrag ich persönlich nur Schalterzustände etc. (z.B. so wie im Anhang).
Wenn es dir nur drum geht zwei parallele Schleifen zu beenden dann geht das beispielsweise so:
[
attachment=25342]
Gruß NoD
hallo,
habe nochmal ne allgemeinere Frage zum Produzenten-Konsumenten-Modell. Das funktioniert doch nur, wenn der Produzent schneller bzw. mindestens gleich schnell wie der Konsument arbeitet (seine Schleifen durchläuft) ? Ansonsten greift der Konsument doch auf die Queue zu, wenn noch gar kein neues Element vorhanden ist und das gibt ne Fehlermeldung. Jedenfalls beobachtet ich das. Bei mir läuft die Konsumentenschleife allerdings schneller, da ja auch noch andere Schritte bearbeitet werden neben der Datenverarbeitung. meine Konsumentenschleife darf eigentlich nur auf die Queue zugreifen, wenn auch ein neues Element vorhanden ist oder?
Wenn kein Element in der Queue ist, dann ist das quasi auch ein Zustand, nämlich "nichts tun". Das musst du nur entsprechend einbauen und abfangen, dann gibt es auch keine Fehlermeldung.
Gruß, Jens
Also ein Fehler wird nicht erzeugt, wenn kein neuer Wert dem Queuer zugeführt wird. Es wird nur ein Fehler erzeugt wenn die Erzeugerschleife beendet wird (dieser beendet Verbraucherschleife).
Wenn kein Wert dem Queuer zugeführt wird, dann wird die Verbraucherschleife auch nicht ausgeführt. Sie steht sozusagen solange, bis wieder ein neuer Wert verfügbar ist.
Du kannst dir die ganze funktionsweise mit dem angehängten VI selbst erklären. Einfach ein wenig rumprobieren und die die beiden Schleifen Iterationszähler beobachten.
LV8.6 [
attachment=25393]