Interrupt programmieren

  • Hallo,
    ich bin gerade dabei einen Prüfablauf mittels eines Roboters zu realisieren.
    Der Roboter soll bei der LIN Bewegung durch einen Interrupt stoppen und durch ein Freigabesignal wieder in seine HOME Position fahren und das Programm von vorne abarbeiten. Leider funktioniert mein Programm nicht so wie ich es mir vorstelle. Nachdem ich hier schon jedes Thema über den Interrupt gelesen und auch die Doku von Kuka gelesen habe was über den Interrupt drinsteht, habe ich mich entschlossen mal direkt hier nachzufragen.



    [size=2]DEF check_1 ( )[/size]


    [size=2]INTERRUPT DECL 1 WHEN $IN[36] == TRUE DO ERROR( )[/size]
    [size=2]inter()[/size]
    [size=2]END[/size]


    [size=2]________________________________________________________________________[/size]


    [size=2]DEF inter()[/size]


    [size=2]PTP XHOME[/size]


    [size=2]LOOP[/size]
    [size=2] WAIT FOR $IN[33] == TRUE[/size]
    [size=2] PTP Xvorpos[/size]


    [size=2] WAIT FOR $IN[34] == TRUE[/size]
    [size=2] PTP XPOS_2[/size]


    [size=2] WAIT FOR NOT $IN[36][/size]
    [size=2] INTERRUPT ON 1[/size]
    [size=2] WAIT FOR $IN[35] == TRUE[/size]
    [size=2] LIN XPRUEFEN[/size]


    [size=2] WAIT FOR $IN[37] == TRUE[/size]
    [size=2] PTP XHOME[/size]
    [size=2] INTERRUPT OFF 1[/size]


    [size=2]ENDLOOP[/size]
    [size=2]END[/size]
    [size=2]________________________________________________________________________[/size]


    [size=2]DEF ERROR()[/size]


    [size=2]INTERRUPT OFF 1[/size]
    [size=2]BRAKE[/size]
    [size=2]WAIT FOR $IN[37] == TRUE[/size]
    [size=2]RESUME[/size]
    [size=2]END[/size]



    Durch den RESUME Befehl steht nach dem ERROR Programm der Programmzeiger an dem END im check_1 und gibt eine Fehlermeldung aus "Fortsetzstart nicht möglich" (Ist klar, da er die Programme abbricht). Ich brauche aber den RESUME Befehl, sonst fängt er nach dem ERROR Porgramm an, die LIN Bewegung bis zum Ende zu fahren.


    Wenn ich anstatt dem RESUME Befehl hier mein inter() eintrage, macht er das was ich will, er springt wieder in das Programm inter oben rein und arbeitet es wieder ab, nur wird beim zweiten Durchlauf, der Interrupt nicht erkannt.


    Über Hilfe würde ich mich freuen.


    Grüße

    Einmal editiert, zuletzt von mannaz ()

  • Schritt für Schritt zum Roboterprofi!
  • Im Programm check_1 den Aufruf von inter in eine Schleife packen.

    Code
    LOOP
    inter()
    ;hier ggf. noch Abbruchbedinguung der Schleife einfuegen
    ENDLOOP

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

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