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!
' schrieb:das ist ein schönes Beispiel muss ich sagen*lob* das ich es jetzt sogar verstanden hab
Ja ich habe absichtlich nicht die Bezeichnung "state machine" benutzt, abwohl es so bezeichnet wird. Ich wollte Dich nicht kopfscheu machen. Die Bezeichnung hier in diesem einfachstmöglichen Beispiel etwas hochtrabend.
Mam kann es auch so betrachten. Dies Konstrukt entpricht einem Fußdiagramm mit Verzweigungen. Jeder Case enthält ein Stück fortlaufenden Code, und am Ende ist eine Verzweigung. Dort geht es entweder zum nächten Case (also gewissermassen weiter im Text), oder in einen ganz anderen Case, wobei es auch mehr als zwei Möglichketen geben kann.
Also die Umsetzung eines ganz normalen Programms mit Verweigungen führt auf dieses Konstrukt. Der Unterschied ist nur, daß die LabVIEW-Umsetzung immer dann als "State-Machine" bezeichnet wird. Das ist zwar richtig, aber oftmals sind diese state-machines so simpel gestrickt, daß man sie im Leben außerhalb von LabVIEW noch nicht als solche bezeichnen würde.
28.05.2008, 10:44 (Dieser Beitrag wurde zuletzt bearbeitet: 28.05.2008 16:01 von jg.)
ok, das war sehr nett, sonst wär ich wschl. wieda überfordert gewesen :-)
Schön wenn es auch mal einfach erklärt wird!
Hab das jetzt auch mal für meinen Fall versucht zu adaptieren, aber es geht schon wieder schief: ich kann es wieder nicht mit Stop beenden...verflixt, hab ich noch irgendwas vergessen?
Komisch ist auch, dass die LEDs nur im Highlight modus in der richtigen Reihenfolge an und ausgehen, obwohl ich durch meine Pumpenantwort weiß, das er schon im nächsten Case ist...
28.05.2008, 11:11 (Dieser Beitrag wurde zuletzt bearbeitet: 28.05.2008 11:11 von Lucki.)
' schrieb:ich kann es wieder nicht mit Stop beenden...verflixt, hab ich noch irgendwas vergessen?
Ist ja klar, in dem einen Case wird Minuten oder Stunden gewartet, und in dieser Zeit hat der Stop-Knopf keine Chance gelesen zu werden. Aber mit der Konstruktion bis Du jetzt auf dem richtigen Wege, so daß es jetzt recht einfach ist das zu ändern.
Habe auch Schaltverhlten des Stop-Kopfers geändert, damit er beim Lesen von selbt wieder rausspringt.
' schrieb:Ist ja klar, in dem einen Case wird Minuten oder Stunden gewartet, und in dieser Zeit hat der Stop-Knopf keine Chance gelesen zu werden. Aber mit der Konstruktion bis Du jetzt auf dem richtigen Wege, so daß es jetzt recht einfach ist das zu ändern.
Habe auch Schaltverhlten des Stop-Kopfers geändert, damit er beim Lesen von selbt wieder rausspringt.
[attachment=39972:Zyklusti...sion2_1_.vi]
ah ja alles klar! genial, so hatt ich mir das gedacht! Da werd ich mal weiter den Rest reinbasteln, aber kommen bestimmt noch weitere Fragen
Anzeige
28.05.2008, 14:05 (Dieser Beitrag wurde zuletzt bearbeitet: 28.05.2008 16:01 von jg.)
sobald ich in meinem Case "Reaktorhalbierung" den Vergleich von aktuellem Waagenwert und Sollwert in eine while-schleife packe, hängt sich das Programm auf, warum denn das? *seufz*
28.05.2008, 16:31 (Dieser Beitrag wurde zuletzt bearbeitet: 28.05.2008 16:33 von Kvasir.)
Du greifst die Daten deiner Waage ja außerhalb der inneren Whileschleife ab. Das ist ja klar, dass das dann ewig, oder nur einmal läuft ...
Schau es dir mal mit dem Lämpchen an, dann siehst du das sofort.
Du musst also die Abfrage des aktuellen Waagewert in die Schleife packen.
edit: oder du machst es so, wie im angehängten beispiel. Da bleibst du solange im gleichen State, bis deine Abfrage true ergibt.
' schrieb:Du greifst die Daten deiner Waage ja außerhalb der inneren Whileschleife ab. Das ist ja klar, dass das dann ewig, oder nur einmal läuft ...
Schau es dir mal mit dem Lämpchen an, dann siehst du das sofort.
Du musst also die Abfrage des aktuellen Waagewert in die Schleife packen.
edit: oder du machst es so, wie im angehängten beispiel. Da bleibst du solange im gleichen State, bis deine Abfrage true ergibt.
[attachment=39987:Zyklusti...rsion2_2.vi]
Ok, das ding is das ich eigentlich die Waagenwerte die ganze Zeit über erfassen will..also dann doch lieber deine Variante, da is jetzt allerdings das Problem, das ich den Startwert der Waage nicht festsetzen kann mit ner lok. Variable, der läuft also immer dem aktuellen Waagenwert nach, so kann es natürlich auch nich funktionieren. Wie kann ich denn in diesem Case erst einmal den Wert festsetzen und dann den Verleich gegen den aktuellen Wert starten? Oder is es dann besser das gleich hintereinander in zwei verschiedene Cases zu packen?
29.05.2008, 09:35 (Dieser Beitrag wurde zuletzt bearbeitet: 29.05.2008 09:38 von Kvasir.)
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.
A few weeks of developement and testing can save a WHOLE afternoon in the library!