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 man wohl an meiner Frage auch merken wird...bin ganz neu in LabVIEW und kenne mich nicht wirklich gut aus.
Bin gerade in der Einarbeitungsphase und bin auf ein Problem gestoßen, wozu ich noch keine Lösung gefunden habe.
Es geht um folgendes:
Ich möchte ein Oszilloskop ansteuern. Die Komminikation erfolgt über Ethernet (Strings).
Das funktioniert einwandfrei. Ich habe nur ein Problem mit dem Auslesen von Daten.
Dazu muss ich einem String an das Oszi schicken, und bekomme dann einen Antwort-String, den ich lesen muss.
Prinzip ok, das Problem liegt darin, dass mein Programm wohl zu schnell abläuft, und der aktuelle String noch gar nicht an der Schnittstelle liegt
um ihn lesen zu können. Dadurch bekomme ich bei jedem Programmdurchlauf den Wert der letzten Messung angeziegt.
Ich möchte nun einfach zwischen dem Senden des String "schick mir den Wert der Zeitbasis" und dem Auslesen der Schnittstelle eine kleie Pause von 500ms oder 1s einbauen.
eine Zeitverzögerung erreichst Du indem Du im Blockdiagramm das VI "warten [wait]" einfügst.
Probier das mal, wobei ich denke daß Du noch eine Sequenz benötigst, damit der Programmablauf an der richtigen Stelle angehalten wird.
Wenn Du allerdings immer alte Werte bekommst, kann das auch an anderen Dingen liegen.
Grüße
Andreas
Geht nicht, gibts nicht!
14.12.2006, 10:45 (Dieser Beitrag wurde zuletzt bearbeitet: 19.01.2007 19:30 von Dennis.Moser.)
Deine Pause wird ausgeführt, sobald dein Wait abgearbeitet wird. In deinem Fall sitzt dein Wait einfach im BD. D.h. es wird irgendwann - am Anfang - ausgeführt.
Um es genau an der Stelle zu plazieren, die du möchtest nimmst du am besten eine Flat Sequenz Struktur.
Du plazierst dann die Elemente vor dem Wait in einen Step, dann das Wait, dann die restlichen Elemente.
Was in deinem Fall auch geht, ist mit dem Errorcluster arbeiten. Erstelle einfach eine Case Struktur an der Stelle, wo du das Wait haben möchtest. Dann verbinde den Errorcluster mit der Casebedingung. In den False Fall gibst du das Wait.
edit: Wichtig hierbei ist, dass du zumindest ein Element aus der Kette (Error oder Ref z.B.) durch die Case Struktur durchverbindest, damit diese auch wirklich in "Serie" mit der Kette ausgeführt wird. Habe dir einen Bsp Screenshot angehängt.
Dadurch wird dein Wait auch nur ausgeführt, wenn kein Fehler aufgetreten ist.
Gruß
A few weeks of developement and testing can save a WHOLE afternoon in the library!
14.12.2006, 11:19 (Dieser Beitrag wurde zuletzt bearbeitet: 14.12.2006 11:34 von Atha.)
Aber wie du schon sagtest, liegt es vielleicht gar nicht daran, da ich immer noch den Wert der vorherigen Messung ausgelesen bekomme
In der Einzelschritt-Ausführung des Programms bekomm ich aber die richtigen Werte, wenn ich zwischen schreiben uns auslesen eine Weile warte, daher
habe ich gedacht, dass es daran liegen könnte...
Also ich habe leider keinerlei Ahnung von deiner Kommunikation über Ethernet und Strings, aber aus Erfahrungen aus anderen Kommunikationsmethoden:
- Für gewöhnlich kann man bei Read ein Timeout einstellen. Das würde dir das Wait sparen und er liest auch wirklich nur, wenn er Daten bekommt.
- Wenn ich dein Bmp richtig interpretiere rufst du einen String ab? D.h.: Wenn mehrere Im Buffer liegen verarbeitest du nur den ältesten? Wenn also beim erstmaligen abrufen schon ein String im Buffer ist, dann bist du sozusagen immer einen Schritt hinten mit den ausgelesenen Daten.
Hier würde helfen den Buffer am Anfang zu entleeren.
Gruß
A few weeks of developement and testing can save a WHOLE afternoon in the library!
Es lag nun tatsächlich an der Zeit, aber nicht zwischen Sendebefehl fürs Auslesen und das Auslesen an sich, sondern zwischen Senden der Einstellungen und denden des befehls zum Auslesen, da dieser zu früh angekommen ist und das Oszoi die neuen EInstellungen noch nicht übernommen hatte!