KRC2 Programmabbruch

  • Hallo Zusammen,

    ich hätte eine Frage an euch Experten. Folgenden Code habe ich erstellt, hierzu möchte ich nun wissen wie "sicher"
    dieser ist im Bezug auf den Abbruch des Programmes. Oder ob es besser wäre das ganze mit einem Interrupt zu lösen.

    An einer bestimmten Stelle im Hauptablauf (If $IN[45]==FALSE) wird ein Signal überprüft das von der SPS zum Roboter gesendet wird. Wenn dieses "FALSE" ist, soll der Roboter in ein Unterprogramm springen die Bauteile abwerfen und zurück in Grundstellung fahren.


    Anschließend eine Fehlermeldung ausgeben, dass Programm stoppen und abwählen, sodass kein weiterer Verfahrbefehl aus dem
    Hauptablauf ausgeführt wird.


    Auszug aus dem Hauptablauf ( )


    TRIGGER WHEN DISTANCE=1 DELAY=0 DO POSITION=5
    PTP P5 CONT Vel=100 % PDAT14 Tool[6]:Greifer_Btl_abl Base[0]

    ;-----------------------------------------------------------
    If $IN[45]==FALSE THEN ;Typnr. falsch
    SET Schwenker v/r State= OPN
    SET Verfahreinheit v/r State= OPN
    ;-----------------------------------------------------------
    id_false_up ()
    OUT 60 'Anwenderfehler' State=TRUE
    meldungen (200)
    wait sec 0.5
    $Flag[1]=True
    Halt
    Endif
    ;-----------------------------------------------------------

    SYN OUT 406 'SCHWENKEINHEIT FEST UG 13 SCHWENKEINHEIT VERFAHRBAR UG 14 RUECK' State=FALSE at START Delay=0 ms
    SYN OUT 405 'SCHWENKEINHEIT FEST UG 13 SCHWENKEINHEIT VERFAHRBAR UG 14 VOR' State=TRUE at START Delay=0



    TRIGGER WHEN DISTANCE=1 DELAY=0 DO POSITION=6
    PTP P6 CONT Vel=100 % PDAT16 Tool[6]:Greifer_Btl_abl Base[0]



    Auszug aus dem Unterprogramm ( )



    PTP P76 Vel=100 % PDAT15 Tool[5]:Greifer_Btl_holen Base[0]
    ...
    Bauteile abwerfen
    ...
    PTP P77 Vel=100% PDAT16 Tool[5]:Greifer_Btl_holen Base



    Verweiß Flag in der sps.sub


    If ($Flag[1]) and ($Pro_State1==#P_Active) THEN


    CWRITE($CMD,STAT,MODE,"Stop 1")


    Endif


    If ($Flag[1]) and ($Pro_State1==#P_Stop) THEN


    CWRITE($CMD,STAT,MODE,"Cancel 1")


    Endif



    If ($Pro_State1==#P_Free) or ($Pro_State1==#P_Reset) THEN


    $Flag[1]=False


    Endif



    Vielen Danke im Voraus für Eure Mühe!


    Danke und Gruß muggy

    Einmal editiert, zuletzt von muggy ()

  • Schritt für Schritt zum Roboterprofi!
  • Wenn ich das noch halbwegs in Erinnerung habe, läuft bei der KRC2 das Programm auch ungerührt weiter, wenn die SPS.SUB steht oder tot ist. Das Selbstabwählen ist schon ultimativ sicher, aber nur, wenn es auch stattfindet...
    ... warum machst Du den weiteren Ablauf nicht in den ELSE-Zweig der Abfrage auf (not $IN[45])? Oder einfacher ausgedrückt:
    IF $IN[45] then
    Hauptablauf()
    ELSE
    Panikprogramm()
    ENDIF


    Anstelle von "halt" kann man bei Sachen, die GANZ sicher nicht nachgestartet werden sollen, auch schreiben
    while true do
    halt
    endwhile


    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