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!
10.11.2015, 10:47 (Dieser Beitrag wurde zuletzt bearbeitet: 10.11.2015 10:52 von Lucki.)
Zitat:... Eventstruktur kann immer noch bis zu einer Sekunde lang blockiert sein
Die ganze Struktur ist immer noch Krampf zum Quadrat.
Eine Queue-Struktur kann mehre Erzeuger haben haben, aber immer nur einen Verbraucher. Das wäre hier der Fall: Die obere und untere Schleife sind Erzeuger, die mittlere ist Verbraucher. Was läge also näher, als eine Queue zu verwenden - und nicht deren zwei??
Habe das VI mal geändert:
dein Kommentar macht Sinn.
Ist so nun auch viel einfacher gelöst und man braucht das Time Out nicht mehr.
Danke für die Hilfe
Habe es nun mit meinem Hauptprogram verheiratet und es funktioniert nun alles bis auf den " Programm beenden" Button.
Der ist komischerweise ohne Funktion, obwohl ich alles genau so habe wie in dem TestVI. (viele Ursachen können es ja nicht sein, ist ja nur ein Button 0.o)
Zitat:... Eventstruktur kann immer noch bis zu einer Sekunde lang blockiert sein
Die ganze Struktur ist immer noch Krampf zum Quadrat.
Eine Queue-Struktur kann mehre Erzeuger haben haben, aber immer nur einen Verbraucher. Das wäre hier der Fall: Die obere und untere Schleife sind Erzeuger, die mittlere ist Verbraucher. Was läge also näher, als eine Queue zu verwenden - und nicht deren zwei??
Habe das VI mal geändert:
Was ich genauso in Beitrag #6 vorgeschlagen habe!!!
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!
(10.11.2015 18:03 )Hydrogencarbonat schrieb: ... und es funktioniert nun alles bis auf den " Programm beenden" Button.
Der ist komischerweise ohne Funktion, obwohl ich alles genau so habe wie in dem TestVI. (viele Ursachen können es ja nicht sein, ist ja nur ein Button 0.o)
Meinst Du "Programm stoppen"?. Hast Du die Änderungen gesehen, die ich gemacht hatte?
1. Wegfall der lokalen Variablen. In der oberen Schleife kann "Neuer Wert" benutzt werden. Die Variable kann dann in der mittleren Schleife direkt zum Stoppen verwendet werden.
2. Da keine lokalen Variablen mehr verwendet werden, kann die Funktion auf "Latch" umgestellt werden. Das erspart die zweite lokale Variable zum Rücksetzen das Stopp-Knopfes.
Das Quadrat in meinem Kramp-Ausdruck nehme ich zurück. So ganz schlecht ist die Struktur doch nicht, aber ich übertreibe eben gern
(10.11.2015 18:03 )Hydrogencarbonat schrieb: Habe es nun mit meinem Hauptprogram verheiratet und es funktioniert nun alles bis auf den " Programm beenden" Button.
Der ist komischerweise ohne Funktion, obwohl ich alles genau so habe wie in dem TestVI. (viele Ursachen können es ja nicht sein, ist ja nur ein Button 0.o)
Da liegt auch eine schöne Race-Condition vor! In der Erfassungsschleife wird "Messung starten" ausgelesen, dann wird bei "True" in den 1 Sekunde dauernden True-Case gesprungen. Wenn zu diesem Zeitpunkt "Messung beenden" betätigt wird, dann wird zwar "Messung starten" in der Eventstruktur auf False gesetzt, aber dann in der Erfassungsschleife wieder durch "True" überschreiben.
Eine saubere Lösung wäre auch hier die Steuerung der Erfassungs-Loop per Queue oder Notifier (in diesem Fall eine neue Queue!).
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!
Hi Lucki,
ja. hab das mit den lokalen Variablen mitbekommen;P.
Je weniger im Prog sind desto besser . Danke
Aber ob man sie drin hat oder nicht ist nicht Ursache des Problems.
Hi Jens,
verstehe das Problem.
Vielen Dank.
Ich werde mich nun mit den Melderfunktionen auseinander setzen.
Hatte bis jetzt noch nicht mit diesen Funktionen gear[/quote]beitet und den Horizont zu erweitern ist immer gut
ich kann nun die Erfassungsloop per Melderfunktion steuern.
Der Stopp Button funktioniert wieder.
Nur die kontinuierliche Datenerfassung in der State Maschine geht jedoch nicht mehr.
(11.11.2015 12:42 )Hydrogencarbonat schrieb: fast meine Lösung nur mit Queues. Ja das mit dem Queue Leeren macht Sinn
Das Leeren der Queue ist aber nicht das Eigentliche, das ist nur eine zusätzliche Sicherheit. Entscheidend ist, dass, solange die Messung laufen soll, mit jeder Messwerterfassung wieder der Status "Messen ausführen" in die Queue gegeben wird, so daß sich die Messung so lange wiederholt, bis von der Ereignisschleife "Messung beenden" in die Queue gegeben wird.
Das sieht nach einer Notlösung aus, ist es aber nicht. Ich habe das in einem hochprofessionellem Beispielprogramm so gesehen - allein wäre ich vielleicht nicht darauf gekommen.
Zitat:Ich weiss ohne eine Blick auf das HauptVI zu werfen kann man schlecht den Fehler abschätzen, aber ich streube mich dagegeben es hochzuladen
Warum nicht? Es gibt hier laufend berechtigte Klagen über fehlende VIs. Dass sich jemand beschwert, dass ein VI zu groß ist, habe ich noch nicht gehört.
Ideal wäre aber, wenn das VI auch ohne echte Datenerfassung lauffähig ist, d.h. dass die Messwerte weiterhin durch simulierte Werte ersetzt werden - so wie Du das in deinen geposteten VIs schon mustergültig gemacht hattest.