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!
29.05.2008, 12:04 (Dieser Beitrag wurde zuletzt bearbeitet: 29.05.2008 12:05 von chilischote85.)
' schrieb:Würd ich vermutlich gleich in einen eigenen Case packen. Ein Case wo du z.B. sämtliche Initialisierungen durchführst schadet auch nie.
Die Daten würd ich dann statt mit einer lokalen Variable mit einem Schieberegister auslesen.
edit: Du kannst natürlich auch mit deiner Whileschleifen Version kontinuierlich die Waage abfragen. Dazu musst du prinzipiell ja nur dein Waage Vi (das bei mir nur ein Fragezeichen ist) in die Schleife packen. Natürlich weiß ich jetzt nicht, wie dieses SubVi aussieht und ob das überhaupt möglich es so einfach in die Schleife zu packen.
Ja hab das jetzt in einen eigenen Case gepackt, das funktioniert nun so wie ich es will !!! Das Schieberegister werde ich jetzt mal noch ausprobieren.
^_^
Das Waagen VI hab ich so geschrieben, das nur einmal der Wert abgerfragt wird, so kann ich es also einfach mit in meine große while schleife legen...
Was noch nicht so richtig funktioniert is die Funktion verstrichene Zeit im ersten Case, die Zählt schon neu los, obwohl hinten noch garnich der Case mit dem Pumpenstop fertig ist...mannomann, immer was neues!
29.05.2008, 12:33 (Dieser Beitrag wurde zuletzt bearbeitet: 29.05.2008 12:35 von Kvasir.)
Verstehe jetzt nicht genau, welche Zeit du zählen willst, aber dein Problem hängt mit Sicherheit mit dem Expressvi zusammen (die sind immer schuld ).
Probier doch dir deine Zeitmessung selbst zu basteln, ohne dem ExpressVi, wo due nie genau weißt, was es macht und wie es zählt.
Beispielsweise könntest du schematisch so vorgehen:
A few weeks of developement and testing can save a WHOLE afternoon in the library!
' schrieb:Verstehe jetzt nicht genau, welche Zeit du zählen willst, aber dein Problem hängt mit Sicherheit mit dem Expressvi zusammen (die sind immer schuld ).
Probier doch dir deine Zeitmessung selbst zu basteln, ohne dem ExpressVi, wo due nie genau weißt, was es macht und wie es zählt.
Beispielsweise könntest du schematisch so vorgehen:
Ja das express ding macht wirklich nich das was ich will!
Also angedacht ist es so, dass der erste Case die vorgebene Zykluszeit abwarten soll (sprich z.B. 5 h in denen meine Zellen im reaktor wachsen sollen) und dann erst mit der Pumperei und so beginnt. Wenn das dann abgeschlossen ist, soll er wieder anfangen zu warten. Ich würde das halt jetzt mit der Funktion "ms warten" machen und die Zeitmessung so als Anzeige wie lange noch gewartet wird so wie in deinem Bsp....
Ich hoffe es kommt nun rüber was ich meine
Oder gibts da noch bessre Methoden?
29.05.2008, 14:54 (Dieser Beitrag wurde zuletzt bearbeitet: 29.05.2008 14:56 von Kvasir.)
Für so lange Zeiten würde ich dann doch nicht den Millisekundentimerwert nehmen. Ich habe zwar jetzt nicht im Kopf, wie lange man den laufen lassen kann, bevor er am Limit ist, aber ich denke 5 Stunden sind zu lange. Und elegant ist es so oder so nicht
Ich würde in diesem Fall mit Zeitstempel arbeiten. Habe dir eine Quick 'n Dirty Version gebastelt für das grobe Schema. Am besten du baust einfach in einen deiner Cases (oder in einen extra Case) das Setzen der Warte Zeit ein. Im "Warte" - Case liest du dann ständig die Zeit aus und vergleichst sie mit der Endzeit. Ist diese erreicht kannst du in den nächsten Case springen.
Wenn du 5h wartest könntest du auch per Wait Funktion ruhig die Schleifendurchlaufzeit auf mehrere Sekunden hochfahren um Prozessorleistung für andere Programme in den 5h zu schaffen.
edit: Was wichtig ist, aber eigentlich klar sein sollte. Wenn du die Zeiten vergleichst nie ein "=" verwenden, sondern stets ein ">=". Ansonsten kann es sein, dass deine Bedingung nie erfüllt wird, weil das Programm um eine (Mili)Sekunden den genauen Wert verpasst.
A few weeks of developement and testing can save a WHOLE afternoon in the library!
so wie ich es mir dachte funktioniert es natürlich nicht...wenn ich für die zu wartende Zykluszeit die "ms warten" Funktion nehme, kann ich es wieder nicht ordnungsgemäß beenden, es muss also noch irgendwie anders gehen! *HILFE*
30.05.2008, 07:36 (Dieser Beitrag wurde zuletzt bearbeitet: 30.05.2008 07:37 von Lucki.)
' schrieb:Für so lange Zeiten würde ich dann doch nicht den Millisekundentimerwert nehmen. Ich habe zwar jetzt nicht im Kopf, wie lange man den laufen lassen kann, bevor er am Limit ist, aber ich denke 5 Stunden sind zu lange. Und elegant ist es so oder so nicht
Das Zahlenformat für den Timer ist U32. Daraus ergibt sich eine Laufzeit von 2^32 /1000/60/60/24 = 50 Tagen. (Die Ziffer 5 in Deiner Schätzung war also schon mal richtig.)
Wenn das Express-VI nicht gefällt, dann kann man es ohne großen Aufwand durch etwas Selbstgemachtes ersetzen (und der Timer zählt hier immer nur bis 1000):
mit sonnigen Grüßen aus dem labor: Ja mit dem Ms-Timer is echt ne sch... Lösung! Danke für eure Ideen!
@ Kvasir: Deine Idee gefällt mir auch gut, aber irgendwie läuft die Endzeit mit der Startzeit mit und die aktuelle Zeit wird ni ausgegeben :-(
@Lucki: so hab ich es mal eingebaut und funktioniert so wies soll!
Eine Frage hab ich noch die dann das special feature an meinem Programm sein würde: :DWie kann ich programmieren, dass es mir anzeigt wieviele Zyklen mit Warten und Pumpen er schon durchlaufen hat? Mit der reinen Schleifeniterationsanzeige geht es ja wegen der Restzeitabfrage leider nich. Kann man irgendwie die Casedurchgänge zählen?
@Lucki: Hehe ja. Hab da wohl die Millisekunden überschätzt, die so am Tag anfallen. Mir kommt ein Arbeitstag nunmal so lange vor;)Ich würds aber trotzdem nicht mit dem Millisekundentimer machen. Es widerstrebt mir irgendwie Millisekunden zu zählen, wenn nur Stunden gebraucht werden. Wobei ja natürlich der Zeitstempel auch nichts anderes macht. ... Naja jeder braucht seine Macken
@Chili: Nunja ein wenig schauen hätte geholfen. Du musst den Status schon von "setzen" auf "warten" ändern, damit die Startzeit stehen bleibt. Ist ja Sinn der Sache, dass man die Startzeit und die Wartezeit einmal setzt und dann eben auf Warten umschaltet ...
Zu deinem Feature: Zähl doch einfach mit einem Schiebregister, wie oft der Case drann war. Immer, wenn du den Case verlasst (also erfolgreich abgeschlossen hast) erhöhst du den Zähler um 1.
A few weeks of developement and testing can save a WHOLE afternoon in the library!
30.05.2008, 13:55 (Dieser Beitrag wurde zuletzt bearbeitet: 30.05.2008 14:24 von chilischote85.)
' schrieb:@Chili: Nunja ein wenig schauen hätte geholfen. Du musst den Status schon von "setzen" auf "warten" ändern, damit die Startzeit stehen bleibt. Ist ja Sinn der Sache, dass man die Startzeit und die Wartezeit einmal setzt und dann eben auf Warten umschaltet ...
OOOOhhh SORRY!
das hab ich ja voll nich gesehen, na mein Gehirn is wschl. durch die Hitze hier im Lab und Freitags doch schon etwas matschig!!!
Ich hoffe du kannst mir diese Ignoranz vergeben!!!!
Na da hab ich ja jetzt zwei feine Versionen, mal sehn was mein Betreuer dazu sagt
P.S.: Wie mache ich in einen case ein Schieberegister?