KUKA Programmierung

  • :huh:
    Hallo,


    ich habe folgende Problematik und ich stehe etwas auf dem Schlauch!


    Der Roboter bleibt während des Ablaufprogramms stehen (Störung an einem Bandsystem) und der Service wechselt den Betriebsmodus von EXT auf T1 und verfährt den Roboter, um besser an die Stelle zu kommen. Nach Behebung des Problems, wurde der Schalter wieder auf EXT gestellt und der Roboter bewegt sich auf schnellstem Weg wieder auf den letzten anzufahrenden Punkt. Leider war da ein Transportband dazwischen.
    Crash!


    Ich wollte nun diesen Fall so abfangen.
    Befindet sich der Roboter nicht auf seiner Bahn ($ON_PATH==FALSE) und der Betriebsmodus Extern ($EXT==TRUE) wird aktiviert, soll der Roboter angehalten werden.
    Nun habe ich im sps_sub mir eine Variable aus der oben erwähnten Kombination zusammen gestellt, um diese in einem Interrupt zu verwenden, welcher ein Modul IR_Stop aufruft. Diesen Interrupt habe ich im cell global deklariert und aktiviert.
    Im IR_Stop habe ich es versucht mit Brake F, funktionierte nicht.
    Mit Halt habe ich es auch versucht, hat aber auch nicht geklappt.


    In sps_sub:
    IF ($ON_PATH==FALSE) AND ($EXT==TRUE) THEN
    bStopRob=TRUE
    ELSE
    bStopRob=FALSE
    ENDIF


    In cell:
    GLOBAL INTERRUPT DECL 5 WHEN bStopRob DO IR_STOP ()


    INTERRUPT ON 5


    In IR_STOP:
    BRAKE F
    oder
    HALT



    Wie kann ich den Roboter unter diesen Bedingungen stoppen oder bin ich auf einer total falschen Fährte bzw. gibt es von jemandem einen besseren Vorschlag!
    Ich muss vielleicht noch erwähnen, dass es ein Programm von einer externen Firma ist und ich es nun erweitern darf.


    Vielen Dank für die Hilfe!


    Gruß
    schlottes

  • Schritt für Schritt zum Roboterprofi!
  • Hallo,
    also bei deiner geschilderten Vorgehensweise, wie du es verhindern willst, kannst du auch am besten dafür sorgen nach Crash, also T1 ist Grundstellung angesagt und ohne $IN_HOME passiert dann mal nichts. Musst du nur dafür sorgen das Programm abzuwählen und CELL wieder anzuwählen, dann wird als erstes die $IN_HOME geprüft!

  • Hi,


    Grundsätzlich ist jede Idee gut solange sie sauber funktioniert.


    Zu Deiner Idee will ich folgendes anmerken wenn du nur Brake oder Halt reinprogrammierst wirst du wenig Erfolg haben.
    Brake= Bremst den Roboter nur danach geht es ganz normal in Deinem Programm weiter
    Halt= hält den Roboter zwar an sobald aber jemand Start drückt fährt er ebenfalls im Programm weiter


    Für mich stellt sich ein Frage:
    Hängt der Robi an einer SPS?
    Wenn ja dann sollte der Fall über die SPS abgesichert werden.
    Der Roboter meldet über die Schnittstelle 2 Variable $on_Path und $Near_Posret
    wenn $near_posret auf False geht kommt eine Meldung "Sak Fahrt T1/2 erforderlich" (beim wiederumschalten von T1 auf Ext) dann darf auch von der SPS kein Start mehr erfolgen.
    Zu erwähnen wäre, dass der Bediener den Roboter ca +/- 100 mm verfahren darf bevor die Meldung kommt
    der Wert kann aber unter $nearpathtol eingestellt werden.


    Alternativ kann auch die Variable §on_path abgefragt werden bei der Variable darf man ca. +/- 1mm verfahren bevor sie auf False geht


    Hängt der Roboter an keiner SPS dann melde Dich nochmal


    Gruss Andy

    Und es sprach aus dem Chaos eine Stimme zu Dir:”Lächle und sei froh, es könnte schlimmer kommen.” <br />Ich lächelte und war froh, - und es kam schlimmer...!

  • Hallo,


    da wir diese Probleme mit den Bedienern auch öfters haben, machen wir es uns einfach und setzen den override nachdem von EXT auf T1 und zurückgeschalten wird auf 3%, d.h. im schlimmsten Fall fährt er irgendwann mal nen Crash aber dann auch nur sehr langsam.
    Weiß nicht wie diese Lösung für dich in Betracht kommt.


    Gruß Gundi

  • Merk dir in der sub.sps wenn der Modus von T1 auf EXT wechselt. Wenn der Bediener jetzt von EXT auf T1 wechselt löscht du diesen Merker und setzt dir einen neuen der diesen Vorgang speichert.
    Wenn der Roboter nicht mehr in der richtigen Position steht ($NEAR_POSRET heist die Variable) und der Bediener wieder auf EXT wechselt, brichst du das ganze Programm mittels CWRITE ab und lässt es Rücksetzen. Ebenfalls in der sub.sps

    Gruß Roland


    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.


    Ich bin wie ich bin. Die Einen kennen mich, die Anderen können mich.

    Konrad Adenauer

  • Hallo,


    vielen Dank für die Infos.


    @titan72: Eigentlich will ich mit der Aktion den Crash gar nicht erst entstehen lassen und schon vor der Bewegung den Roboter still setzen.


    Andy: Der Roboter wird von einer SPS gesteuert. Aber gibt es keine Möglichkeit den Roboter intern still zu setzen?


    gundi: Das habe ich auch so realisiert. Der oben angegeben Teil ist nicht alles. Ich habe bei der Umschaltung den $OV_PRO auf 0 gesetzt und eine Meldung im Meldefenster ausgegeben (Roboter auf T1 schalten und Punkt manuell anfahren).
    Diese IF Anweisung habe ich im sps_sub programmiert. Allerdings kann der Override anschließend per Tastendruck wieder erhöht werden und dann läuft der Roboter los.
    Wird eigentlich eine IF Anweisung nicht immer bearbeitet, solange die Bedingung wahr ist? Manchmal verwundert mich das Ganze etwas. Oder ist diese Anweisung im sps_sub an der falschen Stelle?


    Robman: Kannst du mir den Syntax sagen? Ich habe CWRITE auch schon verwendet, um den submit zu starten, habe aber einen Fehler erhalten (CWRITE($CMD,STATUS,MODUS,"run/r1/sps()"). Status und Modus nicht gleich.... Staus und Modus müssen doch nicht deklariert werden. Oder?


    Vielen Dank für die Antworten und die Hilfe!


    Gruß
    Frank

  • doch müssen sie, in der $config.dat,


    ;==================================
    ; Userdefined Types
    ;==================================
    DECL STATE_T STAT ;B A S I S T E C H DECL
    DECL MODUS_T MODE

  • und Programmabruch so,
    CWRITE($CMD,STAT,MODE,"CANCEL 1")

  • Hallo,


    der Interrupt wirkt fkankengetriggert. Zudem laueft das Progamm ja gar nicht, wenn der Schuesselschalter von Ext auf was anderes gerdreht wird - das machen die Instandhalter vermutlich nachdem der Roboter gestoppt wurde.
    Wenn sie bei laufendem Progarmm drehen hat dein Interupt auch keine wirkung, weil der Roboter im stopmess Interrupt ist - der hat vermutlich eine hoehere Prioritaet (3).


    Moeglichkeit wo ich sehe: im IR_StopM.src einen Resume programmieren und und im aufrufenden Programm die Roboterposition checken ($in_home, oder wie auch immer).


    Gruss Stefan


  • Merk dir in der sub.sps wenn der Modus von T1 auf EXT wechselt. Wenn der Bediener jetzt von EXT auf T1 wechselt löscht du diesen Merker und setzt dir einen neuen der diesen Vorgang speichert.
    Wenn der Roboter nicht mehr in der richtigen Position steht ($NEAR_POSRET heist die Variable) und der Bediener wieder auf EXT wechselt, brichst du das ganze Programm mittels CWRITE ab und lässt es Rücksetzen. Ebenfalls in der sub.sps


    Wir sagen, wenn es der Kunde geschafft hat, den Roboter in T1 von seiner Bahn wegzubewegen, dann schafft er es auch wieder ihn über SAK-Fahrt auf seine Bahn zu fahren.


    Code
    ;SPS_darf_ExtStart MERKT WENN ROBOTER AUF BAHN WAR
      ;WENN EINMAL IN EXTERN AUF BAHN, DANN KANN IHN KEIN MENSCH WEGBEWEGEN!
      IF $MODE_OP<>#EX THEN
        SPS_darf_ExtStart = $NEAR_POSRET ;WENN EXTERNAL MODE VERLASSEN DIREKT
      ELSE
        IF $NEAR_POSRET THEN ;ROBOTER (FAST) AUF BAHN - SELBSTHALTER IN $EXT
          SPS_darf_ExtStart = TRUE
        ENDIF
      ENDIF


    SPS_darf_ExtStart erlaubt u.a. den Ext Start von SPS. Kommt er nicht, dann erscheint 'Roboter nicht auf Bahn' auf OP.



    Ciao, Andreas

    CONTINUOUS ALWAYS

  • Brauch es ja auch nicht, es läuft ja in der SUB!
    Und SPS_darf_ExtStart ist mit einem Ausgang zur SPS verknüpft.



    Ciao, Andreas

    CONTINUOUS ALWAYS

    Einmal editiert, zuletzt von ah_robotics ()

  • Hallo,


    der Kommentar war auf das urspruengliche Problem bezogen - naemlich, wie der Roboter sich selber anhaelt.


    Deine Loessung ist OK, hat aber einen Haken: wenn der SPS.Sub in T1 oder T2 angehalten wird und dann in ext geschaltet wird, kann man den Roboter trotzdem starten. Jetzt koennte man noch einen Heartbeat programmieren, ob der SPS.SUB laeuft.


    Waere einfacher, das dann gleich komplett auf der PLC zu programmieren.


    "DoMoveEnable = Di_RobT1 OR Di_RobT2 OR DI_RobExt AND DI_NearPosRet"


    Gruss Stefan

  • Hallo,
    trotzdem starten wenn sps.sub nicht läuft, wie geht das denn :nocheck::kopfkratz::huh: !!!

  • Hallo,


    wenn wir keine SPS zum Roboter haben, so ist es bei unseren Anlagen möglich, den Roboter über eine Schaltbox, bzw. über die 4 Handlingstasten an der SGM zu bedienen.
    Dies geschieht auch in AUT EXT über diverse Drahtbrücken, die Ausgänge zu System-Eingängen machen, wie hier im Forum schon beschrieben wurde.
    Der externe Start und Stop erfolgt demnach komplett durch die SUB.


    Diese Routine könnte man ja auch für den Betrieb mit einer SPS umschreiben. So würde sich der Roboter selber zur SPS zuschalten, wenn diese Aktiv geschalten wird. Der Roboter könnte sich so synchron zur SPS verhalten.
    Schließlich "weiß" der Roboter besser als die SPS, wann er sich zuzuschalten hat. ;)
    Die SPS bekommt natürlich alle wichtigen Systemzustände mitgeteilt, nutzt diese aber nur zur Visualisierung.


    Und wenn dann die SUB gestoppt ist, geht gar nichts mehr!


    Außerdem braucht man einen neuen SPS-Programmierer nicht wieder alles von vorn erklären, wie und wann der Roboter zu starten ist...



    Ciao, Andreas

    CONTINUOUS ALWAYS

    Einmal editiert, zuletzt von ah_robotics ()

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