Roboterpositionen Triggern

  • Hallo Liebe Programmierer,


    mit welcher Trigger-Anweisung kann ich eine Variable beschreiben um im Fehlerfall geziehlt eine
    Rückzugstrategie fahren zu können.


    Beispiel KUKA:


    TRIGGER WHEN DISTANCE=1 DELAY=0 DO ROBPOS=1
    PTP STARTPOSITION


    Die Variable ROBPOS ist somit meine Positionswariable mit dem jeweis entsprechenden Zahlenwert der Aktuellen Roboterposition.


    Nun Frage, wie in Rapid(ABB IRC5)???
    Hilde wäre super. :hilfe:


    Pascal

  • ANZEIGE
  • Beim ABB würde ich anders vorgehen:
    erst einmal würde ich eine spezielle Routine erstellen z.B.:
    Die kannst Du behandeln wie eine normale Bewegungsinstruktion MoveL nur mit dem unterschied das Du deiner Variablen
    nActPos den übergebenen Wert mit gibst:
    z.B.:
    SMoveL 20,p20_1,vmax,z200,tGreifer\WObj:=wAblage;


    Die Zahl 20 nach der "SMoveJ" wird in die nActPos, einer globalen Variablen geschrieben die immer wieder Abgefragt werden kann im Programm.
    Bei Zwischenpunkten würde es folgendermaßen Aussehen können z.B.:


    SMoveL 229901, *, vmax, z200, tGreifer\WObJ:=wAblage;


    229901 bedeutet von der Endposition "p22" zur Endposition "p99", (Homeposition) , wäre das die erste Hilfsposition. Somit kann das bei einer Grundstellungsfahrt von irgendwoher definiert passieren da der Roboter anhand des Zahlenwertes weiß welches seine letzte Aktion war.


    !**********************************************************
    !* Procedure SMoveL() *
    !* *
    !* Linear move of robot with saving a number related *
    !* to the position *
    !* *
    !* Globale variables: num nActPos *
    !* Input parameters: num ActPos *
    !* robtarget ToPoint *
    !* speeddata Speed *
    !* zonedata Zone *
    !* tooldata Tool *
    !* Optionale parameter: wobjdata Wobj *
    !**********************************************************
    PROC SMoveL(
    num ActPos,
    robtarget ToPoint,
    speeddata speed,
    zonedata zone,
    INOUT tooldata tool
    \INOUT wobjdata WObJ)


    MoveL ToPoint,speed,zone,tool\WObj?WObJ;
    nActPos:=ActPos;
    BACKWARD
    MoveL ToPoint,speed,zone,tool\WObj?WObJ;
    nActPos:=ActPos;
    ENDPROC


    Mit anderen Move-Instruktionen kann natürlich genauso verfahren werden.


    Hoffe es hilft Dir ein wenig.


    Sven

    Wer nichts macht, macht keine Fehler!

    Wer keine Fehler macht, kann nichts daraus lernen!

    Wer nichts lernen kann, kann sich nicht weiterentwickeln!

    Wer sich nicht entwickelt, geht unter!

  • Hallo,


    bei der Lösung von Sven wird die Positionsnummer nicht beim Erreichen der Roboterposition zugewiesen (triggern), sondern er weist der Positionsvariablen bereits den neuen Wert zu, sobald die Instruktion ausgeführt wurde.
    Aufgrund der Rechnervoreilung werden bereits mehrere Position vorverarbeitet, so dass die Positionsvariable nicht den zur aktuellen Position gehörenden Wert beinhaltet.


    Bei der ABB Steuerung gibt es leider keine Möglichkeit direkt eine Variable zu triggern, dies ist nur über einen Umweg z.B. durch Aufruf einer Triggerinterruptroutine möglich. Diese kann z.B. über die Instruktion TriggL bzw. MoveLSync aufgerufen werden.


    Bei MoveLSync kann die Routine direkt in der Bewegungsinstruktion angegeben werden.


    Beispiel:
    MoveLSync p10,v1000,z10,tGreifer,"SyncRoutine";


    PROC SyncRoutine()
    nActPos:=10;
    ENDPROC


    Mit dieser Methode könnte man jetzt die verschiedenen Positionsvariablen zuweisen, wobei man sich aber noch einen intelligenten Algoryhtmus ausdecken muss um nicht für jede Positionsnummer eine eigene Routine anlegen zu müssen.


    Um den Roboter im Fehlerfall gezielt nach Hause fahren zu können, bietet ABB die Option "HomeposRunning" an, bei der zum einen für jede Position eine Positionszuweisung über eine Positionstriggerung erfolgt. Zum anderen beinhaltet diese Option bereits die Möglichkeit über eine spezielle Strategie positionsabhängig in die Grundstellung zu fahren.


    Gruß
    Micky

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind. (Albert Einstein)

  • Ja die Idee mit der MoveLSync kam mir auch, aber hier können keine Routinen mit Übergabeparameter eingesetzt werden somit benötigt man ja für jede Position eine eigenen Routine und das ist schon ein bisschen doof. Das Thema trifft aber auch auf den Trigger in Bezug auf die Aktivierung eines Interrupts zu.
    Zum anderen Thema muss ich zu meiner Überraschung eigentlich sagen das ich damit bis dato noch nie so wirklich ein richtiges Problem damit hatte. Aber systemtechnisch und theoretisch hat Micky da natürlich vollkommen recht. Der Vorlaufzeiger sollte diesbezüglich schon Schwierigkeiten machen. :denk:


    Aber ansonsten sehe ich bei ABB keine so einfache Möglichkeit wie beim KUKA, auf den ersten Blick. :zwink:


    Sven

    Wer nichts macht, macht keine Fehler!

    Wer keine Fehler macht, kann nichts daraus lernen!

    Wer nichts lernen kann, kann sich nicht weiterentwickeln!

    Wer sich nicht entwickelt, geht unter!

  • Hallo nochmals,


    interresante Vorschläge. Vielen Dank für die Anregungen.
    Option Homeposrunning hört sich nach mehr Zahlen(Geld) an. Gibt es denn keine Möglichkeit sich solch eine
    Trigger-Struktur selber zu schreiben die mir dann eine Variable beschreibt?


    Oder anderer Vorschlag:
    Wenn ich zur Schaltaktion des Triggers eine Routine aufrufen kann, ist es dann möglich, aus einer Systemvariablen die Aktuelle Position, damit meine ich die Positionsbezeichung als String, auszulesen?



    Danke schon mal :danke:


    Pascal

    Einmal editiert, zuletzt von Catamanta ()


  • [...]Gibt es denn keine Möglichkeit sich solch eine Trigger-Struktur selber zu schreiben die mir dann eine Variable beschreibt?[...]


    Nein, zumindest nicht in der Form wie bei KUKA, weil man beim (ABB-)Triggern nicht direkt eine Anweisung angegeben
    kann die ausgeführt werden soll, sondern "nur" eine gesamte Interrupt-Routine (bei TriggInt).
    Und einer Interrupt-Routine kann man logischerweise keine Parameter übergeben...
    Im Übrigen ist die Verwendung eines Trigger-Interrupts per TriggInt oder eines MoveXSync (bezogen auf die Aufgabenstellung)
    identisch. Beim MoveXSync wird die angegebene Routine in der Mitte der Bahn ausgeführt, beim TriggInt läßt sich dagegen
    noch genauer spezifizieren wo bzw. wann der Trigger (bezogen auf Start- oder Endpunkt) ausgelöst werden soll.



    [...]Wenn ich zur Schaltaktion des Triggers eine Routine aufrufen kann, ist es dann möglich, aus einer Systemvariablen die Aktuelle Position, damit meine ich die Positionsbezeichung als String, auszulesen?[...]


    Nein, auch das nicht.
    Die aktuelle TCP-Position läßt sich natürlich ermitteln, aber nicht den Bezeichner/Namen der aktuellen bzw. zuletzt verwendeten
    Position. Wüßte auch nicht wie das gehen sollte wenn man z.B. direkt zu einer Position verfährt die direkt im Verfahrbefehl
    angegeben ist, also gar keinen Namen hat.
    (MoveL [[-19.08,-343.42,-76.86],[0.122998,0.007122,-0.002962,-0.992377],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]]...)


    Gruß
    rmac

  • Tja Leute,


    dann sag ich mal vielen Dank für Eure Behmühungen das Problem zu lösen. Sieht mir nicht nach gut durchdachtem Konzept seitens ABB aus. Werd wohl hergehen müssen u. mir für jede Position ein Signal deklarieren mit dem ich dann in einem Hintergrundtask( wie sps.sub bei KUKA) in Abhängigkeit des Signals eine Positionsnummer generiere. Ist zwar ein bisschen Schreibarbeit, aber so gehts auch.


    Mal was anderes: Was wenn ich mal wie bei meinem letzten Auftrag ca. 1700 E/A´s über den Profibus schaufeln muss. Bei KUKA schreibe ich die Langtexte mit Excell u. erzeuge dann eine Textdatei die ich dann in der BOF über das Inbetriebnahmemenü "Langtexte" laden kann. Aufwand ca. 2 Stunden.


    Geht das bei ABB auch so ähnlich, oder muss ich mir da 3 Tage für Zeit nehmen?? :denk:


    Liebe Grüße


    Pascal

  • Nochmal was zur ursprünglichen Problematik zu Beginn des Threads:


    1. Das Problem mit dem Vorlauf bei den Positions-Nummern ließe sich (z.B.) durch einen FIFO (FirstIn/FirstOut)
    als Ringpuffer umgehen. Schreiben und Lesen sind dann unabhängig voneinander.
    Funktioniert ungefähr so:
    - vor jedem Verfahrbefehl wird die entsprechende Pos.-Nr in den FIFO geschrieben
    - in der Sync-Routine wird die entsprechende letzte Pos.-Nr (für den gerade aktiven, synchronen Verfahrbefehl) aus dem FIFO
    gelesen



    Bemerkungen hierzu:
    - Puffergröße von 10 sollte wohl ausreichen, da der Vorlauf ja nicht mehr als 10 Verfahrbefehl voreilt (denke ich)
    - BACKWARD-Handling müßte noch eingebaut werden wenn gewünscht/notwendig
    - Zus. Plausibilitätsprüfungen sollten/könnten noch eingebaut werden was die Gültigkeit der FIFO-Ptr. angeht, das hab ich
    mir jetzt gespart.



    2. Um zu Ermitteln in welcher Entfernung man sich zu einer benannten Position befindet (z.B. für besagte Rückzugsstrategie)
    könnte man folgendermaßen vorgehen:


    Bemerkungen hierzu:
    - je nach Aufgabenstellung sollte man den Daten-Suchbereich einschränken (z.B. nur in bestimmten Modulen)
    - die Suche funktioniert NICHT in Arrays, d.h. funzt nur bei Robtargets in "Einzel"-Const/Var/Pers
    - ggfls. müßten noch Werkobjekt und/oder Tool berücksichtigt werden


    Wie immer: alles nicht getestet....also keine Gewähr :pfeif:


    Gruß an Hilde (unbekannterweise) :zwink:
    rmac

    Einmal editiert, zuletzt von rmac ()

  • Hallo Catamanta,


    also EA`s über Exel in eine .CFG Datei schaufeln funktioniert so nich bei ABB. Es sei den Du schreibst dir Script was das erledigt. Kenne auch mehrere Systeme, aber das vom ABB ist mir persönlich am übersichtlichsten. Ist aber definitiv Geschmackssache, wie überall im Leben!!! :fluch: Ich denke die Lösungen die dir angeboten wurden gehen schon in die richtige Richtung. Du könntest aber auch dir 2 Moveinstruktion schreiben. Eine für die Vorwährtsabarbeitung und eine für die Rückwärtsabarbeitiung. Ist auch nur ein Gedanke, aber ich würde mir jeweils eine Array mit zB.30-50 Stellen für Positionen,Tools,Werkobjekte anlegen und dann über die Instruktion Storepath(schau mal in der Doku nach) die Sache erledigen. In der Vorwährtsbewegung müsstest Du dir bloss die Positionen + Tools + etc in den Arrays speichern und bei der Rückwärtsabarbeitung nur Rückwärts aufrufen. Müsste auch relativ sicher sein da Du dir ja alle relevanten Daten wie Pos und Tools abspeicherst. Ist aber auch nur so ein Denkanstoss


    Gruß...

  • Hallo bin neu hier, bin SPS Programmierer und programmiere gerade zum ersten Mal ABB Roboter IRB 4400
    mit IRC5 Steuerung. Das ganze ist ein Klebeanlage bei der in Magazinen Teile, auf denen vorher Kleber aufgebracht wurde, verpresst werden. Da der Roboter fast im gesamten Arbeitsraum hantiert, will der Kunde eine automatische Grundstellungsfahrt. Jetzt würde mich schon interessieren wie ihr das so handhabt. Ich habe zurzeit eine Fehlerbehandlung damit der Roboter mittels Pfadaufzeichnung in den einzelnen Station bei einen Fehler wieder herausfährt in die Vorposition und danach kann mit der Starttaste der Vorgang durch die Pfadaufzeichnung vorwärts an dem Punkt wieder gestartet werden. Aber wie ich die automatische Grundstellungsfahrt realisieren soll will mir im Moment noch nicht einfallen. Es muss doch auch eine Möglichkeit geben ohne die Option Homeposrunning. Ein Ansatz von mir wäre gewesen daß wenn ein gültige Pfadaufzeichnung esxistiert diese gespeichert wird, diese rückwärts abgefahren wird bis zu jeweiligen Vorposition
    und von dieser Vorposition ist es gefahrlos möglich in die Grundstellung zu fahren. Was passiert aber bei Spannungsausfall oder bei aus-/einschalten oder Auto->Hand->Auto ist es dann nöch möglich auf den gespeicherten Pfad zu zugreifen? Wäre für weiter Denkanstösse dankbar..


    Gruß Daniel...

Hilfe und Support für ABB Roboter Programmierung, Konfiguration, Inbetriebnahme finden Sie hier im ABB Roboter Forum. ABB Rapid Programmierung ist einfach, die Roboterforum Community hilft sehr gerne.

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