If Schleife und queues - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: Datenkommunikation (/Forum-Datenkommunikation) +---- Thema: If Schleife und queues (/Thread-If-Schleife-und-queues) |
If Schleife und queues - Danjo - 24.05.2013 16:05 Hallo zusammen, ich arbeite gerade daran eine Trägheitsplattform in unser LV-Messsystem zu integrieren. Der Hersteller hat hier schon VIs zur Kommunikation und zum Datenmanagement mitgeliefert. Allerdings wird in dem mitgelieferten Minimalbeispiel bei jedem Schleifendurchgang zunächst überprüft ob neue Messdaten vorliegen. Nur wenn neue Daten vorhanden sind werden diese auch übermittelt. Das Minimalbeispiel soll nun überarbeitet werden und in unser großes "MAIN-VI" integriert werden. Dort werden Daten von mehreren A/D-Wandler in einzelnen while-Schleifen erfasst und über queues in eine "Speicherschleife" transportiert, um tdms-files schreiben zu können. Probleme bereitet mir hier insbesondere die if-Abfrage. Ich habe das Minimalbeispiel des Herstellers mal etwas erweitert und versucht die Daten in einer extraschleife zu speichern, allerdings bleiben die queues leer. Vielleicht sollte ich noch erwähnen, dass wenn keine neuen Daten gefunden wurden (Kommt öfter vor) ich die queue einfach durch die Schleifen durchlaufen lasse. Hat jemand eine Idee wie ich das Problem beheben kann? Die samplingfrequenz des Trägheitssystems beträgt 100Hz und ich habe schon versucht über zeitgesteuerte Schleifen die if-Abfrage zu umgehen, doch leider verträgt sich dass nicht mit den Hersteller VIs. Ich hab mal ein Bild des Minimalbeispiels angehängt. Ich hoffe dass mein Problem somit etwas deutlicher wird. Bin für jede Hilfe/Anregung etc dankbar... Viele Grüße Danjo RE: If Schleife und queues - jg - 24.05.2013 17:37 THINK Dataflow. Deine TDMS Speicher-Schleife wird erst NACH Beendigung deiner Sequenz durchgeführt. Willst du das wirklich? Gruß, Jens P.S. & offtopic: Hilfe, ein BD, das 6000x2300 Pixel groß ist. RE: If Schleife und queues - GerdW - 25.05.2013 11:10 Hallo Danjo, Zitat:offtopic: Hilfe, ein BD, das 6000x2300 Pixel groß ist.1. Das BD ist tatsächlich zu groß. 2. Warum hast du das Bild des BD noch einmal hochskaliert? 3. Sehr schön auch, wie du die Daten vom großen Cluster in die vielen kleinen umsortierst... 4. Sehr schön auch die "STOP"-Schleife unten rechts: IF STOP=FALSE THEN Boolesch=FALSE unter Zuhilfenahme einer Case-Struktur und einer Konstante. Warum nicht einfach Boolesch=STOP? Warum überhaupt "Boolesch"? RE: If Schleife und queues - Danjo - 27.05.2013 14:55 Hallo auch, vielen Dank erst mal für eure schnellen Antworten. Das mit der Bildgröße tut mir Leid. Ich gehe da so vor, dass ich das Blockschaltbild in LabVIEW als pdf ausdrucke und dann über Schnappschuss in Paint einfüge. Habe da extra näher rangezoomt damit man noch alles gut erkennen kann. War dann vielleicht etwas zu nah ;-). Wenn ihr eine Bessere Möglichkeit kennt Bilder zu machen kennt, dann immer her damit. Wenn ich direkt Screenshoots mache hab ich 4-5 Einzelbilder und die pdf- darf ich ja auch nicht ins Forum stellen oder? Ich hab jetzt die tdms Schleife in die Sequenz neben die "Daten-while-Schleife" gelegt, aber leider immer noch keinen kontinuierlichen Datenfluss. Eine Sonde am Ausgang des "Element aus Queue entfernen "-Blocks zeigt mir "nicht ausgeführt" an. Wäre das so die korrekte Struktur? Die Daten sollen im späteren Gesamt-VI auf jeden Fall aus der "Daten-while-Schleife" herausgeführt werden... Die if-Abfrage innerhalb der "Daten-while-Schleife" fragt ja bei jedem Schleifendurchgang ob neue Daten zur Verfügung stehen. Nur wenn ja wird der sichtbare Teil im Bild durchlaufen. Wenn nein habe ich nun versucht ein Array mit Nullen in die queue zu schreiben, leider auch ohne Erfolg. Das umsortieren im Cluster hatte ich schon mal vorbereitet, weil später einige Daten noch überarbeitet werden sollen. Hab den Teil jetzt aber auch rausgenommen damit es übersichtlicher wird. Die "Stop"-Schleife war ne Notlösung. Da wollte ich mit nur einem Stop-Knopf alle Schleifen beenden. Das soll später auch so funktionieren, allerdings macht es in großen VI ja keinen Sinn den Ausgang des Knopfes durch das VI in 12 verschiedene Schleifen zu ziehen, weshalb ich lokale Variablen benutzen wollte. Wenn ich den Ausgang direkt in eine lokale Variable schreibe bekomme ich allerdings immer eine Fehlermeldung, da es anscheinend zu einem dritten Zustand kommen kann. Weiß aber nicht mehr genau wie die Fehlermeldung hieß, hatte mich schnell dazu entschlossen das ganze so umzubauen, da es mir von Kollegen empfohlen wurde. Wenn es hierzu eine bessere Lösung gibt dann bin ich da natürlich auch für alles offen. Ich hoffe ihr könnt mir noch mal weiterhelfen. Hab das überarbeitete VI als png angehängt. Diesmal etwas kleiner (Hoffe das ist so ok). Viele Grüße Danjo RE: If Schleife und queues - jg - 27.05.2013 15:14 Ich wiederhole mich ungern, aber: (24.05.2013 17:37 )jg schrieb: THINK Dataflow. Zwecks Screenshots: Hängt ein wenig von deinem Betriebssystem ab: Windows 7 hat ein Snapshot-Programm an Bord, es gibt aber auch genügend Freeware. Oder du erstellst ein Snippet direkt aus LabVIEW 2009 heraus. Gruß, Jens |