Beiträge von popoff_1

    Hallo, ich habe bezüglich eines aktuellen Projektes eine Frage:


    Arbeitet die Robotersteuerung von KUKA eigentlich in Echtzeit? Also wenn ich eine Bahn von A nach B Abfahren möchte arbeitet die Kuka Steuerung die Bahnplanung in Echtzeit ab?

    Denn was ich so erfahren habe, arbeitet der Roboter das Programm in der KRL-Sprache nicht in Echtzeit ab. KUKA KRL läuft auf Windows und das ist ja kein Echtzeitbetriebsystem.


    Es gibt aber auch das RSI das die Signale von z.b einem Kraft/Momenten Sensor in Echtzeit verarbeiten kann und in Echtzeit reagieren kann.

    Das RSI läuft auf VxWorks und ist somit Echtzeitfähig.


    Also läuft die generelle Bahnplanung der KUKA Steuerung in Echtzeit ab?

    Vielen Dank. Nach meinem Wissen verwendet ABB Unit Quaternions um Drehungen zu berechnen.


    Ich habe irgendwo mal aufgeschnappt dass die Berechnungen mit Quaternionen viel effizienter sind bzw. weniger Rechenintensiv sind als Euler Winkel. Also wenn ich Drehungen von mehreren verktetteten Koordinadensysteme berechnen will. Kann man das so Pauschal sagen?

    Hallo, wie ist denn die E6POS bei KUKA definiert?

    Die XYZ translationen sind mir bekannt. Aber wie werden die Drehungen bei KUKA dargestellt. Also werden diese mit den Euler Winkel gerechnet oder werden Drehungen bei KUKA mittels Quaternionen dargestellt? Auf den ersten Blick müssten diese Drehungen ABC ja Drehungen mittels Euler-Winkeln sein?


    Code
    DECL E6POS XP7={X 84.8027115,Y 107.783455,Z 12,A 179.863617,B -0.384050041,C 179.977875,S 2,T 35,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0}

    oder da wo du versuchst es anzufahren hast du falsches tool und base angewählt.

    das kann man aus dem Codeschnipsel da nicht erkennen der gesamte code wäre hier hilfreicher.

    Stimmt habe eine Neue LIN Bewegung angelegt und da war einfach ein anderes tool und base ausgewählt. Ich dacht immer dass diese die gleichen wären wenn ich in meinem Program drin bin. Auf jeden Fall hat es geklappt.

    Ich habe aktuell Probleme die gespeichterte Position $POS_INT wieder anzufahren.


    Dabei ging ich wie folgt vor:

    Ich habe eine andere Position E6POS hergenommen und mit copy&paste in das .dat file kopiert. Dann habe ich einfach den Namen geändert. Denn ich gehe davon aus dass alle Werte dann überschrieben werden:

    Code
    DECL E6POS ZLoch={X 124.358315,Y 146.740753,Z 377.216431,A 89.8801193,B -0.0398053862,C -179.512924,S 6,T 27,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0}


    Abspeicherung der Position in der .src Datei

    Code
    ZLoch = $POS_INT


    Dann habe ich versucht die Position mit LIN anzufahren:

    Code
    LIN ZLoch


    Aber da sehe ich dass dies irgend eine andere Position angefahren wird die nicht übereinstimmt mit der Position wo der Interrupt ausgelöst wurde. Somit stimmt die Position nicht. Ich verstehe nicht warum die Position bei &Pos_INT nicht genau wieder angefahren wird. Vermutlich mache ich beim abspeichern der Position $POS_INT was falsch.

    Hallo, der Interrupt funktioniert nun, dieser löst aus wenn das Teil sich 0,5mm unterhalb des Kontaktes sich befindet.


    Das Problem aktuell ist da dass der Roboter nicht sofort Stopp sondern ein wenig in xy nachfährt sodass das Bauteil nicht genau an dem Punkt stoppt wo der Interrupt ausgelöst wurde. Also er fährt ein bisschen nach.


    Das Teil befindet sich daher wieder ein bisschen ausserhalb der Bohrung. Hat jemand eine Idee wie man das Problem lösen kann?


    Und wie kann ich den CYCFLAG zurücksetzten wenn er einmal aktiviert wurde?

    Da ich aktuell nicht weiß was dieser Wert, siehe oben, darstellt wollte ich mal dies etwas anderes versuchen. $POS_INT erfasst ja die aktuelle Position. Kann ich da diesen Befehl nutzen um die Tiefe in Z zu überprüfen. Also die aktuelle Position wird Verglichen mit der aktuellen Position + tiefe.

    Variable tiefe wäre ja 0,5mm. Wenn dies der Fall ist soll der Interrupt auslösen. Kann dies funktionieren?


    Code
    $CYCFLAG[50]=($POS_INT.Z>$POS_INT.Z+tiefe)

    Ja wie es aussieht löst der interrupt nicht aus. Wenn ich die Variable tiefe mit 1mm initialisiere, ist es da egal ob die Zahl positiv oder negativ ist? Also wird da immer ein absoluter Betrag verwendet?


    Nein, ich habe dies nicht überprüft. Wie kann ich denn dies überprüfen?

    ich würde vorm einschalten des interrupts noch schauen ob die bedingung evtl schon gegeben ist dann musst du noch was machen weil der interrupt dann nicht mehr auslösen wird


    Meinst du dass ich direkt auf der Anzeige am Bedienpanel nachschaue ob die bedingung bereits gegeben ist? Ich glaube unter Anzeige Diagnose müsste dies ja dann aufscheinen

    Ok Danke für die Information. Kann ich da als Auslösebedingung eine Kraft oder eine bestimmte Tiefe eingeben? Also entweder würde ich als Auslösebedingung festlegen wenn die Z-Kraft Null wird oder wenn in Z einen Millimeter verfahren wurde. Wie gebe ich da diese Bedingung ein?

    Achso, dann ist es ok. Ich dachte nämlich dass dies ein Problem darstellt wenn der dritte Punkt etwas verschoben ist. Vielen Dank.


    Es handelt sich um eine reale Anlage. Die Sache ist dass sich an unserem KUKA Roboter keiner so wirklich auskennt und ich es mir alles im Selbststudium beibringen muss. Eine KUKA-Schulung habe ich leider auch nicht erhalten. Somit muss ich hier öfters mal nachfragen und mich in die Benutzerhandbücher von KUKA einarbeiten.

    Ok. Ab wann wird da dann aber die Bahn verfälscht? Der Endpunkt vom ersten Halbkreis dient ja als Startpunkt für den Neuen Halbkreis. Mich würde es interessieren wie genau diese verfälschung aussieht beim Übergang von einem Halbkreis zum nächsten größeren Halbkreis. Im Benutzerhandbuch steht dass beim Überschleifen einer CIRC Bewegung der Hilfspunkt genau angefahren wird. Dann erfolgt die verfälschung der Bahn nach dem Hilfspunkt?

    Habe dazu eine neue Skizze erstellt (meine Zeichenkünste haltet sich in Grenzen).

    Dann würde die verfälschte neue Bahn in etwa so aussehen?

    Ok, dann wenn ich dies richtig Verstehe brauche ich bei hintereinanderliegenden Kreissegmenten eine Überschleifung damit der Roboter nicht beim Übergang ins nächste Kreissegment stehen bleibt (damit er die nächste Bahn bereits im Voraus berechnet). Denn wenn ich keine Überschleifung mache bleibt er kurz stehen und fährt weiter. Eine Überschleifung gewährleistet also einen sauber Übergang zum nächsten Kreissegment?

    Noch eine Verständnisfrage: Wenn ich C_vel weglasse wird ja nicht überschliffen und der Roboter bleibt beim Übergang auf den nächsthöheren Halbkreis kurz stehen.


    Wenn ich also keine Überschleifung habe fährt der Roboter genau zu dem Endpunkt des Halbkreises stoppt kurz und verfährt den größeren Halbkreis ab. Wenn ich also eine Überschleifung verwende erkennt dann der Roboter automatisch dass der Halbkreis endet und fährt automatisch sanft weiter? Verstehe ich das richtig?


    Wie sieht da die Überschleifung genau aus? Habe versucht dies zu skizzieren. Fährt der Roboter bzw. TCP da bündig auf den nächsten Punkt des größeren Halbkreises weiter? Oder fährt er nur den Hilfspunkt genau an und verläst danach die genaue Bahn? Wie funktioniert das bei Kreisen genau, bin aus dem Benutzerhandbuch nicht recht schlau geworden.


    Vielen Dank