' schrieb:Edit:
Habe die Highlight-Funktion mal eingeschaltet und festgestellt, das der Event-Case Trigger auch ohne Werteänderung durchlaufen wird. Dh meine Zeit wird ständig geresetet was wohl dieses Zappeln verursacht. Aber warum ist das so????
Weil das Setzen einer Variablen per PropertyNode "Value(Signaling)" auf jeden Fall ein Event auslöst, auch wenn du hierdurch den Wert gar nicht änderst.
Gruß, Jens
Ah ok. Und wie muss ich es dann machen dass es funktioniert?
Könnte mir vllt mal jemand bitte das angehängte Vi in 8.2 konvertieren
Danke!
Hallo zusammen. Mein Programm ist immer noch nicht voll funktionsfähig. Für die die jetzt erst einschalten, ich lese Messwerte mit einer DAQ-Karte aus und verarbeite danach jeden Wert einzeln. Das im Groben. Nun zu meinem Problem. Im Anhang befindet sich ein Ausschnitt aus meiner Statemachine. Ich möchte erreichen, dass ich ein Signal generiere, welches beim ersten Triggerevent gesetzt wird und erst an einem bestimmten Punkt im Programm zurückgesetzt wird. Eig dachte ich das es mit der im Bild dargestellen Methode funktioniert. Feuert der Trigger ist mein Case true jedesmal ein Trigger erkannt wird. Ach und der FALSE-Zweig ist leer.
Oder habe ich ein anderes Problem? Müsste es so eig funktionieren?
Nun, ich habe es geschafft unter Laborbedingungen ein lauffähiges Programm auf die Beine zu stellen. Testet man das Programm unter realen Bedingungen, dh unteranderem mit einer Abtastrate von 20kS/s kommt der im Anhang dargestellte Signalverlauf zu Stande. An den Stellen, die mit den senkrechten blauen Strichen markiert sind scheinen Daten zu fehlen. Der Signalverlauf dürfte sich an diesen Stellen bzw im gesamten Verlauf nicht sprunghaft ändern.
Aber wie kann das passieren, dass ich eine Zeit lang kontinuierlich meine Daten aufnehmen und zwischenzeitlich wohl Daten "verloren" gehen????
Inzwischen hab ich das ganze auch mal mit einer Consumer/Producer-Strukur und einer Queue implementiert. Allerdings nicht mit dem gewünschten Erfolg.
Ach noch eine Frage. Wie läuft eig genau der Datenaustausch zwischen DAQ-Karte und meinem Programm ab. Die Karte(9205) sitzt in einem 9107-Chassis und ist per USB mit dem PC verbunden. Die Datenerfassung ist auf kontinuierlich eingestellt und ich lesse pro loop immer einen Sample. Doch woher lese ich den Sample? Aus dem RAM oder aus dem Puffer meines Chassis? Werden die Daten im RAM überschrieben?
Mir ist übers woe noch eine Idee gekommen. Könnte es möglich sein, das ich Probleme mit dem USB-Protokoll habe. Derzeit triggere ich mein USB ja mit 20khz + looptime da ich ja immer nur einen Sample lese. Könnte es sein das mir durch diese schnelle USB-Triggerung Daten verloren gehen weil das Protokoll nicht hinter her kommt oder ähnliches? Sinnvoller wäre es wohl größere Datenpakete zu lesen?!
Also habe inzwischen die Sache mit den Sprungstellen gelöst. Lese nun mehrer Samples gleichzeitig ein.
Nun aber noch ein anderes Problem. Der Benutzer hat zu Beginn die Möglichkeit einige Eingaben zu tätigen ( Abtastrate, Anzahl Samples etc..). Ich möchte die ganze Sache nun so steuern können das der Benutzer seine Eingaben tätigt und dann auf einen Start-Knopf drückt um das Programm ablaufen zu lassen. Danach sollen keine Eingaben mehr möglich sein. Habe das ganze mal mit einem Event-Case und dem Eigenschaftsknoten "Deaktiviert" umgesetzt. Zunächst nur mal für die Anzahl der Samples. Stoppe ich das Programm allerdings und starte es erneut, wird mein Eingabefeld nicht wieder aktiviert obwohl ich im Timeout-Case den Eigenschaftsknoten auf 0 gesetzt habe.
Woran liegt das? Ist die Art der Umsetzung für die og Problemstellung überhaupt die richtige/beste?
Deine Event-Struktur muss auf jeden Fall in eine Whileschleife und dort am besten in einen "Idle"-Case. Wenn irgendwas abgearbeitet wurde, dann springst Du wieder in den Idle-Case.
Gruß Markus
Ah ok. Naja nach meinen ersten kläglichen versuchen mit mehren Schleifen und Cases ineinander dachte ich das sei vllt der falsche Ansatz. Aber wenn es hier erforderlich ist ok.
Zitat:Ist die Art der Umsetzung für die og Problemstellung überhaupt die richtige/beste?
Gibt es denn Verbesserungsvorschläge oder ist das die einzige Möglichkeit die Sache umzusetzen. Wie macht ihr das sonst?
Das kommt ja auf den Anwendungsfall an. Aber eine State-Machine kannst Du relativ oft verwenden.
Das kann man dann ja auch noch parallelisieren (Producer-Consumer-Loop mit Eventstruktur,....).
Gruß Markus
' schrieb:Ah ok. Naja nach meinen ersten kläglichen versuchen mit mehren Schleifen und Cases ineinander dachte ich das sei vllt der falsche Ansatz. Aber wenn es hier erforderlich ist ok.
Gibt es denn Verbesserungsvorschläge oder ist das die einzige Möglichkeit die Sache umzusetzen. Wie macht ihr das sonst?