LabVIEWForum.de
Erzeuger / Verbraucher Entwurfsmuster - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Signaldarstellung (/Forum-Signaldarstellung)
+---- Thema: Erzeuger / Verbraucher Entwurfsmuster (/Thread-Erzeuger-Verbraucher-Entwurfsmuster--24810)



Erzeuger / Verbraucher Entwurfsmuster - Sonde - 07.10.2013 12:25

Hallo zusammen,

ich habe mittels der Erzeuger / Verbraucher Entwurfsmustervorlage versucht ein Graphen zu erzeugen. Ich habe im NI Manager meine Hardware USB 6221 simuliert und mittels DAQ Assistent in der oberen WHILE Schleife einen Kanal definiert und in der unteren die entsprechenden Leitungen angeschlossen. Weiter habe ich in der unteren WHILE Schleife einen Formelknoten erstellt und einen ein Signalverlaufsdiagramm angeschlossen.

Leider bekomme ich keinen Graphen und kann das Programm nicht mit der Stopp-Taste anhalten. Datei liegt bei.

Kann mir jemand weiterhelfen?


RE: Erzeuger / Verbraucher Entwurfsmuster - BsaiboT - 07.10.2013 13:02

Hab leider grad kein LV-Rechner zur Verfügung. Poste mal ein Bild von deinem BD, dann kann ich mal schauen ob mir dazu etwas einfällt.
Smile


RE: Erzeuger / Verbraucher Entwurfsmuster - Sonde - 07.10.2013 13:13

Hallo,

ich habe 3 Screenshots angeheftet. Ich hoffe es ist zu verstehen.[/quote]


RE: Erzeuger / Verbraucher Entwurfsmuster - GerdW - 07.10.2013 13:18

Hallo Sonde,

du verwendest Queues, die du im Consumer ohne TimeOut abfragst. Da du aber in deinen Producern immer nur eine von 2 Queues mit Daten befüllst, wartet der Consumer unendlich (ohne TimeOut) auf die Daten in den jeweils anderen Queues...

Lösung(en):
- TimeOut verwenden
- nur eine Queue pro Producer, dafür aber mit Kennung, ob ein Messwert oder ein Tara gesendet wird. Tara-Daten werden im Consumer in Schieberegistern gepuffert...

P.S.:
Ein Ctrl-U würde deinem VI guttun! Big Grin


RE: Erzeuger / Verbraucher Entwurfsmuster - BsaiboT - 07.10.2013 13:30

Also....
1. Dein Graph liegt ausserhalb der While-Schleife. Das führt dazu, dass er erst mit dem Beenden der Schleife einen Wert bekommt. Die betreffende While-Schleife wird jedoch über das Error-Cluster deiner Queue gesteuert und da du bei Error aus deiner Case-Struktur nur einen Standardwert ausgibst wird er auch nach erfolgreichem Beenden der Schleife keinen Wert, bzw. 0 anzeigen.

2. Ein Eingang einer While-Schleife nimmt nur bei ersten Start den von Außen anliegenden Wert auf. Des weiteren wartet die Schleife mit ihrer Ausführung bis alle Eingangswerte empfangen wurden. Das bedeutet bei dir, dass die zweite Erzeugerschleife gar nicht startet, solange deine erste noch läuft. Sobald sie dann läuft, wird sie dann auch schon wieder beendet, aufgrund deiner Stoppbedingung.

Du solltest dir noch einmal das Datenflussprinzip von LV anschauen.

Um dein VI ans Laufen zu bekommen solltest du Stopp-Signal und Nullung in Queues packen oder mit Notifiern arbeiten und deinen Graph in die Verbraucherschleife hineinziehen. Achte darauf, dass er immer gültige Werte bekommt. Ggf. musst du hier ein Array erzeugen um den Verlauf der Daten "zu speichern". Einfach mal eine einfachere Übung mit Graphen hierzu machen um das Verständnis zu bekommen.

Gruß,
//Tobias


RE: Erzeuger / Verbraucher Entwurfsmuster - Sonde - 07.10.2013 14:36

Hallo an alle!

Danke für die Tipps (speziell der Ctrl-U)! Ich werde versuchen mein VI dahingehend abzuändern.

Grüße,
Sonde