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!
" ... Wie lange wartet die Funktion also bei einem TimeOut von "-1"? ..." fragst Du - ok, sie wartet also garnicht. Und was passiert, wenn ich an dem timeout-Ausgang eine "0" dranschreibe - dann wartet die Funktion auch nicht. Worin besteht der Unterschied nun zwischen "0" und "-1"? 0 wäre für mich auch "kein Zeitlimit".
Anzeige
01.02.2013, 10:28 (Dieser Beitrag wurde zuletzt bearbeitet: 01.02.2013 10:35 von GerdW.)
Zitat:Wie lange wartet die Funktion also bei einem TimeOut von "-1"? ..." fragst Du - ok, sie wartet also garnicht.
Wenn man dir eine Aufgabe gibt mit der Aussage "kein Zeitlimit", wann musst du dann Ergebnisse liefern?
Sofort (unmittelbar nach der Aufgabenstellung) oder erst dann, wenn du ein Ergebnis hast?
Vielleicht kannst du jetzt die Frage nach dem Unterschied von "-1" und "0" beim Zeitlimit selbst beantworten...
GerdW schrieb:
"... Zitat:
wenn der timeout-Anschluss immer noch false liefert, aber noch kein Element da ist
???
Entweder "TimeOut=TRUE, weil kein Element da" oder "TimeOut=False, weil Element da"... ..."
gut - ich habe meine Frage ungeschickt formuliert. Ist kein Element in der Queue, dann liefert "Element aus Queue holen" TRUE. Wenn ich mein time-out aber nun auf 500ms setze, wartet dann die Funktion 500ms und gibt dann das Signal false- an den case weiter - oder aber gibt die Funktion andauernd das Signal an case und der case wird während der 500ms dann z.B. 1000mal durchlaufen? Weil es könnte ja passieren, dass dann während der 500ms Wartezeit dann plötzlich ein Element vorhanden ist und dann müsste es ja innerhalb der 500ms von true auf false umspringen.
01.02.2013, 10:31 (Dieser Beitrag wurde zuletzt bearbeitet: 01.02.2013 10:34 von GerdW.)
ein TimeOut gibt immer die maximale Wartezeit einer Funktion an. Wenn das gewünschte Ergebnis schon vorher bereitsteht, wird nicht länger gewartet...
Warum probierst du solche Sachen nicht einfach mal mit einem kleinen Beispiel aus?
Stelle einen TimeOut von 20s ein. Schicke nach 5s eine Element in die Queue. Wann bekommst du dein Element beim Dequeue geliefert? Manchmal kann das Leben so einfach sein - wenn man die mit LabVIEW mitgelieferten Beispiele durchspielt...
herzlichen Dank für Deine Geduld, mir meine Fragen zu beantworten. Ich würde Dir jetzt gerne eine Tafel Schokolade schenken, um meine Dankbarkeit auszudrücken und um Deine Stimmung wieder etwas zu heben, weil ich nicht alles sofort kapiert hab.
Ich hatte eben in meinem Beitrag (9.52 Uhr) auch noch ein Bild mit angefügt. Wenn ich Daten von einem Gerät in eine Queue schreibe und sie dann in einer anderen Schleife aus der Queue auslesen will, um sie auf der Festplatte zu speichern, ist dann diese Lösung eine geschickte Lösung oder auch noch verbesserungswürdig? Ich habe dort versucht das mal so umzusetzen, wie Lucki es mir vorschlug.
01.02.2013, 10:45 (Dieser Beitrag wurde zuletzt bearbeitet: 01.02.2013 10:45 von GerdW.)
dunkle Schokolade, 70-80%, bitte. Adresse kann ich dir per PN zukommen lassen
Je nachdem, wie du die Queue wieder löschst (mit QueueFreigeben), würde ich noch den Fehlerstatus vom Dequeue auswerten und als Abbruchkriterium der Schleife verwenden. Ansonsten ist das aber der empfohlene Weg...
Ich hab das jetzt mal versucht so umzusetzen. Ich habe als Abbruchkriterium für die Schleife zum Schreiben den Schleifenknopf mit dem Fehlercluster verbunden (analog auch dem Beispiel Queue-Grundlagen.VI aus Labview. Ich habe vorher mit der Bubblefunktion getestet bzw. mit der einfachen Errormessagefunktion - wenn ich die Queue freigebe, dann kommt ein Fehler in der while-Funktion Daten speichern und die Schleife wird beendet.
Um sicherzustellen, dass die Queue erst freigegeben wird, wenn keine Elementen mehr vorhanden sind, habe ich eine dritte Schleife nach der Schleife "Daten lesen/erzeugen" für die Queue erstellt. Dort wird ermittelt, ob alle Elemente ausgelesen wurden (sorry, in dem Bild fehlt das Warten in der while-Schleife). Ist die Queue leer, dann wird die Queue freigegeben, in der while-Schleife "Daten speichern" kommt dann der Fehler, dass die Queue nicht mehr da ist, da sie freigegeben wurde, und die Schleife wird auch beendet.
Würdet Ihr sagen, dass dies so eine saubere Lösung ist oder sollte ich an diesem Ansatz auch mit dem Beenden etwas verbessern? Für Vorschläge bin ich immer dankbar.
Ich präferiere einen anderen, hier im Forum schon oft genannten Ansatz: Man schickt nicht nur Daten, sondern einen Cluster aus Befehl + Daten. Die Consumer-Schleife wertet den Befehl mitsamt Daten aus - und diese Schleife löscht die Queue! Mögliche Befehle in deinem Fall wären: "Daten schreiben" und "Quit"...