Hallo zusammen,
seit 1 Woche arbeiten wir in einem Projekt bei dem es unter anderem auch darum geht einen Roboter zu programmieren.
Modell: KUKA KR5 sixx R850n
Nun zu meinen Fragen:
1. Das Problem ist, das sich der Roboter immer im Waitbefehl im zweiten Unterprogramm aufhängt. Da sich unsere Programmierkenntnisse bis jetzt auf das Minimum beschränken, denke ich das der Fehler in der Syntax liegt.
2. Wie wird in KRL eine Motorspindel angesprochen? Nehme an über einen Outputbefehl, aber auch hier habe ich keine Ahnung von der Syntax.
3. Wie lässt sich der Not-Aus-Schalter an der Roboterbedienung mit der Steuerung der Motorspindel verknüpfen, damit diese ebenfalls bei Betätigen des Schalters aufhört zu drehen?
DEF bearbeitung_v1( )
;----- Initialisierung -----
;FOLD INI
;FOLD BASISTECH INI
GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
INTERRUPT ON 3
BAS (#INITMOV,0 )
;ENDFOLD (BASISTECH INI)
;FOLD USER INI
;Make your modifications here
$BASE = BASE_DATA[6]
$TOOL = TOOL_DATA[4]
;ENDFOLD (USER INI)
;ENDFOLD (INI)$BASE = BASE_DATA[6]
$APO.CDIS = 0.4
;FOLD Versuchsparameter
;Versuchsparameter [Versuch, Paramerter]
;debei gilt:Parameter 1 = Bohrung
; Parameter 2 = Probe
; Parameter 3 = Vorschub
; Parameter 4 = Ganghöhe
; Parameter 5 = Drehzahl
Versuchs_Para[1,1] = 1
Versuchs_Para[1,2] = 1
Versuchs_Para[1,3] = 0.02
Versuchs_Para[1,4] = 0.2
Versuchs_Para[1,5] = 7500
Versuchs_Para[2,1] = 11
Versuchs_Para[2,2] = 1
Versuchs_Para[2,3] = 0.02
Versuchs_Para[2,4] = 0.2
Versuchs_Para[2,5] = 7500
Versuchs_Para[3,1] = 21
Versuchs_Para[3,2] = 1
Versuchs_Para[3,3] = 0.02
Versuchs_Para[3,4] = 0.2
Versuchs_Para[3,5] = 7500
Versuchs_Para[4,1] = 23
Versuchs_Para[4,2] = 4
Versuchs_Para[4,3] = 0.005
Versuchs_Para[4,4] = 0.275
Versuchs_Para[4,5] = 13000
;ENDFOLD
Ziel = $NULLFRAME
XFahrt = $NULLFRAME ;für die Fahrt an den Rand der Bohrung
XFahrt.X = r
;--------- SAK Fahrt ---------------
PTP {E6AXIS: A1 0,A2 -90, A3 90, A4 0, A5 -10,A6 0, E1 0, E2 0, E3 0} ; SAK fahrt
$VEL.CP = 0.1
LIN Home1 C_DIS
;------- Kontrollfahrt --------
;FOLD Kontrollfahrt
LIN {POS:X 12,Y 7,Z 5}
$VEL.CP = 0.05
LIN {POS:X 12,Y 7,Z 0}
HALT
$VEL.CP = 0.1
LIN {POS:X 12,Y 7,Z 5}
LIN {POS:X 59,Y 97,Z 5}
$VEL.CP = 0.05
LIN {POS:X 59,Y 97,Z 0}
HALT
$VEL.CP = 0.1
LIN {POS:X 59,Y 97,Z 5}
LIN Home1 C_DIS
;ENDFOLD
;------- Bearbeitung Probe --------
FOR I = 1 TO 3 ;Auswahl der Versuchsnummer
K2 = Versuchs_Para[I,2]
SWITCH K2
CASE 0
GOTO Endprog
CASE 1
$BASE = BASE_DATA[6]
CASE 2
$BASE = BASE_DATA[7]
ENDSWITCH
K=Versuchs_Para[I,1]
SWITCH K
CASE 1,2,3,4,5,6,7,8,9,10
Bohrloch = ErsteBohrung[1]
Bohrloch.y = Bohrloch.y + 10*(K-1)
II = 1
r_bohr = r2;
CASE 11,12,13,14,15,16,17,18,19,20
Bohrloch = ErsteBohrung[2]
Bohrloch.y = Bohrloch.y + 10*(K-11)
II = 2
r_bohr = r3;
CASE 21,22,23,24,25,26,27,28,29,30
Bohrloch = ErsteBohrung[3]
Bohrloch.y = Bohrloch.y + 10*(K-21)
II = 3
r_bohr = r4;
ENDSWITCH
MSG_Bohr(r_bohr)
LIN Bohrloch ;Fahrt zum Ausgangspunkt
AnfangPos = Bohrloch
AnfangPos.z = AnfangPos.z - AStrecke[II] ; Fahrt ins Bohrloch
Ziel = AnfangPos
LIN AnfangPos
LIN_REL XFahrt; Fahrt an Anfangsposition
$VEL.CP = Versuchs_Para[I,3] ;Auswahl der Bearbeitungsparameter
GangH = Versuchs_Para[I,4]
AnzahlPunkte = ppk * Hoehe / GangH ;Anzahl der Helixpunkte
Drehzahl = Versuchs_Para[I,5]
phi=0
MSG_Dreh(Drehzahl)
FOR III = 1 TO AnzahlPunkte ; Helixbewegung
phi= III*360/ppk
Ziel.X= AnfangPos.x +r*COS(phi)
Ziel.Y= AnfangPos.y -r*SIN(phi)
HR1=1-(r1/r_bohr*cos(phi))*(r1/r_bohr*cos(phi)) ;Hilfsrechnung
HR2=r_bohr*(SQRT(HR1)-1)-(GangH/ppk)*III
Ziel.Z= AnfangPos.Z + HR2
LIN Ziel C_DIS
ENDFOR
EndPos = AnfangPos ; Fahrt in Bohrlochmitte
EndPos.z = EndPos.z - Hoehe
LIN EndPos
HALT ; Spindel aus
$VEL.CP = 0.1
LIN Bohrloch ;Fahrt aus dem Bohrloch
Endprog:
ENDFOR
$VEL.CP = 0.1
LIN Home1
END
;--------------- Unterprogramme --------------------
; Unterprogramm Radiusausgabe
DEF MSG_Bohr(r_bohr:IN)
DECL INT r_bohr
DECL MSG_T EMPTY_MSG
EMPTY_MSG={MSG_T:VALID FALSE,RELEASE FALSE,TYP #NOTIFY,MODUL[]" ",KEY[]" ",PARAM_TYP #VALUE,PARAM[]" ",DLG_FORMAT[]" ",ANSWER 0}
$MSG_T=EMPTY_MSG
$MSG_T.MODUL[]="USER"
SWITCH r_bohr
CASE 7
$MSG_T.KEY[]="Bohrungsradius 7"
CASE 9
$MSG_T.KEY[]="Bohrungsradius 9"
CASE 12
$MSG_T.KEY[]="Bohrungsradius 12"
ENDSWITCH
$MSG_T.PARAM_TYP=#VALUE
$MSG_T.TYP=#QUIT
$MSG_T.VALID=TRUE
WAIT SEC 0.2
WHILE $MSG_T.VALID
WAIT SEC 0.05
ENDWHILE
END
; Unterprogramm Drehzahl
DEF MSG_Dreh(Drehzahl:IN)
DECL INT Drehzahl
DECL MSG_T EMPTY_MSG
EMPTY_MSG={MSG_T:VALID FALSE,RELEASE FALSE,TYP #NOTIFY,MODUL[]" ",KEY[]" ",PARAM_TYP #VALUE,PARAM[]" ",DLG_FORMAT[]" ",ANSWER 0}
$MSG_T=EMPTY_MSG
$MSG_T.MODUL[]="USER"
SWITCH Drehzahl
CASE 5000
$MSG_T.KEY[]="Drehzahl 5000 einstellen, dann quittieren"
CASE 6000
$MSG_T.KEY[]="Drehzahl 6000 einstellen, dann quittieren"
CASE 7500
$MSG_T.KEY[]="Drehzahl 7500 einstellen, dann quittieren"
CASE 9000
$MSG_T.KEY[]="Drehzahl 90000 einstellen, dann quittieren"
CASE 10000
$MSG_T.KEY[]="Drehzahl 10000 einstellen, dann quittieren"
ENDSWITCH
$MSG_T.PARAM_TYP=#VALUE
$MSG_T.TYP=#QUIT
$MSG_T.VALID=TRUE
WAIT SEC 0.2
WHILE $MSG_T.VALID
WAIT SEC 0.05
ENDWHILE
Display More
Wie gesagt bleibt er in der Vorletzten Zeile hängen und wir können uns das nicht erklären
Danke schonmal und Gruß