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