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!
26.11.2008, 12:10 (Dieser Beitrag wurde zuletzt bearbeitet: 06.08.2012 13:42 von jg.)
ich hab eine Frage zu der case-struktur.
Ich führe in der case-Struktur eine Zeitmessung durch und verarbeite die aufegenommenen Zeiten dann später weiter.
Es ist so, dass diese case-struktur in einer while-Schleife immer wieder aufgerufen wird und dann bei FALSE eine Zeit misst. Im Fall TRUE soll gar nichts passieren.
Das Problem ist nun, dass ich die nur Daten(orange Linie) aus dem FALSE-case danach in einer Tabelle weiterverarbeiten will. Man muss ja aber auch Daten für den anderen case definieren(z.B. "Standard verwenden, wenn nicht verbunden"), somit habe ich auch Daten die ich nicht brauche.
Kann ich es irgendwie verhindern, dass im TRUE-case DAten ausgegeben werden?
26.11.2008, 13:02 (Dieser Beitrag wurde zuletzt bearbeitet: 26.11.2008 13:03 von toaran_.)
das geht ganz einfach.. einfach ein schieberegister an der While schleife erstellen und die daten im true case da hinein speichern..im false case dann einfach durch leiten ...
ich hab eine Frage zu der case-struktur.
Ich führe in der case-Struktur eine Zeitmessung durch und verarbeite die aufegenommenen Zeiten dann später weiter.
Es ist so, dass diese case-struktur in einer while-Schleife immer wieder aufgerufen wird und dann bei FALSE eine Zeit misst. Im Fall TRUE soll gar nichts passieren.
Das Problem ist nun, dass ich die nur Daten(orange Linie) aus dem FALSE-case danach in einer Tabelle weiterverarbeiten will. Man muss ja aber auch Daten für den anderen case definieren(z.B. "Standard verwenden, wenn nicht verbunden"), somit habe ich auch Daten die ich nicht brauche.
Kann ich es irgendwie verhindern, dass im TRUE-case DAten ausgegeben werden?
Eine weiter Möglichkeit wäre eine Event Struktur. bei der du halt sagst das er bei FALSE messen soll, ansonsten soll er halt nix machen....
26.11.2008, 13:28 (Dieser Beitrag wurde zuletzt bearbeitet: 26.11.2008 13:28 von Lucki.)
' schrieb:das geht ganz einfach.. einfach ein schieberegister an der While schleife erstellen und die daten im true case da hinein speichern..im false case dann einfach durch leiten ...
... und altenativ kann man die Anzeige auch im Case selbst aufdatieren, so daß man keinen Anschluß nach außen hin braucht. Wenn man die Daten dann irgendwo anders braucht, liest man die Daten mit einer lokalen Variablen.
Es sollte möglichst so konfiguriert werden, daß die Lokale Variable sich nicht voll in der womöglich zeitkritischen Hauptschleife befindet. Also z.B anderes herum machen als ich im Beispiel: Für das gelegentliche aufdatieren im Case die Lokale Variable verwenden, Auslesen in der Haupschleife mit dem Element selbst.
ich habe auch ein Zeitmessungsproblem in einer Case-Struktur und hoffe es kann mir jemand behilflich sein.
Ich benutze das LabView-Beispiel 'Advanced Peak-Detector' und möchte nun auch zu jedem Peak der gefunden wird, den genauen Zeitpunkt, zu dem er gefunden wird ermitteln. Wenn ein Peak ermittelt wird, so springt das Programm in eine Case-Struktur in den Fall 3 (siehe angehängtes VI). Deshalb habe ich in diesen Case ein Get Time Vi eingebunden. Das Ganze Soll dann ausgegeben werden. Später möchte ich daraus noch ein Array machen, sodass ich die Zeiten zusammen mit den Amplituden in eine Datei speichern kann.
Mein Problem sind jetzt jedoch die anderen Cases, was mach ich in die denn rein, damit das Programm funktioniert? Wenn ich auf den Tunnel gehe und Use Default if Unwired aktiviere, passiert gar nichts und wenn ich einfach eine Variable=0 damit verbinde, bekomme ich eine Minizahl raus, die immer gleich bleibt. Ich vermute mal, dass das die Zeit ist, die die Case Sruktur zum verarbeiten der Daten braucht.
Ich hoffe ich konnte mich halbwegs verständlich machen. Ich bin noch blutiger Anfänger bei LV und besitze noch nicht den nötigen Fach-Jargon.
Grüße und schonmal vielen Dank,
Linsche
Anzeige
31.07.2012, 09:41 (Dieser Beitrag wurde zuletzt bearbeitet: 31.07.2012 09:42 von GerdW.)
deine Peak-Erkennung basiert auf Werte-Arrays. Ich nehme an, diese Arrays kommen aus einen DAQmxRead (oder gleichwertigen Funktionen) und enthalten Signaldaten, die gleichmäßig mit einer Samplerate abgetastet wurden. Du berechnest den Zeitpunkt eines Peaks deshalb aus dem Sampleindex und deinem dir aus der Samplerate bekannten dt.
Der Zeitpunkt, zu dem die Case-Struktur ausgeführt wird, hat dagegen selten etwas mit dem zeitlichen Auftreten eines Peaks zu tun...
danke für die schnelle Antwort.
Ich möchte meine Daten letztendlich wirklich mit einer Datenaquisitions-Karte aufnehmen, da diese aber leider noch auf sich warten lässt habe ich derzeit einen Signalgenerator eingebaut.
Der Case Nr. 3, den ich meine, wird nur dann aufgerufen, wenn ein Peak detektiert wurde.
Allerdings habe ich heute nochmal den ganzen Tag rumprobiert und nehme nun den # found ausgang aus dem Peak Detektor VI, der high wird, wenn ein Peak gefunden wurde. Alles in allem funktioniert die Zeitdetektion jetzt auch ABER: leider nur, wenn ich das Programm mit dem kleinen Lämpchen an langsam durchlaufen lasse. Dann bekomme ich meine Zeitwerte in mein Array geschrieben. Wenn ich das Programm dann normal laufen lasse, bekomme ich nur Nullen.
Kann die Zeit so schnell, wie der Peak kurz da ist, nicht ermittelt werden? Oder was mache ich falsch?
Zitat:Wenn ich das Programm dann normal laufen lasse, bekomme ich nur Nullen. Kann die Zeit so schnell, wie der Peak kurz da ist, nicht ermittelt werden? Oder was mache ich falsch?
Nochmal: du willst nicht den Zeitpunkt wissen, wann du den Peak detektierst, sondern den Zeitpunkt, wann er aufgetreten ist. Dies ist ein himmelweiter Unterschied!
Nochmal: Dein DAQmxRead liefert Samples mit (meist) festem dt. Der PeakDetector liefert dir nicht nur die Anzahl der Peaks, sondern auch deren Positionen. Nutze die Positionen, um über den Sample-Index und dt den Zeitpunkt des Samples zu berechnen!
Man kann dein VI aufgrund eines fehlenden subVI nicht testen. Außerdem sieht man so leider nicht, was du mit dem einen Sample vom SimulateSignal machst und wie du damit ein Array erstellst...
sorry erstmal für die späte Antwort, aber früher ging es diesmal einfach nicht.
Danke für die schnellen Antworten und ich hatte auch schon überlegt, ob man nicht die Zeit durch die Positionen berechnen könnte....hatte aber leider keine Vorstellung wie.
Leider stehe ich bei einer Sache doch noch mega auf dem Schlauch...was bedeutet denn dt?
Und hier nun noch einmal das komplette Programm mit alles SubVIs.