BRAKE F per Interrupt (Kollisionsschutz)

  • Hallo zusammen,
    bisher habe ich kaum etwas im submit/sps programmiert und mich meistens auf die reine Bewegungs- und Ablaufprogrammierung beschränkt. Jetzt soll eine Überlastkupplung per Interrupt integriert werden. Es liegt ein Öffner auf Kanal 17. Bei Abfall des Signals soll BRAKE F erfolgen.
    Ein Taster auf dem Roboter kann das Signal brücken, damit nach Kollision in T1 wieder in HOME gefahren werden kann.
    Ich weiß, dass ich im sps.sub folgendes einbinden muss:
    INTERRUPT DECL 1 WHEN $IN[17]==FALSE DO KOLLISION()
    außerdem steht in KOLLISION() die Anweisung BRAKE F.
    Aber wo muss die Deklaration sinnvollerweise hin? Wo schalte ich am besten INTERRUPT ON und wo schreibe ich wie die Interruptroutine/das Programm KOLLISION()?

    Ich wäre über ein paar Hinweise sehr dankbar. Ich möchte es auch nicht gerne irgendwie einfach ausprobieren, sondern es schon dort hinschreiben, wie es am besten und professionellsten ist ;)
    Danke und Grüße,
    h_robot

  • Schritt für Schritt zum Roboterprofi!
  • Hi,
    also mit dem sps.sub bist Du hier auf dem Holzweg. Im sps.sub könnte man das ganze auch realisieren über die Funktion rob_Stop() (siehe Doku für Systemintegratoren).
    Wenn Du das über einen Interrupt lösen möchtest, dann musst Du schon die Brake F Anweisung im Roboterinterpreter ausführen.
    Die Interrupt Deklaration steht normalerweise im Initialisierungsbereich deiner Anwendung.
    Die Aktivierung erfolgt eine Ebene tiefer, da nach der Abarbeitung des Interrupts der Rücksprung in die Ebene, in der der Interrupt deklariert wurde erfolgt (RESUME Anweisung).
    Wenn der Interrupt z.B. im UP1 ausgelöst wird, steht der Satzzeiger nach der Abarbeitung des Interrupts auf UP2().


    Beispiel:


    DEF Hauptprogramm()
    INTERRUPT DECL 1 WHEN $IN[17]==FALSE DO KOLLISION()
    LOOP
    UP1()
    UP2()
    ENDLOOP
    END


    DEF UP1()
    INTERRUPT ON 1
    PTP XHOME
    PTP P1
    PTP XHOME
    INTERRUPT OFF 1
    END


    DEF UP2()
    INTERRUPT ON 1
    PTP XHOME
    PTP P2
    PTP XHOME
    INTERRUPT OFF 1
    END


    DEF KOLLISION()
    INTERRUPT OFF 1
    BRAKE F
    WAIT FOR $T1
    PTP XHOME
    INTERRUPT ON 1
    RESUME
    END


    Natürlich gibt es auch andere Implementierungsmöglichkeiten.


    Viele Grüße
    MrPink

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