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!
ich hätte heute auch mal wieder eine Frage. Wie bindet ihr eine Queue in eine State Machine ein? Ich habe in der State natürlich auch Zustände in denen die Queue nicht ausgelesen wird und es kommt zum "Stau" der Daten. Wie kann ich das elegant lösen? In jeder STate auslesen nur damit sich nichts staut finde ich persönlich unschön.
Ein weiteter Punkt wäre die Kombi von Double und Boolen innerhalb der Queue. Funktionieren tut das, die Daten kommen im Foramt Variant an und ich könnte sie so wieder aufdröseln.
Auch hier die Frage ist das so sinnvoll?
Gibt es irgendeine "Standardlösung" für solche Fälle? Ich denke sowas kommst sicher häufig vor.
Wer sagt denn, dass du in der Statemachine in einem Zustand immer nur ein Queue-Element auslesen musst? Einfach im Auslesefall alle Elemente der Queue auslesen!
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!
ok verstehe ich, aber was mache ich, wenn ich in einem Standby-Zustand bin? Also längere Zeit keine Daten auslese. Sobald die Queue voll ist bleibt mir die Producer-Schleife stehen.
Nur Daten in die Queue schreiben wenn ich auch auslese? Könnte an ja über eine Case machen. Finde das aber irgendwie holprig.
Gruß, Ralf
100nF passen immer.
10.02.2011, 09:31 (Dieser Beitrag wurde zuletzt bearbeitet: 10.02.2011 10:19 von Lucki.)
(10.02.2011 08:58 )RMR schrieb: aber was mache ich, wenn ich in einem Standby-Zustand bin? Also längere Zeit keine Daten auslese. Sobald die Queue voll ist bleibt mir die Producer-Schleife stehen.
Also falls Du die im Standby produzierten Daten nicht alle brauchst:
Es gibt seit LV2009 zwei verschiedene Funktionen zum Schreiben in die Queue: verlustfrei und verlustbehaftet. Bei Letzterer fliegt das älteste Element einfach raus aus der Queue, wenn sie voll ist. Das Einschreiben wird aber nicht blockiert.
Im anderen Fall, wenn Du alle Daten brauchst, mußt Du eben eine Fehlerbehandlung bei Timeout machen und eine Routine zu Speicherung und Leerung der Queue oder zu was weiß ich einrichten - wenn Du schon den Datenfluß nicht stoppen willst.
Oder anders gesagt: Was im Falle des Überlaufs geschehen soll, kannst nur Du wissen und das müßtest Du hier klar sagen. Wir können nur dabei helfen, wie es gemacht wird.
hat mir schon sehr viel geholfen. Das "verlustbehaftet" war mir neu und hilft mir wunderbar aus der Klemme.
Ups, Bedankpunkte gibt es ja gar nicht mehr..trotzdem: Vielen Dank.
Ich bin nochmal da. Hat jemand eine Idee wie ich diese VARIANT Daten wieder aufgeschlüsselt bekomme? Mit dem VI "Variant nach Daten" funktioniert es leider nicht.
Danke & Gruß, RMR
100nF passen immer.
Anzeige
10.02.2011, 16:14 (Dieser Beitrag wurde zuletzt bearbeitet: 10.02.2011 16:15 von macmarvin.)
Mit Variant to Data funktioniert das schon, nur hast du das (hausgemachte) "Problem", daß du erst noch rausfinden musst ob das aktuelle Element nun ein DBL[] oder in Bool[] ist. Das würde z.B. mit den VariantType Funktionen in der vi.lib gehen. Für den konkreten Fall scheint mir eine stärker getypte Queue (also ohne Variant) sinnvoller. Mach dir z.B. ein typdefed Cluster mit den Paar Dbls und den Bools (jeweils mit Namen) und baue im Producer den Cluster zusammen, verschicke den und der Consumer erhält dann direkt den Cluster ohne große Datenumwandlung.
Hat auch den Vorteil, das du Datentypfehler schon zur Entwicklungszeit erkennst und nicht erst zur Laufzeit.
Hätte dazu mal ne Anschlussfrage: Da ich in meinem Programm 2VIs miteinander kommunizieren lassen muss und globale Variablen vermeiden wollte habe ich die Kommunikation über eine Queue gelöst.
Gibt es dabei eine elegantere Methode Wertänderungen an der Queue als Event abzugreifen als einfach bei einem Signal aus der Queue (in einer parrallelen Schleife) signalisierend in eine Variable zu schreiben?
Sprich kann man direkt mittels der Queue ein Event auslösen (eleganter eben als über signalisierendes Schreiben in eine Variable).
Gruß Kiesch
Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)