Automatische Rückzugstategie über Interrupt

  • Hallo,


    ich soll bei uns eine Automatische Rückzugsstrategie programmieren, aktuell springt der Roboter in ein Globales Interruptprogramm sobald beim Abstapeln ein Kollision ausgelöst wird.

    Von da an muss man händisch weiterfahren, bis der Kollisionssensor nicht mehr belegt ist, danach springt er wieder ins Hauptprogramm.

    Meine Idee ist nun, das ich einen Eingang vorgebe bei dem der Roboter aus dem Interruptprogramm in ein Lokales Unterprogramm springt und sich von dort automatisch zurückzieht und auf einen zweiten Eingang wartet, dass der Ablauf bereinigt ist.


    Nun ist die Frage, wie bekomme ich das hin, das er nicht zurück ins Hauptprogramm, sondern direkt ins Lokale Unterprogramm springt? Geht das überhaupt?


    g.

    Neisyros

  • Schritt für Schritt zum Roboterprofi!
  • Guten morgen....


    Return

    Resume

    Goto

    Exit


    das sind befehle womit man was anfangen könnte....

    Wahrscheinlich würde ich bei Kollision eine variable setzen mit interrupt und dann nach Hause fahren ohne Heck meck. Ich wüsste jetzt keinen Grund weshalb ich woandershin springen soll....

  • Du kannst Dein Interruptprogramm beliebig aufblasen, das muss ja nicht aus zwei Zeilen bestehen. Auf diese Weise IST dann die Interruptroutine Dein Unterprogramm, das ist keine Hexerei.

    Wohin danach bei RESUME gesprungen wird legst Du durch den Ort der Interruptdeklaration fest. Wenn Du den Interrupt in der Hauptroutine deklarierst, geht er dahin zurück. Deklarierst Du ihn "weiter unten", geht er dahin zurück.

    Das führt dazu, dass man sich genau überlegen muss, was man genau abbrechen will, damit das dann in einer tieferen Ebene liegt. Das ist manchmal nur eine einzige Bewegung, manchmal aber auch der komplette Bearbeitungsablauf, je nachdem, wie man es geplant hat.


    Grüße,

    Michael

  • "Nun ist die Frage, wie bekomme ich das hin, das er nicht zurück ins Hauptprogramm, sondern direkt ins Lokale Unterprogramm springt? Geht das überhaupt?"


    Ja aber Struktur muss angepasst sein. RESUME springt zurück zur Ebene wo interrupt deklariert ist (Hauptprogramm)

  • Erst einmal danke für die Antworten :)

    Grundsätzlich wäre es mir sogar lieber das Interruptprogramm aufzublasen und den Rückzug darin stattfinden zu lassen, jedoch arbeiten wir mit Baseverschiebung und es wird öfters mal was umgeteacht, daher wollte ich es lieber im lokalen Unterprogramm abarbeiten.

    Es werden ca. 50 Programme mit Rückzug von daher wäre es übers lokale Programm auch etwas "entspannter"

    Oder gibt es eine Möglichkeit vom Interruptprogramm auf die Dat vom Hauptprogramm zuzugreifen?


    Springt er durch RESUME komplett zur Deklaration oder zum Punkt der aktuell im Hauptprogramm angefahren wird?

    Braucht man eigentlich ein separates Interruptprogramm oder könnte ich das auch einfach lokal schalten? Von dort aus könnte ich mit Goto arbeiten.


    g.

    Neisyros

  • Der Rücksprung geht so, als wäre die unterbrochene Routine normal zu Ende. Nur, wenn Du noch weitere verschachtelte Ebenen mit Aufrufen dazwischen hast, dann so, als wären die dann auch zu Ende.


    Du kannst auf alle Daten zugreifen, die im selben Modul liegen, also im zur *.src gehörigen *.dat. Oder Du musst mit dem Schlüsselwort GLOBAL arbeiten.


    Und Du kannst auch weitere Routinen aufrufen. Wichtig ist halt, dass Du im Hinterkopf behältst, dass Du noch im Interrupt bist, und dort irgendwann wieder rauskommst, und dass Du währenddessen für Interrupts mit geringerer Priorität taub bist.


    Auf GOTO würde ich an Deiner Stelle lieber verzichten, ich hab' keine Ahnung ob man überhaupt mit GOTO aus nem Interrupt kommt. Hört sich jedenfalls an wie kontrollierte Selbstzerstörung.


    Grüße,

    Michael

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden