INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Laufendes VI abbrechen



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!

03.04.2013, 18:47
Beitrag #1

Patrik Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: Apr 2013

2012
2012
DE



Laufendes VI abbrechen
Hallo Zusammen
ich habe folgendes Problem:
Ich programmiere einen Roboter welcher autonom auf einem Spielfeld fährt und dort verschiedene Aufgaben erfüllt. Wenn ein Gegnerischer Roboter erkannt wird, soll der Roboter sofort anhalten, einen neuen Weg berechnen und diesem folgen.
Das Problem liegt nun darin, dass wenn während der Fahrt ein Gegner erkannt wird, bricht die Fahrfunktion erst ab, wenn sie fertig ausgeführt wurde. Das ist natürlich zu spät, der Roboter muss sofort anhalten. Ich habe bereits folgende Varianten ausprobiert:

Fahrfunktion in eine While-Schlaufe. Als Abbruchkriterium die Gegnererkennung.
Fahrfunktion in eine Case-Struktur. Die Gegnererkennung ändert dann den Case von "Fahren" auf "Stoppen"
Interrupt: Die Fahrfunktion würde zwar abbrechen und es könnte auch ein zusätzlicher Weg eingeschlagen werden. Sobald dieser aber komplett absolviert wurde, würde der Roboter wieder versuchen den alten Code auszuführen.

Hat irgendjemand eine Idee? Besten Dank für eure Hilfe.

Gruss Patrik
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
03.04.2013, 19:26
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Laufendes VI abbrechen
Hallo Patrik,

Standardantwort auf solche Fragen: programmier eine Statemachine!

Einer deiner States erledigt dann das Fahren, aber jeweils nur für kleine Teilstücke des Weges. Nach jedem Teilstück wird geprüft, ob weitergefahren oder angehalten werden muss...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.04.2013, 20:19
Beitrag #3

Patrik Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: Apr 2013

2012
2012
DE



RE: Laufendes VI abbrechen
Hoi Gerd
Danke für deine schnelle Antwort. Leider ist die Sache etwas komplexer. Damit der Roboter "schön" fährt ist der Ablauf um von A nach B zu gelangen wie folgt programmiert:

1. Der Roboter berechnet den Winkel sowie die Distanz zum Endpunkt. Ebenfalls wird hier die maximale Geschwindigkeit festgelegt, mit welcher der Roboter maximal fährt. (Streckenabhängig)
2. Der Roboter dreht sich in Richtung des Endpunktes. (Da viele Hindernisse im Weg stehen, sollte der Roboter möglichst gerade fahren. Deshalb zuerst das Ausrichten)
3. Der Roboter beschleunigt nach einer vorgegebener Funktion. (Um ein Durchdrehen der Räder zu vermeiden und somit einem Positionsverlust oder unkontrollierten Bewegungen vorzubeugen.)
4. Der Roboter fährt mit der Maximalgeschwindigkeit in Richtung des Endpunktes. Dabei regelt er den Winkel zum Endpunkt kontinuierlich.
5. Sobald der Roboter erkennt, dass er in der Nähe des Endpunktes ist, beginnt er nach einer gegebener Funktion abzubremsen.

Wenn ich nun eine Strecke in sehr viele Teilstrecken unterteile, funktionieren die obigen (bereits programmierten) Funktionen nicht mehr. Auch würde ich dadurch die Vorteile der streckenabhängigen Geschwindigkeit verlieren und das Beschleunigen und Abbremsen wäre schwierig zu realisieren. (respektive aufwendig zu ändern)

Es wäre wirklich sehr sinnvoll, wenn ich eine der obigen Funktionen sofort unterbrechen könnte, abbremsen, ein neues Ziel berechnen und dieses mit dem obigen Ablauf anfahren.

Gibt es nicht irgendeine Möglichkeit wie ich das erreichen kann? Wenn du willst, kann ich dir die Fahrfunktion schicken. Sie wird übrigens auf einer Singelboard-Rio resp. der FPGA ausgeführt. Die Strategie sollte aus Platzgründen auf den Prozessor.

Gruss Patrik
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.04.2013, 20:27
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Laufendes VI abbrechen
Hallo Patrik,

ich habe nicht geschrieben, dass der Roboter unterwegs stehen bleiben soll...
Deine Punkte 1-5 könnten alles States einer Statemachine sein. Man kann jeden State "abbrechen" und zu einem anderen State wechseln!

Du kannst das natürlich auch bei deinem jetzigen Stand erreichen: Einfach oft genug eine globale Variable pollen, die vom UserInterface gesetzt wird. Ob das dann "übersichtlicher"/"wartbarer" wird, bleibt dahingestellt...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.04.2013, 06:16
Beitrag #5

Clyde Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 71
Registriert seit: May 2012

2012
2009
EN


Sonstige
RE: Laufendes VI abbrechen
Was stört dich denn an deinen Lösungen mit While- und For-Schleife? Klingen doch logisch.

Ansonsten muss ich Gerd zustimmen: Eine State-Machine bietet sich an


Gruß
Clyde
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.04.2013, 08:09
Beitrag #6

Patrik Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: Apr 2013

2012
2012
DE



RE: Laufendes VI abbrechen
Besten Dank für Eure Hilfe.
Ich habs geschafft. Die Idee, die Strecke in Stücke aufzuteilen, ist sehr gut. Ich kann damit zwischen zwei Regelzyklen eingreifen. Da ein einzelner Regelzyklus im Millisekundenbereich liegt, entspricht das beinahe einer sofortigen Abschaltung. Die Entscheidung anzuhalten passiert wie von euch vorgeschlagen via Statemachine.

Nochmals besten Dank.
Gruss Patrik
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  ungebremste Schleife / laufendes VI finden Trinitatis 3 2.988 18.08.2020 13:13
Letzter Beitrag: Trinitatis
  Sub-VI über Button im Hauptpanel abbrechen der Philipp ausm Wald 28 31.605 01.08.2018 06:55
Letzter Beitrag: GerdW
  "Abbrechen"-Knopf im Datei-Dialog ändern Marcusius 1 3.870 10.06.2015 12:49
Letzter Beitrag: jg
  wie Prozess vorzeitig abbrechen? Hasenfuss 3 4.882 13.03.2013 16:46
Letzter Beitrag: GerdW
  Zyklus abbrechen ragingbull 11 9.552 24.09.2012 16:19
Letzter Beitrag: GerdW
  While Schleife vorzeitig abbrechen Moeseph 3 5.951 08.04.2012 12:09
Letzter Beitrag: Moeseph

Gehe zu: