Hallo, Robot-Team,
Es geht um einen Kuka-Roboter mit einer uralt-Steuerung (KRC1). Mein Kollege bat mich telefonisch um Hilfe,weil er die Antriebe nicht einschalten kann.
Der Zustand ist folgender:
DRIVES_OFF = 1
DRIVES_ON = 1
Peri_Ready = 0
DRIVES_ON wird von der SPS automatisch auf 0 geschaltet, sobald die Rückmeldung Peri_Ready kommt.
Wovon hängt Peri_Ready eigentlich (außer Drives_off Und Drives_On) bei dieser alten Steuerung noch ab. Kann uns jemand weiterhelfen?
Posts by KoNo
-
-
Code
Display More&ACCESS RVO4 &REL 1 &PARAM DISKPATH = KRC:\R1\Program\C00 DEF c00_v_r_GET( ) ;FOLD INI;%{PE} ;FOLD BASISTECH INI GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( ) INTERRUPT ON 3 BAS (#INITMOV,0 ) INTERRUPT DECL 8 WHEN $IN[68] DO ABBRUCH() INTERRUPT ON 8 ;ENDFOLD (BASISTECH INI) ;FOLD SPOTTECH INI USERSPOT(#INIT) ;ENDFOLD (SPOTTECH INI) ;FOLD GRIPPERTECH INI USER_GRP(0,DUMMY,DUMMY,GDEFAULT) ;ENDFOLD (GRIPPERTECH INI) ;FOLD USER INI ;Make your modifications here ;ENDFOLD (USER INI) ;ENDFOLD (INI) BEWEGUNG() IF MSTOP==TRUE THEN RUE_RAUS() INTERRUPT ON 8 ENDIF END DEF BEWEGUNG() ;FOLD PTP HOME Vel= 100 % DEFAULT;%{PE}%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT $BWDSTART = FALSE PDAT_ACT=PDEFAULT FDAT_ACT=FHOME BAS (#PTP_PARAMS,100 ) $H_POS=XHOME PTP XHOME ;ENDFOLD TRIGGER WHEN DISTANCE=0 DELAY=0 DO ZRR=1 GRIP_VX_UNCLAMP() ;FOLD SPTP P1 Vel=100 % PDAT1 Tool[1]:GREIFER VX Base[1]:C00_120GRAD;%{PE}%R 8.3.40,%MKUKATPBASIS,%CSPLINE,%VSPTP_SB,%P 1:SPTP_SB, 2:P1, 3:, 5:100, 7:PDAT1 SPTP XP1 WITH $VEL_AXIS[1]= SVEL_JOINT( 100), $TOOL= STOOL2( FP1), $BASE= SBASE( FP1.BASE_NO),$IPO_MODE= SIPO_MODE( FP1.IPO_FRAME), $LOAD= SLOAD( FP1.TOOL_NO), $ACC_AXIS[1]= SACC_JOINT( PPDAT1), $GEAR_JERK[1]= SGEAR_JERK( PPDAT1) ;ENDFOLD TRIGGER WHEN DISTANCE=0 DELAY=0 DO ZRR=10 ; ABFRAGE TOR AUF ;FOLD WAIT FOR ( IN 112 'C00_Tor_ist_auf' );%{PE}%R 8.3.40,%MKUKATPBASIS,%CEXT_WAIT_FOR,%VEXT_WAIT_FOR,%P 2:, 4:, 5:$IN, 6:112, 7:C00_Tor_ist_auf, 9: WAIT FOR ( $IN[112] ) ;ENDFOLD ;FOLD WAIT FOR ( IN 124 'Spanner_C00_V_R_zu' );%{PE}%R 8.3.40,%MKUKATPBASIS,%CEXT_WAIT_FOR,%VEXT_WAIT_FOR,%P 2:, 4:, 5:$IN, 6:124, 7:Spanner_C00_V_R_zu, 9: WAIT FOR ( $IN[124] ) ;ENDFOLD ;######################################## ;FOLD SLIN OBEN CONT Vel=2 m/s CPDAT1 ADAT0 Tool[1]:GREIFER VX Base[1]:C00_120GRAD;%{PE}%R 8.3.40,%MKUKATPBASIS,%CSPLINE,%VSLIN_SB,%P 1:SLIN_SB, 2:OBEN, 3:C_SPL, 5:2, 7:CPDAT1, 8:ADAT0 SLIN XOBEN WITH $VEL=SVEL_CP( 2, , LCPDAT1), $TOOL=STOOL2( FOBEN), $BASE= SBASE( FOBEN.BASE_NO),$IPO_MODE=SIPO_MODE( FOBEN.IPO_FRAME), $LOAD=SLOAD( FOBEN.TOOL_NO), $ACC=SACC_CP( LCPDAT1), $APO=SAPO( LCPDAT1), $ORI_TYPE=SORI_TYP( LCPDAT1), $JERK=SJERK( LCPDAT1) C_SPL ;ENDFOLD TRIGGER WHEN DISTANCE=0 DELAY=0 DO ZRR=20 ;FOLD LIN M_P Vel=0.1 m/s CPDAT8 Tool[1]:GREIFER VX Base[2]:C02_105GRAD;%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:M_P, 3:, 5:0.1, 7:CPDAT8 $BWDSTART=FALSE LDAT_ACT=LCPDAT8 FDAT_ACT=FM_P BAS(#CP_PARAMS,0.1) LIN XM_P ;ENDFOLD ;######################################## ;FOLD LIN MITTE CONT Vel=0.1 m/s CPDAT2 Tool[1]:GREIFER VX Base[1]:C00_120GRAD;%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:MITTE, 3:C_DIS C_DIS, 5:0.1, 7:CPDAT2 $BWDSTART=FALSE LDAT_ACT=LCPDAT2 FDAT_ACT=FMITTE BAS(#CP_PARAMS,0.1) LIN XMITTE C_DIS C_DIS ;ENDFOLD TRIGGER WHEN DISTANCE=0 DELAY=0 DO ZRR=30 ;######################################## ;FOLD LIN UNTEN Vel=0.04 m/s CPDAT3 Tool[1]:GREIFER VX Base[1]:C00_120GRAD;%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:UNTEN, 3:, 5:0.04, 7:CPDAT3 $BWDSTART=FALSE LDAT_ACT=LCPDAT3 FDAT_ACT=FUNTEN BAS(#CP_PARAMS,0.04) LIN XUNTEN ;ENDFOLD ;FOLD WAIT Time=0 sec;%{PE}%R 8.3.40,%MKUKATPBASIS,%CWAIT,%VWAIT,%P 3:0 WAIT SEC 0 ;ENDFOLD ;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ; GREIFER ZU UND SPANNER OEFFNEN ;FOLD WAIT FOR ( IN 50 'GRE_VX_R_BTK' );%{PE}%R 8.3.40,%MKUKATPBASIS,%CEXT_WAIT_FOR,%VEXT_WAIT_FOR,%P 2:, 4:, 5:$IN, 6:50, 7:GRE_VX_R_BTK, 9: WAIT FOR ( $IN[50] ) ;ENDFOLD GRIP_VX_R_CLAMP() ;FOLD OUT 112 'C00 ROB IN POS' State=TRUE CONT;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VOUTX,%P 2:112, 3:C00 ROB IN POS, 5:TRUE, 6:CONTINUE CONTINUE $OUT[112]=TRUE ;ENDFOLD ;FOLD WAIT FOR ( IN 123 'Spanner_C00_V_R_auf' );%{PE}%R 8.3.40,%MKUKATPBASIS,%CEXT_WAIT_FOR,%VEXT_WAIT_FOR,%P 2:, 4:, 5:$IN, 6:123, 7:Spanner_C00_V_R_auf, 9: WAIT FOR ( $IN[123] ) ;ENDFOLD ;FOLD OUT 112 'C00 ROB IN POS' State=FALSE CONT;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VOUTX,%P 2:112, 3:C00 ROB IN POS, 5:FALSE, 6:CONTINUE CONTINUE $OUT[112]=FALSE ;ENDFOLD ;eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee ;FOLD LIN MITTE Vel=0.2 m/s CPDAT4 Tool[1]:GREIFER VX Base[1]:C00_120GRAD;%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:MITTE, 3:, 5:0.2, 7:CPDAT4 $BWDSTART=FALSE LDAT_ACT=LCPDAT4 FDAT_ACT=FMITTE BAS(#CP_PARAMS,0.2) LIN XMITTE ;ENDFOLD ;######################################## TRIGGER WHEN DISTANCE=0 DELAY=0 DO ZRR=20 ;FOLD LIN OBEN Vel=2 m/s CPDAT5 Tool[1]:GREIFER VX Base[1]:C00_120GRAD;%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:OBEN, 3:, 5:2, 7:CPDAT5 $BWDSTART=FALSE LDAT_ACT=LCPDAT5 FDAT_ACT=FOBEN BAS(#CP_PARAMS,2) LIN XOBEN ;ENDFOLD ;######################################## TRIGGER WHEN DISTANCE=0 DELAY=0 DO ZRR=10 ;FOLD SLIN P1 Vel=2 m/s CPDAT6 ADAT0 Tool[1]:GREIFER VX Base[1]:C00_120GRAD;%{PE}%R 8.3.40,%MKUKATPBASIS,%CSPLINE,%VSLIN_SB,%P 1:SLIN_SB, 2:P1, 3:, 5:2, 7:CPDAT6, 8:ADAT0 SLIN XP1 WITH $VEL=SVEL_CP( 2, , LCPDAT6), $TOOL=STOOL2( FP1), $BASE= SBASE( FP1.BASE_NO),$IPO_MODE=SIPO_MODE( FP1.IPO_FRAME), $LOAD=SLOAD( FP1.TOOL_NO), $ACC=SACC_CP( LCPDAT6), $ORI_TYPE=SORI_TYP( LCPDAT6), $JERK=SJERK( LCPDAT6) ;ENDFOLD ;######################################## TRIGGER WHEN DISTANCE=0 DELAY=0 DO ZRR=1 ;FOLD PTP HOME Vel= 100 % DEFAULT;%{PE}%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT $BWDSTART = FALSE PDAT_ACT=PDEFAULT FDAT_ACT=FHOME BAS (#PTP_PARAMS,100 ) $H_POS=XHOME PTP XHOME ;ENDFOLD END DEF ABBRUCH() INTERRUPT OFF 8; INTERRUPT AUSSCHALTEN BRAKE; BREMSEN MSTOP = TRUE; STOPMERKER SETZEN IF $IN[42] THEN TiG = TRUE ENDIF RESUME; ABBRECHEN DER INTERRUPTROUTINE END DEF RUE_RAUS() $out[68]=TRUE $OV_PRO = 10 WHILE ZRR > 0 IF ZRR== 30 THEN LIN XMITTE ZRR = 20 ENDIF IF ZRR== 20 THEN LIN XOBEN ZRR = 10 ENDIF IF ZRR== 10 THEN LIN XP1 ZRR = 1 ENDIF IF ZRR== 1 THEN PTP XHOME ZRR = 0 ENDIF ENDWHILE END
Dies wäre eine mögliche Lösung. Hier muss ein Interrupt programmiert werden (hier: Interrupt 8), der den Abbruch in die Wege leitet. Im Hauptprogramm wird das Programm BEWEGUNG aufgerufen, in dem das normale Programm abläuft. Bei einer Störung oder einem Abbruch wird von der SPS der Eingang 68 geschaltet und damit das Programm ABBRUCH eingeleitet.
Im Programm ABBRUCH wird der Merker MSTOP gesetzt, der in der SPS.SUB wieder zurückgesetzt wird, wenn der Roboter in Home steht. Das Programm BEWEGUNG wird abgebrochen. In der nächsten Zeile steht die IF-Bedingung und das Programm RUE_RAUS wird aufgerufen und ausgeführt, bis der Roboter in Home steht.
Das Ganze must du natürlich spezifisch für dein eigenes Programm anpassen.
Viel Spass
OLDDRAGON -
In T1 funktioniert es ja. Aber nicht in Automatik EXT, so wie es bei der ersten Anlage (0775) der Fall ist. Ich möchte einfach, dass nach dem Einschalten der Roboter in AutoEXT die Referenz anfährt.
-
Hallo, Forum,
Ich habe in einer seit einem Jahr bestehenden Anlage 2 Safe-Roboter stehen, die wunderbar funktionieren. Die masref_main wird im CELL zyklisch aufgerufen (nach Start und Übergabe einer gültigen Programmnummer). Nach einem Neustart der Anlage (Hauptschalter ein) läuft das System hoch, CELL wird angewählt und die Programme darin auch ausgeführt. (Anlage 0775)
In einer neuen Anlage, die ich bereits fertig programmiert habe, funktioniert dieses automatische Referenzfahren seltsamerweise nicht, obwohl das CELL ähnlich programmiert wurde. Hier wird ein Fehler generiert, der mich zum Referenzfahren in T1 auffordert. Ich weiß aber nicht, was ich hier anders gemacht habe. (Anlage C00)Roboter: KR20
Steuerung: KRC4-8.3.26
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Programmteil in beiden Anlagen:
DEF BREMSuREFTEST( )
masref_main()
braketestreq()
END
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Anlage 0775: BREMSuREFTEST wird nach Aufruf der Programmnummer - falls notwendig - ausgeführt: funktioniert
DEF CELL ( )
INIT
BASISTECH INIIF $IN[68] then
PRG_ABBRUCH()
ENDIF
CHECK HOME
HOME Vel= 100 % DEFAULT
AUTOEXT INI
LOOP
P00 (#EXT_PGNO,#PGNO_GET,DMY[],0 )
SWITCH PGNO ; Select with Programnumber;======================================
CASE 55; Vorrichtung 5: Seite B Serie
[size=4] BREMSuREFTEST()[/size]
P00 (#EXT_PGNO,#PGNO_ACKN,DMY[],0 ) ; Reset Progr.No.-Request
BAS(#TOOL,4)
BAS(#BASE,1)
WAIT SEC 0.5
Gcodeexecute("PROGRAMM_55.nc")
TOOLLAENGE()
HOME Vel= 100 % DEFAULT
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Anlage C00: BREMSuREFTEST wird nach Aufruf der Programmnummer - falls notwendig - ausgeführt: funktioniert NICHT - erzeugt Fehler: Referenztest in T1 durchführen.
DEF CELL ( )INIT
BASISTECH INI
CHECK HOME
HOME Vel= 100 % DEFAULT
AUTOEXT INI
LOOP
P00 (#EXT_PGNO,#PGNO_GET,DMY[],0 )
SWITCH PGNO ; Select with Programnumber;####################################
CASE 7; Wartungsstellung anfahren[size=4]
[/size]
[size=4] BREMSuREFTEST()[/size]
P00 (#EXT_PGNO,#PGNO_ACKN,DMY[],0 )
WARTUNGSSTELLUNG();####################################
CASE 11; TB_V_L_in C02 einlegen
[size=4] BREMSuREFTEST()[/size]
P00 (#EXT_PGNO,#PGNO_ACKN,DMY[],0 )
V_L_IN_C02()xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Gibt es einen Parameter, der sich auf die Referenzfahrt bezieht bzw. der mich zwingend auffordert, eine Referenzfahrt in T1 durchzuführen? Wenn ja, warum funktioniert es dann bei der ersten Anlage? -
Hallo, SJX,
Danke! Funktioniert wunderbar! -
Hallo, Robos,
ich habe in meiner sps.sub einige Positionsberechnungen, für die ich ein aktives TOOL benötige. Da jedoch beim Einschalten kein Tool aktiv ist, kommt es zu einer Fehlermeldung. Abhilfe: Tool manuell anwählen, SPS.SUB ab- und anwählen. OK!
Das kann ich aber dem Kunden nicht zumuten.
Kann man in der sps.sub ein Tool zuweisen? Wenn ja, dann wie? Immer wenn ich es versuche, tauchen wieder Fehlermeldungen auf.
Inhalt der sps.sub:
unterhalb der INI!Dann im LOOP:
;AUSGABE DER X- UND Y-POSITIONEN 0000000000000
IF $ACT_BASE > 0 THEN
$OUT[38] = TRUE
XMASS0 = $POS_ACT.X + $BASE.X
YMASS0 = $POS_ACT.Y + $BASE.Y
ELSE
$OUT[38] = FALSE
XMASS0 = $POS_ACT.X
YMASS0 = $POS_ACT.Y
ENDIFIF $ACT_TOOL > 0 THEN
; Falls sich das TOOL im BEREICH VORN befindet (OUT212):
IF $OUT[212]==TRUE THEN
IF $TOOL.x > 0.0 THEN
XMASS = XMASS0 * 1000.0
YMASS = YMASS0 * 1000.0
ENDIF
ENDIF
ENDIF
;00000000000000000000000000000000000000000000000
----------------------------------------------------------------------------------------------------------
Nach dem Speichern der SPS.SUB wähle ich sie zuerst wieder ab und dann wieder an. Es erscheint der Fehler:
$TOOL Variable schreibgeschützt in Modul BAS Satz 434Wer kann mir helfen? :evil1:
-
Hallo, Robo-Gemeinde,
wer kann mir sagen, mit welchem Befehl ich im Unterbrechungsfall die NC rücksetzen kann ? Dringend! -
-
Hallo, miteinander
Ich möchte in bestimmten Situationen (z.B. nach einem externen Abbruch) aus einem Bauteil rückwärts rausfahren. Dazu habe ich mir folgendes Programm geschrieben:
$VEL_AXIS[1] = 40
$VEL_AXIS[2] = 40
$VEL_AXIS[3] = 40
$VEL_AXIS[4] = 40
$VEL_AXIS[5] = 40
$VEL_AXIS[6] = 40$ACC_AXIS[1] = 40
$ACC_AXIS[2] = 40
$ACC_AXIS[3] = 40
$ACC_AXIS[4] = 40
$ACC_AXIS[5] = 40
$ACC_AXIS[6] = 40$VEL.CP = 0.01
$VEL.ORI1 = 30
$VEL.ORI2 = 30
$ACC.CP = 1.0
$ACC.ORI1 = 50
$ACC.ORI2 = 50
;===================================
$TOOL = TOOL_DATA[1]
$BASE = BASE_DATA[1]; Falls sich das TOOL im Bauteil befindet (OUT209):
IF $OUT[209]==TRUE THEN
PTP_REL{Z 0.2}#tool
lin_rel{z 30}#tool
lin_rel{z 350}#base
ENDIF
################################################################Sobald ich das Programm starte, läuft es ab bis zur IF-Anweisung. Ist der OUT209 gesetzt, springt der
Zeiger auf die Zeile PTP_REL{Z 0.2}#tool;
Es erfolgt keine Bewegung und der Fehler "Unzulässige Startbewegung" wird angezeigt, obwohl dies doch eine PTP-Bewegung ist.
Wer kann mir weiterhelfen? -
Hallo, Loipe,
ich habe es gelöst, indem ich POS_TOOL = BASE_Data[30]:$POS_ACT verwendet habe (BaseData30: 0-Werte)
LÄUFT!
Danke an alle.
Kuno -
Hallo, Loipe, hallo, Interrupt.
Ich habe es laut dem Vorschlag von Loipe probiert, und zwar in der SPS.SUB: POS_TOOL = $BASE:$POS_ACT
Allerdings führt das zu einem Fehler:
"Kein Submitprogramm im Kommando Speicher hinterlegt."
Ich brauch es aber dort, da ich die aktuelle Position zu jedem Zeitpunkt wissen möchte.
Was mache ich falsch?
(POS_TOOL wurde als Frame in der config.dat deklariert) -
Hallo, Fast!
Tut mir leid, dass ich mich jetzt erst melde. Die Anlage läuft schon seit einigen Wochen fehlerfrei.
Die beiden Dateien in deinem Anhang hatte ich bereits von Kuka bekommen; trotzdem vielen Dank
für deine Mühe.
Ich habe zwischenzeitlich einen Lehrgang bei Kuka absolviert und muss sagen, dass er mehr als hilfreich war. Nochmal vielen Dank!
Kuno -
Nachdem ich bereits das ganze Forum durchsucht und nichts gefunden habe, wende ich mich an euch alle:
Was ich suche, ist die aktuelle Roboterposition mit dem aktuellen Tool und der Base 0 (Nullframe), egal, welche Base gerade angewählt ist. Die Systemvariable $Pos_act gibt mir ja nur die aktuelle Position bezogen auf Tool und Base aus. Gibt es eine Variabele oder irgendwo in den datfiles einen Wert bzw Frame, den man auslesen kann. Wenn ja, wo ist dieser versteckt?
Mir würde auch helfen, wenn ich die aktuelle Position der Sicherheitskugeln (TOOL) eines Safe-Roboters irgendwo auslesen könnte. Das muss doch möglich sein, da diese ja bei erreichen der Raumzelle - unabhängig von der Base - ein Signal geben.Wer kann mir weiterhelfen?
-
-
-
Danke an euch beide! Wenn mans weiß, ist es ganz einfach.
-
Hallo,
ich möchte nach einem Abbruch meinen Rob aus dem Bauteil herausfahren. Dazu möchte ich die LIN_REL-Bewegung nutzen, allerdings mit den TOOL-Koordinaten, so dass er in der Z-TOOL-Richtung herausfährt.
Alles, was ich probiere, endet in einer WORLD-Bewegung. Kann man überhaupt in der Tool-Richtung mit dem LIN_REL-Befehl fahren? -
Hat jemand von euch noch die richtige Steckerbelegung vom X11-Stecker einer KRC2-Steuerung? Wäre als PDF super. Ich kann sie nirgends mehr im Netz finden.
-
Danke, WolfHenk, das stimmt. Ich hatte es eigentlich auch nur zum Testen gedacht, aber dies muss ich auf alle Fälle noch ändern.
KoNo
-
Heureka!
Thema erledigt!