BASE verschieben bei H-Wender

  • Hallo zusammen, ich bin relativ neu hier im Betrieb und habe folgendes Problem : wir haben hier Team Roboter KRC4 (Master/Slave) mit jeweils einem großen H-Wender und 2 ext. Achsen. Alle 3 ext. Achsen sind elektrisch. Bei den wechselnden Vorrichtungen auf den 2 ext. Achsen soll immer die BASE neu gemessen werden, sobald die Vorrichtungen gerüstet werden. Diese Base wird über "Inbetriebnahme-Vermessen-externe Kinematik-Offset" ermittelt. Master und Slave werden in der selben Abfolge der 3 Messpunkte durchgeführt. Soweit,sogut.....

    Jetzt kommt die von KUKA eingepflegte "WENDER" Funktion dazu , welche bei jeden Drehen der ext. Achse (Kinematik), die in den Bearbeitungsprogrammen verwendete BASE (in unserem Fall Base1) neu berechnet und dementsprechend verschiebt. Bei den Master Programmen ist das kein Problem, allerdings bei den Slave Programmen. Der Slave bekommt vom Master über die Wender Funktion nämlich auch neue BASE1-Daten. Diese sind aber falsch berechnet.......


    Hier mal ein kleiner Auszug aus der KUKA-Wender Funktion :


    ;Roboterseitige Drehachse verfahren

    ;Hierbei wird auch die Base 1 eintsprechend gesetzt.

    ; ->Der Slave Roboter wird hier auch abgefragt

    Global DEF MoveDrehachse(Winkel : IN)

    DECL Int Winkel

    DECL E6Axis newPos

    DECL FRAME TransWender


    TransWender = $NULLFRAME


    $Act_Base = 1

    $Base = $Nullframe


    ;Warte darauf, das der Slave auch die Drehung anfordert

    RobTeamSyncStart("WinkelStart_" ,Winkel)


    wait for true


    ;aktuelle Position speichern in Newpos

    newPos=$axis_act


    ;Neue Position schreiben, abhängig von der aktuellen Seite

    SWITCH ActWenderSeite()

    CASE #A

    $ASYNC_AXIS = 'B101'

    $ACC_EXTAX[2] = 100

    $VEL_EXTAX[2] = 100


    newPos.E2 = -170 - Winkel

    if (newPos.E2 - 1) < $SOFTN_END[8] THEN

    newPos.E2 = 190 - Winkel

    endif

    TransWender.A = newPos.E2

    BASE_DATA[1] = MACHINE_DEF[3].Root : TransWender : BASE_DATA[2]


    ;Setze die Base auch auf dem Slave-Robot

    Offset = 0

    wait for STRCLEAR(RoboTeamCommand[])

    RoboTeamCommand[] = "BASE_DATA[1] = MACHINE_DEF[2].Root : {x 0, y 0, z 0,a "

    SWRITE(WinkelString[],STATE,Offset,"%7.3f",TransWender.A)

    Offset = STRADD(RoboTeamCommand[],WinkelString[])

    Offset = 0

    Offset = STRADD(RoboTeamCommand[],",b 0, c 0} : BASE_DATA[2]")

    wait for RemoteCmd ($COOP_KRC[2].IP_ADDR[], RoboTeamCommand[])


    CASE #B

    $ASYNC_AXIS = 'B011'

    $ACC_EXTAX[3] = 100

    $VEL_EXTAX[3] = 100

    newPos.E3 = 190 - Winkel

    TransWender.A = newPos.E3

    BASE_DATA[1] = MACHINE_DEF[4].Root : TransWender : BASE_DATA[3]


    ;Setze die Base auch auf dem Slave-Robot

    Offset = 0

    wait for STRCLEAR(RoboTeamCommand[])

    RoboTeamCommand[] = "BASE_DATA[1] = MACHINE_DEF[3].Root : {x 0, y 0, z 0,a "

    SWRITE(WinkelString[],STATE,Offset,"%7.3f",TransWender.A)

    Offset = STRADD(RoboTeamCommand[],WinkelString[])

    Offset = 0

    Offset = STRADD(RoboTeamCommand[],",b 0, c 0} : BASE_DATA[3]")

    wait for RemoteCmd ($COOP_KRC[2].IP_ADDR[], RoboTeamCommand[])

    ENDSWITCH


    Bei den "Setze die BASE auch an den Slave Roboter"-Zeilen sind anscheinend Fehler.....

    Da wir die Bearbeitungsprogramme an verschiedenen H-Wender Team Robotern über den Server hin und her schuppsen, schleppen wir die Fehler von einem Robi zum nächsten und zurück.

    Bin für jeden Tipp dankbar


    Mfg

  • Schritt für Schritt zum Roboterprofi!
  • Oh, da verliert man leicht den Überblick.

    Ich würde an Deiner Stelle in den Maschinendaten erst einmal nachschauen, ob das alles so sortiert ist, wie Ihr Euch das denkt.

    Für den Master ist die externe Achse 2 auf Seite A und die Kinematikwurzel Machine_Def[3], und die externe Achse 3 auf Seite B hat Machine_Def[4].

    Der Slave hat die Achse auf Seite A hingegen auf Machine_Def[2] und die auf Seite B auf Machine_Def[3] liegen. Nicht, dass da beim Einmessen schon was vertüddelt wird...


    Die Weitergabe und Berechnung sieht eigentlich schlüssig aus. Die Frage ist ja immer, was genau "falsch" ist. Da müsstest Du schon ein paar Infos mehr raushauen.


    Übrigens gibt es in der Werkzeugleiste oben beim Editieren des Beitrages den Button "Code" </>. Der ist beim Posten von Programmbeispielen ungeheuer hilfreich, um beim Betrachter Augenkrebs zu vermeiden.

    Code
    Beispielcode
        mit Einrückungen
    und allem;


    Grüße,

    Michael

  • Hallo und Danke für die Antwort....

    Noch eine kurze Frage zwischendurch:

    ;Setze die Base auch auf dem Slave-Robot

    Offset = 0

    wait for STRCLEAR(RoboTeamCommand[])

    RoboTeamCommand[] = "BASE_DATA[1] = MACHINE_DEF[2].Root : {x 0, y 0, z 0,a "

    SWRITE(WinkelString[],STATE,Offset,"%7.3f",TransWender.A)

    Offset = STRADD(RoboTeamCommand[],WinkelString[])

    Offset = 0

    Offset = STRADD(RoboTeamCommand[],",b 0, c 0} : BASE_DATA[2]")

    wait for RemoteCmd ($COOP_KRC[2].IP_ADDR[], RoboTeamCommand[])


    Der in dem Programmauszug schwarz markierte Bereich scheint "auseinandergerissen" zu sein. Oder ist das wohl Absicht ? Diese Zeilen verursachen zumindest keine Fehler bei der Abarbeitung......

    MfG

  • Nee, das ist schon okay. Die schwarze Zeile erzeugt den vorderen, neutralen Teil des Strings. Die nächste macht aus TransWender.A einen String, die darauf hängt ihn an ersteren, und die vorletzte fügt noch den hinteren, ebenfalls wieder neutralen Teil hinzu. Am Ende steht alles in einer Stringvariable namens "RoboTeamCommand[]", die auch sogleich gesendet wird.

    Da kannste beim Debuggen gleich ansetzen und Dir diese Variable auf dem Master anzeigen lassen, wenn hinter dem a vom Frame was anderes steht als in TransWender.a (numerisch), dann wäre das schon der Fehler.

    Im nächsten Schritt würde ich dann testweise auf dem Slave BaseData[2] und [3] mal auf 0 setzen oder im Kommando auf dem Master auf einen Nullframe verweisen. Theoretisch solltest nach Ausführung des Kommandos in BaseData[1] ja dann tatsächlich der Frame in machine_def[2].root stehen mit der passenden zusätzlichen Verdrehung in a, das kann man auch ohne große Mathematik durch angucken feststellen.

    Wenn das der Fall ist, dann liegt das Problem entweder im BASE_DATA[2], oder man hat einen konzeptuellen Fehler drin. Arbeiten beide Roboter auf derselben Seite des Wenders?

  • Hallo ,

    ja die beiden Roboter arbeiten auf derselben Seite des Wenders.


    Die Problematik ist echt schlecht darzustellen, aber ich versuche es mal:

    Der Fehler könnte aber auch in der BASE Vermessung ("Inbetriebnahme-Vermessen-externe Kinematik-Offset" ) des Slave Roboters selber liegen. Mir ist jetzt aufgefallen, das teilweise das Koordinatensystem des Fußpunktes der ext. Kinematik um 180° verdreht ist. (x+ wird zu x- ; Y+ wird zu Y-). Wie kann das kommen?

    Dann ist es natürlich auch logisch , das die eingemessene BASE ab und an verdreht ist.


    MfG

  • Wenn X und Y genau entgegengesetzt sind, dann ist das selbst schon eine Drehung um A 180°. Darauf dann nochmal einen Offset...

    Hier ist jetzt die Frage, was man sich initial dabei gedacht hat. Das kann ich aus der Ferne und ohne weitere Details nicht sagen - falls sich die Roboter z. B. genau gegenüberstehen, wäre darin eine gewisse Logik, dann geht das Vermessen aber, wie Dir jetzt aufgefallen ist - nicht auf die Art.

    Ich denke, in der Gedankenkette, die sich dort jemand zum Vermessungsprocedere gemacht hat, ist eine Rekursion. Oder es fehlt eine Bedingung wie "fahre vor dem Einmessen die externe Achse immer erst auf denundden Winkel".


    Grüße,

    Michael

  • Hallo nochmal,

    danke für die Unterstützung......


    "Oder es fehlt eine Bedingung wie "fahre vor dem Einmessen die externe Achse immer erst auf denundden Winkel"." , den Gedanken hatte ich auch schon-wie kann man so etwas programmieren?

    Mfg

  • Besteht keine Anlagendokumentation, wo das vorgehen exakt beschrieben ist ?

    Anlagenbauer kontaktiert ? Was meint dieser ?

    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