Not-Aus und Roboterstatus

  • Hallo liebe Leute,


    ich habe zwei folgende Probleme.


    1. Ich möchte bei auftretendem Not-Aus eine Fehlerroutine erstellen bei der ich nach Beseitung des Not-Aus wieder automatisch den Power Button freigebe und dann das Programm, in dem der Fehler auftrat wieder von vorne starte. Ich habe es mit der err.main(), err.reacte(), err.reacti() Methode aus dem Schulungsskript versucht. Habe mir das err.reacti Programm umgeschrieben, dass der Roboter nur hochfährt und dann in die Grundposition fährt. Das funktioniert aber komischerweise nicht korrekt oder hängt sich in err.reacte auf. Hat jemand einen Tipp für eine "elegante" Lösung?


    2. Ich muss eine "Ampel" einbinden. Sprich....wenn der Roboter läuft soll die Ampel grün zeigen und wenn er steht und nicht arbeiten kann soll rot angezeigt werden. Soweit ich weiß, gibt es kein Signal, dass der Roboter in Bewegung ist. Gibt es eine gute Lösung dies auszuwerten?


    Vielen Dank schon mal im Voraus.
    Björn

  • ANZEIGE
  • Also zu Punkt 1. habe ich das Problem mit dem Aufhängen in err.reacte hinbekommen. Jedoch habe ich weiter das Problem, dass der Neustart des Roboters nicht den gewünschten Effekt bringt.
    Hier der Programmablauf von err.reacti():


    .PROGRAM err.reacti()
    ; ABSTRACT:
    ;
    ; SIDE EFFECTS:
    ;
    ;* Copyright (c) by
    ;---------------------------------------------------------
    LOCAL REAL disk.lun ; wird erst im Programm "err.txt()" initialisiert
    LOCAL LOC error.loc[]
    BREAK ; Warten bis der Roboter angehalten ist
    HERE error.loc[prio]
    SIGNAL -bs.reacti
    WAIT
    ; Fehlerinformationen aufbereiten und in Datei und Monitor Terminal Fenster schreiben
    CALL err.txt(disk.lun)
    prio = prio+1
    REACTI bs.reacti, err.reacti, prio
    ; ------ Start individuelles Errorhandling --------------------------------------------
    CASE err[prio-1] OF
    VALUE -910, -909, -908: ; E-STOP von MCP oder Frontpanel NOT-AUS Knopf
    WHILE (STATE(4) BAND ^B100 == 4) DO
    WAIT
    TYPE "Bitte ALLE NOT-AUS Kreise pruefen", /U1
    $error = "Bitte ALLE NOT-AUS Kreise pruefen"
    END
    END ; CASE err[prio-1]
    ; ------ Ende individuelles Errorhandling --------------------------------------------
    FCLOSE (disk.lun)
    DETACH (disk.lun)
    ; High Power zuschalten
    WHILE SWITCH(POWER) == FALSE DO
    TYPE "Bitte blinkenden High-Power Knopf auf CIP druecken", /U1
    $error = "Bitte blinkenden High-Power Knopf auf CIP druecken"
    ENABLE POWER
    $error = " "
    WAIT
    END ; Roboter wieder ankoppeln, Fehler wie z.B. *Joint 3 out of range* werden ausgegeben
    ; damit der Bediener den Fehler abstellen kann.
    DO
    WAIT
    ATTACH (0, 1)
    IF IOSTAT(0,0) < 0 THEN
    TYPE "Der Fehler : ", $ERROR(IOSTAT(0,0)), " ist aufgetreten!"
    END
    UNTIL IOSTAT(0,0) == 1
    DEPART 370-DZ(HERE) ; 380 bedeutet fuer Adept Cobra Greifer oben
    BREAK ; bei anderem Roboter anpassen
    SIGNAL a.vakuum.aus
    MOVE grund
    BREAK
    SIGNAL abbruch
    prio = prio-1
    REACTI bs.reacti, err.reacti, prio
    .END


    Nach dem Neustart des Roboters soller er hoch fahren, damit er sich frei bewegen kann und zur Grundstellung fahren und neu das Hauptprogramm starten. Er fährt auch hoch und in die Grudnstellung, aber will dann nochmal die abgebrochene Bewegung durchführen. das bekomme ich irgendwie nicht raus.

  • Das Programm macht genau was in deinem Code steht.


    Wenn du imer wieder von vorn starten möchtest, machst du am Ende deines err.reacti ein HALT und führst von Anfang beim Starten das Roboterprogramm mit -1. Der Aufruf sieht dann z.B. so aus: EXECUTE 0 rob.main, -1
    Jedesmal wenn das Programm mit HALT angehalten wird, fängt es von vorne wieder an zu laufen.


    Viele Grüße,


    Pitl

  • Guten Morgen Pitl,
    also wenn ich an das Ende meines err.reacti ein HALT eintrage und das Roboterprogramm mit EXECUTE 1 rob.main(), -1 aufrufe, dann geht das System direkt in HALT und steht dann da. Irgendwie steh ich da grad etwas auf dem Schlauch.


    Gruß
    Björn

  • Hallo Muses,


    ersetze HALT Befehl durch den STOP Befehl. Der STOP Befehl prüft ob noch "Taskzyklen" abzuarbeiten sind. HALT bricht die "Taskzyklen" ab.



    das Roboterprogramm mit EXECUTE 1 rob.main(), -1 aufrufe, dann geht das System direkt in HALT
    Wenn du Task 1 benutzt um einen Roboter zu bewegen musst du diesen vorher ankoppeln. Z.B.
    SELECT robot=1
    ATTACH(0) ;in Schleife mit Fehlerauswertung besser (siehe dein Interrupthandling err.reacti)



    Gruß
    Sunny

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