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!
spendiere deiner Statemachine einfach mehr States:
- "Messung starten" gehört in einen eigenen State, wo einfach nur auf den entsprechenden Button gewartet wird
- "Positionsbewegung": nimm die Whileloop dort raus und ersetze das "i" der Schleife durch ein Schieberegister der Statemachine, welches du selbst hochzählst
Mit den zwei kleinen Änderungen kann deine Statemachine jeden Arbeitspunkt sauber abarbeiten und du hast immer die Möglichkeit, deine Graphen/Anzeigen zu aktualisieren…
deine erste Verbesserung habe ich erfolgreich eingebaut
Ich habe aber noch eine kurze Frage zu deiner zweiten Anmerkung.
Zitat:"Positionsbewegung": nimm die Whileloop dort raus und ersetze das "i" der Schleife durch ein Schieberegister der Statemachine, welches du selbst hochzählst
Wenn ich das "i" durch ein Schieberegister der Statemachine ersetze, dann ist damit doch gemeint, dass ich den Zustand selber bestimmen kann, oder?
Allerdings will ich ja eine kontinuierliche Positionsbewegung erreichen.
Also nicht der State soll "hochgezählt" werden, sondern der Befehl der abosluten Positionierung.
Ich weiß gerade nicht genau, wie ich das umsetzen kann.
Liebe Grüße,
Jenni
12.12.2016, 11:22 (Dieser Beitrag wurde zuletzt bearbeitet: 12.12.2016 11:29 von GerdW.)
Zitat:Also nicht der State soll "hochgezählt" werden, sondern der Befehl der abosluten Positionierung.
Die einzige "Variable" innerhalb dieser WhileLoop ist der Schleifenzähler "i".
Wenn du also den Inhalt dieser Loop als eigenen State definierst, musst du nur "von außen" diesen Zähler als Parameter hineingeben.
Deshalb: das "i" durch ein (zusätzliches) Schieberegister der Statemachine ersetzen und selbst hochzählen.
Dein STOP-Button entscheidet dann, ab dieser State erneut aufgerufen wird (mit einem um 1 erhöhten "i"-Zähler) oder ob ein den State "Postionsabfrage" gewechselt wird…
Zitat:Dein STOP-Button entscheidet dann, ab dieser State erneut aufgerufen wird (mit einem um 1 erhöhten "i"-Zähler) oder ob ein den State "Postionsabfrage" gewechselt wird…
Im Moment werden allerdings alle States wiederholt, wenn mein Stop Button auf "erneute Bewegung" steht.
Wie kann ich jetzt verhindern, dass auch wieder eine Referenzfahrt durchgeführt wird? Diese setzt den Motor nämlich wieder auf 0°.
Oder es liegt an etwas anderem. Aber der Zähler bleibt immer nach einem Schritt stehen..
Ich hänge mein neues VI noch einmal an.
Liebe Grüße,
Jenni
12.12.2016, 13:32 (Dieser Beitrag wurde zuletzt bearbeitet: 12.12.2016 13:34 von GerdW.)
Zitat:Im Moment werden allerdings alle States wiederholt, wenn mein Stop Button auf "erneute Bewegung" steht.
Bestimmt hast du das so programmiert…
Zitat:Wie kann ich jetzt verhindern, dass auch wieder eine Referenzfahrt durchgeführt wird? Diese setzt den Motor nämlich wieder auf 0°.
Indem du einfach den richtigen State für die nächste Iteration vorgibst…
Zitat:Aber der Zähler bleibt immer nach einem Schritt stehen..
Böser Fehler: du hast da einen Tunnel an der Case-Struktur auf "default if unwired" gesetzt!
Schieberegister-Werte sollte (nach Möglichkeit) immer durchverdrahtet werden! (Es gibt da diese Rechtsklick-Option der "verbundenen Tunnel"…)
Bei Statemachine hat es sich bewährt, wenn man sich deren Aufbau mal auf einem Blatt Papier aufmalt - inkl. der Übergangsbedingungen! (Man kann sowas auch mit MS-Visio o.a. Programmen malen.)
da ist gerade mal ein Tag vergangen und schon wieder habe ich ein Problem..
Ich hänge es hier an, da es sich eigentlich immer noch um das Zeigerdiagramm handelt.
Und zwar hat alles soweit funktioniert.
Allerdings musste ich noch meine Größen von Schritten in Grad umrechnen (der Schrittmotor macht 8000 Schritte für eine volle Umdrehung, also 360°).
Ich dachte das ginge ganz einfach. Aber das Zeigerdiagramm macht nicht das, was es soll..
Ich habe dann mal einen Indikator dazwischen gelegt, der mir auch die richtigen Winkel anzeigt. Das Diagramm gibt diese aber nicht aus.
Als Beispiel:
Ich gebe als Schrittgröße 90° ein. Der Motor macht also eine 90° Drehung, dann wieder (also 180°), dann wieder ...
Der Plot Helper bekommt auch genau diese 90° raus (bzw. 180, 270, ...) gibt aber etwas anderes an. Bzw zeigt er ganz kurz auf 90°, und dann etwas anderes.
Woran liegt das? Habt ihr eine Idee?