Auswertung externer Überlastsensor (mal wieder....)

  • Moin,


    gleich zu Beginn: ja ich habe hier bereits einige Artikel zum Thema gelesen, habe aber immer noch keine Lösung gefunden, welche Vorgehensweise am meisten Sinn macht.


    Es geht um das Anhalten bei Auslösung einer externen Überlastkupplung mit einem Öffner.


    Folgende Möglichkeiten sind mir bekannt, bzw. wären umsetzbar:

    • Sensorsignal wird in übergeordneter Automatisierungs-SPS verarbeitet. SPS ist mit KR C4 über EtherCAT-Bridge verbunden. In AUT und EXT würde die SPS bei Auslösen des Sensors $MOVE_ENABLE auf FALSE setzen.
      Nachteil: Es wird in externer SPS verarbeitet; ggf. längere Laufzeit; KR C4 macht dann "nur" STOP 2.
      Reicht das aus, oder wäre STOP 1 oder STOP 0 bei Kollision besser?
    • In sps.sub kann der Sensor (direkt an KEB EK1100 angeschlossen) ausgewertet werden und ROB_STOP() ausgeführt werden.
      Wenn ich es richtig verstanden habe, kann ich über den Parameter ROB_STOP_T := #PATH_MAINTAINING indirekt ein BRAKE F auslösen. Roboter kommt dadurch schneller zum Stehen als Lösung 1?
    • Arbeiten mit Interrupts. Würde dies auch einmalig in CELL funktionieren, oder muss es in jedem aus cell aufgerufenem Programm sein?

    Ich suche eine Lösung, die möglichst zuverlässig ist und zum schnellen Stillstand führt. Es arbeiten ggf. auch weniger Erfahrene am Roboter, erstellen vielleicht auch mal Programme für cell. Ein manuelles einbauen in jedes Programm wäre deshalb nicht so gut, wird sonst vergessen und es gibt dann keinen Kollisionsschutz.


    Der Schutz soll nur in T2/AUT/EXT aktiv sein. Das wäre zumindest mit der Lösung 1 und 2 leicht umzusetzen. Bei einem Crash muss also in T1 freigefahren werden.


    Ich neige zurzeit noch zur Lösung 1, mache mir da aber Gedanken, ob der Roboter dann wirklich schnell genug steht.... SPS-Laufzeiten sind eher gering (10 ms oder dafür ein schnellerer Task), aber die Stopp-Reaktion soll dann eigentlich schneller kommen; oder ist STOP 2 schnell genug?


    Nehme gerne eure Tipps auf ;)


    Grüße,

    h_robot

  • Schritt für Schritt zum Roboterprofi!
  • Guten Morgen h-robot,

    für so einen Fall würde ich einen Interrupt nutzen.

    Das Signal an die übergeordnete SPS senden und diese das Signal dann auswerten lassen dauert zu lang.

    Sofern das Signal direkt auf die Steuerung des Robis geht, ist diese Option schneller.


    Den Interrupt in deinem Hauptprogramm, in diesem Fall dein CELL, deklarieren. Den Interrupt mit deinem Signal oder einem CYCFLAG verschalten und dann eine Ebene tiefer aktivieren.

    Somit hast du jederzeit eine Überwachung des Signalzustandes.

    In der Interruptroutine kannst du dann den Roboter dementsprechend bahntreu über "BRAKE" oder schnellstmöglich aber nicht bahtreu über "BRAKE_F" zum stehen bekommen.

    Der Interrupt hat auch den Vorteil, dass du Fehlermeldungen etc ganz easy in der Routine des Interrupts realisieren kannst.


    Grüße

  • Moin Robonator!


    Danke für den Tipp!


    Habe soweit schon etwas testen können.


    Auf $IN[19] liegt zum Testen ein Öffner, Hier soll dann bald das Sensorsignal aufgelegt werden.


    im cell-Programm folgendes:


    Code
    .....
    INIT
    BASISTECH INI
    INTERRUPT WITH BRAKE F DECL 1 WHEN $IN[19]==FALSE DO STOP_ULS()
    INTERRUPT ON 1
    CHECK HOME
    PTP HOME.....
    .....


    Ganz unten im cell-Programm dann noch:

    Code
    DEF STOP_ULS()
    // hier wäre wohl eigentlich BRAKE F, aber da ich es schon in der Interrupt-Deklaration habe, kann dieses Unterprogramm wohl leer sein?
    END


    Insgesamt gibt es zumindest schonmal keine Fehler und es funktioniert auch (auch wenn noch nicht vollständig und zufriedenstellend):

    Wenn ich cell anwähle (T1) und starte (HOME anfahren), wird ein Flankenwechsel von TRUE->FALSE erkannt und der Roboter steht.

    Aber:

    Ich kann einfach die Start-Taste loslassen und neu drücken, dann fährt der Roboter weiter. Auch erneute Flankenwechsel des Einganges führen zu keiner Änderung.....

    Nachtrag, s.u., in EXT funktioniert es nicht


    Prinzipiell funktioniert es also irgendwie, aber noch nicht so, wie es sein sollte.

    Ich würde gerne bei Kollision in T2, AUT, EXT BRAKE F ausführen und jede weitere Bewegung verhindern.


    Ist meine Integration so sonst praktikabel und üblich, oder sollte es generell anders sein? Ist das WITH BRAKE F in der Interrupt Deklaration so ok, oder lieber im Unterprogramm? Habe das Unterprogramm auch leider nicht in eine seperate Datei bekommen, deshalb unter celll.


    Wenn das Anhalten bei Kollision im Normalbetrieb sonst aber programmiertechnisch "sicher" ist, kann ich die restliche Verarbeitung auch in der Automatisierungs-SPS machen (Fahrfreigabe wegnahmen, wiederanlauf verhindern, etc.). Ich frage nur, da ich nicht weiß, wie man sowas am elegentesten löst.

    Einmal editiert, zuletzt von h_robot ()

  • Nochmal ein Nachtrag: In Ext läuft es leider überhaupt nicht:


    Wenn der Sensor auslöst (und auch FALSE bleibt), bleibt der Roboter zwar kurz stehen, fährt dann aber sofort weiter.


    Irgendwie passt die Implementierung also nicht.

  • BRAKE F stoppt nur die Bewegung, nicht den Programmablauf.

    Mach mal ins UP noch ein HALT. Dies stoppt den Programmablauf.


    Bei Schweissapplikationen ist ein Kollisionsschutz als "Brennersicherung" Standard.

    Da ist er in allen Betriebsarten aktiv.

    Sehr oft leidet der Brenner in T1, wenn die Bediener teachen, freifahren, oder was auch immer fummelt.

    Im Crashfall ist da normalerweise ein Taster da, wo Du kurzfristig das Signal des Kollisionsschutzes überbrücken kannst und sich resetet, wenn er wieder in "Normalstellung" ist.


    Wie er integriert wird ins System ist oft abhängig, wie schnell Du fährst und wie weit der Kollisionsschutz "nachgeben" kann. Dies über Interrupt zu lösen ist sicher eine schnelle Methode. Verlangt aber zwingend einen laufenden Interpreter. $Move_Enable ist eine gute Alternative, die sehr oft ausreicht.

    Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.

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