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!
14.04.2010, 14:42 (Dieser Beitrag wurde zuletzt bearbeitet: 14.04.2010 14:42 von bluesaturn.)
meine Pumpe soll sich erst nach links und dann nach rechts bewegen und dann das ganze wieder von vorn.
Dieser Vorgang nennst sich "Infuse/Withdraw" oder "Autofill".
Die Pumpe bietet eine eingebaute Methode fuer einen Zyklus an, jedoch ist dieser nicht per Befehl mit LabVIEW zugaenglich. Wenn dieser Vorgang an der Pumpe direkt ausgewaehlt wird, ist zwischen der Bewegung nach links und der Bewegung nach rechts keine Pause. Diese gehen ineinander ueber
Ich habe jetzt auch versucht, so etwas zu basteln. Habe aber einen Moment Pause zwischen den Richtungsaenderungen. Liegt das an meiner Art der Programmierung oder weil ich LabVIEW benutze und die Befehle erst an die Pumpe uebertragen werden muessen? Das halte ich aber eigentlich fuer unrealistisch.
Zudem bilde ich mir ein, dass ein ganzer Zyklus in einer Schleife (Autofill_v3.vi) eine kleinere Pause bei Richtungswechsel macht als ein halber Zyklus in der Schleife (Autofill_v2.vi)
Koenntet ihr Euch das bitte vielleicht anschauen und mir einen Rat geben, wie ich bitte die Schnelligkeit der Richtungsaenderung optimieren koennte?
Ich lade die beiden Vis hoch und die Instrumentlibrary von Harvard hoch. All
' schrieb:Wenn dieser Vorgang an der Pumpe direkt ausgewaehlt wird, ist zwischen der Bewegung nach links und der Bewegung nach rechts keine Pause. Diese gehen ineinander ueber
Ist ja klar: Keiner kann die Pumpe so schnell umdrehen wie sie selbst.
Zitat:Habe aber einen Moment Pause zwischen den Richtungsaenderungen.
Ganz klar: Erst musst du ja mal feststellen, ob überhaupt umgekehrt werden soll. Dann musst du sagen "jetzt umkehren". Und diese Vorgänge dauern eine Mindestzeit.
Zitat:Liegt das an meiner Art der Programmierung oder weil ich LabVIEW benutze und die Befehle erst an die Pumpe uebertragen werden muessen? Das halte ich aber eigentlich fuer unrealistisch.
Es kann an der Art der Programmierung liegen. An LabVIEW selbst liegt es keinenfalls. Und daran, dass die Befehle erst gesendet werden müssen, liegt es auf jeden Fall.
Was soll daran unrealistisch sein? Jeder Algorithmus dauert nun mal seine Zeit. Bedenke, dass ist eine VISA-Schnittstelle, zwar mit 115kB, aber immerhin.
Zitat:Zudem bilde ich mir ein, dass ein ganzer Zyklus in einer Schleife (Autofill_v3.vi) eine kleinere Pause bei Richtungswechsel macht als ein halber Zyklus in der Schleife (Autofill_v2.vi)
Das kann theoretisch sein. Praktisch ist der Zeitunterscheid wohl eher marginal.
Zitat:einen Rat geben, wie ich bitte die Schnelligkeit der Richtungsaenderung optimieren koennte?
Ich sehe da keine Optimierunsmöglichkeiten mehr.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
' schrieb:Ist ja klar: Keiner kann die Pumpe so schnell umdrehen wie sie selbst.
Ganz klar: Erst musst du ja mal feststellen, ob überhaupt umgekehrt werden soll. Dann musst du sagen "jetzt umkehren". Und diese Vorgänge dauern eine Mindestzeit.
Es kann an der Art der Programmierung liegen. An LabVIEW selbst liegt es keinenfalls. Und daran, dass die Befehle erst gesendet werden müssen, liegt es auf jeden Fall.
Was soll daran unrealistisch sein? Jeder Algorithmus dauert nun mal seine Zeit. Bedenke, dass ist eine VISA-Schnittstelle, zwar mit 115kB, aber immerhin.
Das kann theoretisch sein. Praktisch ist der Zeitunterscheid wohl eher marginal.
Ich sehe da keine Optimierunsmöglichkeiten mehr.
Hallo "IchSelbst".
Danke zunaechst mal, dass du dir das Problem angeschaut hast.
Ich stimme dir zu, dass es Zeit zum Senden braucht. Jetzt kommts aber: Die Firma schreibt mir:
irun – causes the pump to start in the forward direction and continuing running.
wrun – causes the pump to run in the reverse direction and continue running.
An “autofill” type of function can be created in LabVIEW by repeating irun and wrun commands as needed.
To avoid the pump stopping, do not set a target volume or time. Set the target volume to 0.0 ml. This will cause the pump to run without stopping. Send the tvol command before sending any irun or wrun commands.
Like this:
tvol 0 ml
When you use irun and wrun commands with no target set, you use LabVIEW to keep track of the elapsed time, so LabVIEW controls the timing of sending the irun and wrun commands. In this case, you do not need to check the status or volume delivered. So you do not need to use Status Query.vi or Read Volume & time.vi
The whole “Forward and Backward” command set can be like this:
<Call Initialize.vi>
irat 5 mlm
wrat 5 mlm
tvol 0 ml
irun
<LabVIEW wait 5 seconds>
wrun
<LabVIEW wait 5 seconds>
irun
<LabVIEW wait 5 seconds>
wrun
<LabVIEW wait 5 seconds>
irun
<LabVIEW wait 5 seconds>
wrun
<LabVIEW wait 5 seconds>
stop
<Call Clear Data.vi>
<Call Close.vi>
Ich habe irun und wrun via hyperterminal ausprobiert. Dort scheint mir, es ist nur dadurch limitiert, wie schnell ich eintippe, ansonsten erscheint es mir fixer als meine LabVIEW-Version. Entsprechend dem Menschen von dir Firma scheint ja die Angabe eines Targetvolumens die Richtungsumkehrung zu verzoegern. Vielleicht ist dies auf eine erhoehte Anzahl von Befehlen zurueckzufuehren im Vergleich zu wrun and irun. Ich werde jetzt diesen Vorschlag in LabVIEW anschauen.
Hast du dir vielleicht die Harvard.zip anschauen koennen? Das sind die Treiber von der Firma. Sind die eigentlich in einer vernuenftigen Art und Weise in bezug auf LabVIEW geschrieben? Mich wuerde interessieren, was LabVIEWs-Profis davon halten.
' schrieb:The whole “Forward and Backward” command set can be like this:
Das ist aber schon ein großer Unterschied zu dem, was du programmiert hast. Wenn die das so sagen, dann wird das wohl so zu möglich sein.
Zitat:Ich habe irun und wrun via hyperterminal ausprobiert. Dort scheint mir, es ist nur dadurch limitiert, wie schnell ich eintippe, ansonsten erscheint es mir fixer als meine LabVIEW-Version.
Naja, die Pausen, wie beim Eintippen entstehen, entsprechen wahrscheinlich in dem vom Hersteller beschriebenen Ablauf den Zeilen "<LabVIEW wait 5 seconds>".
Zitat:Ich werde jetzt diesen Vorschlag in LabVIEW anschauen.
Auf jeden Fall.
Zitat:Hast du dir vielleicht die Harvard.zip anschauen koennen? Das sind die Treiber von der Firma. Sind die eigentlich in einer vernuenftigen Art und Weise in bezug auf LabVIEW geschrieben?
Kann man so lassen.
Die einzelnen SubVIs kapseln halt lediglich die spezifischen Befehle, die lediglich an die VISA-VIs gegeben werden. Hier und da könnten die Wire vorwärts statt rückwärts gehen, wie sich das gehört.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
' schrieb:Das ist aber schon ein großer Unterschied zu dem, was du programmiert hast. Wenn die das so sagen, dann wird das wohl so zu möglich sein.
:-) Ich mußte mir halt selber helfen. Ich habe die Bewegung über das Targetvolumen angesteuert. Das ist auch eine Möglichkeit. Er verfolgt einen anderen Ansatz in seinem Vorschlag. Statt auf ein bestimmtes Volumen zu warten, schlägt er vor, bei einer gegebenen Flußrate eine bestimmte Zeit zu warten. In dieser Zeit wird halt ein bestimmtes Volumen fortbewegt. Statt einer Variabel muß man der Pumpe nun zwei Parameter geben.
' schrieb:Naja, die Pausen, wie beim Eintippen entstehen, entsprechen wahrscheinlich in dem vom Hersteller beschriebenen Ablauf den Zeilen "<LabVIEW wait 5 seconds>".
Nein, die Pausen sind dafür nicht da. Die sind versuchsbedingt gegeben. In seiner nächsten E-Mail rät er mir folgendes:
me>Furthermore, you write I should keep track of the elapsed time with LabVIEW. Should this be done with internal LabVIEW commands or with one of the pump chain commands (itime, wtime), please?
him>Use internal LabVIEW commands.
me>There are some restrictions to the time in-between the irun and wrun commands.
him>You should allow at least 0.25 second between commands.
me>Would you recommend to set-up the time by calculating the fraction of a given volume dived by the flow rate?
him>Yes, this correct.
' schrieb:Kann man so lassen.
Die einzelnen SubVIs kapseln halt lediglich die spezifischen Befehle, die lediglich an die VISA-VIs gegeben werden. Hier und da könnten die Wire vorwärts statt rückwärts gehen, wie sich das gehört.
Ich habe den Vorschlag umgesetzt. Anbei die neue .vi.
Jedoch tue ich mich gerade noch etwas schwer mit der Zeit t, die bestimmt, wie lang die Pumpe in eine Richtung laeuft.
In der vi sieht man einen while loop (eventuell muss ich den noch gegen einen for loop austauschen), in dem sich die beiden Vis Start Pump.vi befinden.
Oben links wird die Zeit berechnet, die bestimt, wie lange diese Richtung ausgefuehrt wird.
Wie baue ich die Zeit nun zwischen die beiden Start Pump.vi ein? Als time sequence or flat sequence? Mir wurde angeraten, die Zeit mit LabVIEW-Befehlen zu kontrollieren.
Der Ablauf soll sein
irun
<LabVIEW wait t seconds>
wrun
<LabVIEW wait tseconds>
irun
<LabVIEW wait t seconds>
wrun
<LabVIEW wait t seconds>
irun
<LabVIEW wait t seconds>
wrun
<LabVIEW wait t seconds>
stop
Ich probiere mich mal in der Zwischenzeit mit den Sequencen. Danke fuer jegliche Vorschlaege.
Gruss
Blue
Ich habe obiges Autofill_v5.vi noch einmal modifiziert. Es klappt mit einem Time Delay im allgemeinen. Aber ich bin mir nicht sicher, wie genau diese Art des Start-Stop-Ablaufes ist. Immerhin werden einige Zeit zur Befehlsuebersendung benutzt, aber das ist nicht relevant, solange dieser Zeitverlust minimal ist.
Gibt es vielleicht noch eine bessere Moeglichkeit (sauberer) Start-Stop-Funktion zu programmieren?
Danke schoen.
Blue
19.04.2010, 17:41 (Dieser Beitrag wurde zuletzt bearbeitet: 19.04.2010 18:48 von jg.)
Die naechste Moeglichkeit waere mit einer Sequenz. Ich habe leider keine Ahnung, was besser ist. Das laeuft auch. Oder sollte man Sequenzen oder Express-Vis besser vermeiden?
Tante Edit: Macht die wait.vi eigentlich bei groesseren Zeiten Probleme? Fuer welchen Zeitbereich ist sie bitte geeignet?
19.04.2010, 17:48 (Dieser Beitrag wurde zuletzt bearbeitet: 19.04.2010 17:51 von IchSelbst.)
' schrieb:Wie baue ich die Zeit nun zwischen die beiden Start Pump.vi ein? Als time sequence or flat sequence?
Weder noch! So wie im 6. Muster.
' schrieb:Ich habe obiges Autofill_v5.vi noch einmal modifiziert.
So ist es - Sequenzierungen werden mit dem Error-Cluster gemacht!
Zitat:Aber ich bin mir nicht sicher, wie genau diese Art des Start-Stop-Ablaufes ist. Immerhin werden einige Zeit zur Befehlsuebersendung benutzt, aber das ist nicht relevant, solange dieser Zeitverlust minimal ist.
Ich halte diese Zeit für nicht relevant.
Zitat:Gibt es vielleicht noch eine bessere Moeglichkeit (sauberer) Start-Stop-Funktion zu programmieren?
So wie in AutoFill_v6 kannst du es machen.
Zitat:Die naechste Moeglichkeit waere mit einer Sequenz.
Würde ich bei dem wenigen Code nicht machen. So ist es übersichtlicher.
Zitat:Oder sollte man Sequenzen oder Express-Vis besser vermeiden?
Sequenzen kann man gegebenenfalls durch Sequenzierung mit dem Error-Cluster ersetzen. Express-VI besonders vom DAQmx sollten vermieden werden. Die Express-VIs für Timer kann man aber verwenden (da steht nic weiter drinn als Wait(ms)).
Nachtrag:
Die Sequenz in v62 ist völlig sinnlos! Raus damit! Der Zweck wird bereits durch den Errorcluster erreicht.
Wenn du was machen willst, dann ersetze die Nuller und Einser in den Auswahl-Cases durch eine Konstante von "Pump Direction (0:Infuse)"
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).