Interrupt Problem, Resume Fehlermeldung unzulässige Programmstrucktur

  • Moin Roboter Experten,


    ich bin seit längerem mal wieder im VW user unterwegs, an einer 5.4.7er Version und bekomme meine Bewegung einfach nicht so abgebrochen wie ich es mir Vorstelle.

    Unterlagen und hier im Forum habe ich jetzt zu genüge gelesen, komme aber einfach nicht weiter.


    Problem:

    Roboter soll in bestimmten Fällen (durch Eingang 353) seine Bewegung "zielpunkt" unterbrechen und zurück auf "ausgangspunkt".

    Mein Probelm ist das der Roboter nach dem auslösen genau an die Stelle zurück fährt wo der Fehler festgestellt wird (auf dem weg "zielpunkt") das soll er nicht.

    Deswegen habe ich gedacht ich baue den Befehl Resume mit ein. Nun bekomme ich aber an der Stelle die Fehlermeldung: unzulässige Programmstrucktur.


    Dann habe ich einen zweiten weg versucht und habe gedacht wenn ich den Rob nicht gestoppt bekomme schreibe ich die Position einfach um. Das funktioniert aber auch nicht, irgendwie merkt sich der Roboter wo er hin wollte und fährt zum zielpunkt.

    Ich hoffe auf eure Mithilfe, vielen Dank im vorraus.

  • Schritt für Schritt zum Roboterprofi!
  • Hallo Frank32,


    da wo der Interrupt deklariert wird darfst du nicht den Interrupt Auslösen du must eine Ebene tiefer stehen wie die Deklaration.

    Dann bekommst du auch keine Fehlermeldung.

  • Hallo Team Rosario,

    vielen dank für den Tip, hab das jetzt so ausprobiert wie ich es verstanden habe und den Interrupt Aufruf direkt unter meinen Deklarationsteil geschrieben. Das sieht jetzt so aus:


    Die Frames für startpunkt, zielpunkt und ausgangspunkt habe ich in die config geschrieben, die wollte ich aus versuchsgründen global haben.


    Leider immer noch beim Ablauf die selbe Fehlermeldung: Unzulässige Programmstruktur für RESUME

  • Hallo Frank32,


    Probiere es mal so:


    Du musst eine Ebene tiefer wo du den Interrupt deklariert hast ihn auslösen. Also hier im Suchen ()

    Du machst deine Fahrt zum Zielpunkt im Programm Suchen das du dann mit dem $IN[353] = False abrichst und du dein up() startest mit dem Resume

    Springt er dann zurück in dein Main () wo du den Interrupt deklariert hast. Kann sein das ich ein END falsch gestellt habe aber so muss es gehen.

    • Hilfreich

    Hallo Frank,

    wie Team Rosario bereits geschrieben hat darf der Interrupt nicht auf der Deklarationsebene eingeschalten werden. D.h. du muss den Interrupt in einem Unterprogramm einschalten.


    Ggf. kannst du deine Anfahrt auf den Zielpunkt (ab z.B. Zeile: "$advance=0" bis Zeile: "Interrupt off 10") komplett in ein Unterprogram auslagern und dieses Unterprogramm aus deinem Hauptprogramm aufrufen.


    Eine weitere Möglichkeit wäre das Interrupt Handling komplett auszulagern. Z.b. in eine gesonderte Interrupt.scr

    In deinem Quellcode rufst du dann die Funktionen aus der Interrupt.src auf.


    Wenn ich das richtig verstanden habe möchtest du die Bewegung zum "Zielpunkt" überwachen? Solltest du den Interrupt dann nicht erst nach erreichen des "Startpunkt" einschalten bzw. vor der Bewegung zum "Zielpunkt"?

  • Moin miteinander,

    danke für den Tipp Hermann, wie ich allerdings eingangs bereits geschrieben habe, bin ich damit nicht weiter gekommen. ;)


    Team Rosario und JonasX :thumbup::thumbup::thumbup:Top, ich habe meinen Fehler jetzt verstanden, vielen Dank für die Hilfe.

    Bei mir "hing" es an dem Verständnis für die Aufteilung der Struktur des Interrupts. Ich dachte ich müsse einfach nur alles in entsprechendem Schema von oben nach unten im User eintragen. Erst jetzt habe ich begriffen was es mit den einzelnen UP´s innerhalb des Users zu tun hat.

    Einmal das ganze neu aufgeteilt und es lief.


    Ich werde morgen mal den Code anhängen um das Thema sauber abzuschließen.

  • wie gestern noch geschrieben, hier das funktionierende Programm. Die Deklaration der Variablen sind in die config gewandert.

    Vielen Dank nochmal für die Unterstützung



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