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!
Mein fast fertiges Programm bräuchte noch einen Stopp- Button. Irgendwie steh ich hier gerade auf dem Schlauch. Der bestehende Versuch funktioniert so nicht. Vielleicht kann mir jemand dazu einen Tip geben.
Das VI ist angehängt. Vielen Dank im voraus!
Thomas
Anzeige
18.08.2011, 14:50 (Dieser Beitrag wurde zuletzt bearbeitet: 18.08.2011 14:51 von GerdW.)
Der Stopp-Button wird genau einmal abgefragt: nämlich bevor die Schleifen starten - weil der Button als Eingangsgröße für die Schleifen verdrahtet ist. Alles was danach passiert ist irrelevant...
QnD-Lösung: Lokale Variablen des Buttons in alle Schleifen verteilen...
P.S.:
- StyleGuide beachten: links-nach-rechts-Verdrahtung ist immer vorteilhaft...
- Das VI soll auf einem cRIO laufen. Hat das Ding einen Bildschirm? Oder wie willst du den Stopp-Button betätigen?
Zum Stoppen: Das primitivste ist, du erstellst für jede Schleife eine lokale Variable deines Stoppbuttons und schließt diese an die Abbruch-Terminals der Schleifen an. Denn jetzt bekommen die Terminals immer nur den Wert der zu Schleifenbeginn am Tunnel anliegt - und der ändert sich nicht, egal was du mit deinem button machst. Such mal nach dem Stichwort "Datenfluss".
Zu Blockdiagramm: Alle Achtung.
Nein, im Ernst: Du musst anfangen subVIs von Codeabschnitten zu bauen und das ganze Gerüst auf eine Monitorgröße zu reduzieren. Solche Tapeten über Tapeten von Blockdiagramm macht einfach kein Spass.
„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)
19.08.2011, 10:20 (Dieser Beitrag wurde zuletzt bearbeitet: 19.08.2011 10:22 von thomasd.)
(18.08.2011 14:50 )GerdW schrieb: - Das VI soll auf einem cRIO laufen. Hat das Ding einen Bildschirm? Oder wie willst du den Stopp-Button betätigen?
Erstmal Danke für die schnellen Antworten!
Werd mich jetzt mal damit beschäftigen.
Ich wollte das ganze immer mit Laptopunterstützung laufen lassen, zwecks Messdatenüberwachung am Bildschirm. Also das VI auf meinem Rechner ("Mein Computer" siehe Projekt) laufen lassen und das FPGA Target steuern.
(18.08.2011 14:55 )dimitri84 schrieb: Boah ...
Zu Blockdiagramm: Alle Achtung.
Nein, im Ernst: Du musst anfangen subVIs von Codeabschnitten zu bauen und das ganze Gerüst auf eine Monitorgröße zu reduzieren. Solche Tapeten über Tapeten von Blockdiagramm macht einfach kein Spass.
Hallo Dimitri!
Die einzelnen Codeabschnitte werden noch zum SubVI zusammengefasst, danke für den Tipp. Ist halt mein erstes Labview Projekt.
19.08.2011, 12:38 (Dieser Beitrag wurde zuletzt bearbeitet: 19.08.2011 12:39 von thomasd.)
So habe jetzt den Stopp Button als lokale Variable deklariert.
Es werden zwar alle Schleifen gestoppt, allerdings nicht das VI. Wo dran könnte das liegen?
So habe jetzt den Stopp Button als lokale Variable deklariert.
Es werden zwar alle Schleifen gestoppt, allerdings nicht das VI. Wo dran könnte das liegen?
Grüße
Thomas
nochmal das VI
Stichwort Eventstruktur:-P Die wartet immer noch auf ein Value-Change Event eines Controls bevor die Schleife fertig abgearbeitet wird
Bei deinen vielen Controls wäre ein Array of Cluster angebracht, dann sprengst du mit deinen Controls auch nicht dein Blockdiagramm und hast wesentlich weniger Sorgen beim verdrahten^^
Weil deine Eventstruktur "EWIG" auf ein Ereignis wartet, bevor sie beendet wird.
Mgl. Lösungen:
- ValueChange für Stop-Button als Event abfangen.
- Einen Wert von z.B. 50 am Timeout-Terminal der Event-Struktur anschließen, damit der Timeout-Case regelmäßig aufgerufen wird.
Rückfrage: Ich hoffe, dein VI läuft nicht auf einem RT-Target? Da funktionieren nämlich die ValueChange-Events nicht.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
1. Wenn du weiterhin Projekte mit LabVIEW realisieren willst, würde ich dir ganz dringend Raten dich zubelesen über die gängisten Programmierstrukturen mit LabVIEW
(Stichwort Zustandsmaschinen und Producer Consumer loop)
2. Guck dir mal bitte den Sinn einer Eventstruktur an, den hast du hier (in meinen Augen) leider total verfehlt.
So wie ich das sehe rufst du mehrmals ein und das gleich SubVI (Pausenlaenge..vi) auf, ist dieses VI Reentrant?
Sollen wirklich all Bedienelemten und das SubVI x-mal abgearbeitet werden, nur weil du einen Wert änderst?
3. Achte bitte darauf das deine Schleifen getimed werden sonst schlucken sie Performance.
4. Dein DMA Read soll einen Wert auslesen mit einem Timeout von -1. Das Bedeutet der DMA Fifo wartet solange bis ein Wert im Speicher vorhanden ist. ACHTUNG wenn der DMA Fifo wartet schluckt er auch erheblich Performance bzw. erhöt die CPU Last.
5. Warum öffnest du x-mal eine FPGA Refnum, es würde auch einmal reichen.
Ich weiß aller Anfang ist schwer und wenn es dein erstes Projekt ist, sind die Fehler mehr als Verständlich.
Die Punkte oben sollen nur anreize sein. Evtl. helfen Sie dir ja etwas weiter.
Viel Spass noch mit LAbVIEW aber guck dir bitte ein paar Unterlgen zur Programmierung mit LV an. Glaub mir es zahlt sich aus!
(19.08.2011 14:59 )Tim.P_50€ schrieb: 1
2. Guck dir mal bitte den Sinn einer Eventstruktur an, den hast du hier (in meinen Augen) leider total verfehlt.
So wie ich das sehe rufst du mehrmals ein und das gleich SubVI (Pausenlaenge..vi) auf, ist dieses VI Reentrant?
Sollen wirklich all Bedienelemten und das SubVI x-mal abgearbeitet werden, nur weil du einen Wert änderst?
5. Warum öffnest du x-mal eine FPGA Refnum, es würde auch einmal reichen.
I
Hi Tim!
Das mit der Eventstruktur war mir danach auch aufgefallen, aber ist ja keine Arbeit gewesen jede Berechnung in ein eigenen Case zu packen. Somit läuft auch wirklich nur die Berechnung, die wirklich benötigt wird.
Die Sache mit dem FPGA Refnum hatte ich auch schonmal versucht, allerdings sind dann immer die Speicher von den FIFOs vollgelaufen, deshalb hab ich es dann wieder so belassen. Da wäre ich dann aber wahrscheinlich wieder beim Punkt der richtigen Timeout- Einstellung.
Vielen Dank für die Kritik, hilft mir alles weiter.