[Edit Irrer Polterer: Thema wurde geteilt - macht mehr Sinn]
Hallo zusammen,
wer kann mir über Funktion BAS() UP genau erklären?
Im Voraus vielen Dank
[Edit Irrer Polterer: Thema wurde geteilt - macht mehr Sinn]
Hallo zusammen,
wer kann mir über Funktion BAS() UP genau erklären?
Im Voraus vielen Dank
Hallo zusammen,
wer kann mir über Funktion BAS() UP genau erklären?
Im Voraus vielen Dank
Es handelt sich hier um eine Standard-Bibliothek, die zum KRL-Source gehört und im Verzeichnis R1/System zu finden ist. Der Aufruf geschieht durch BAS (COMMAND,REAL_PAR). Das Argument COMMAND ist ein ENUM-Wert vom Typ BAS_COMMAND und enthält einen Verweis auf den Befehl, den man ausführen möchte. Das Argument REL_PAR ist ein Wert vom Typ REAL und enthält den Wert, den man an die unter COMMAND übergebene Funktion übergeben möchte.
Beispiele:
BAS(#TOOL,1) setzt das aktuelle Tool auf TOOL_DATA[1]. Dabei werden im Gegensatz zu $TOOL=TOOL_DATA[1] auch die Lastdaten mit eingerechnet.
BAS(#VEL_CP, 0.3) setzt die Geschwindigkeit für Linearbewegungen auf 0,3m/s.
Wenn du die Bas öffnest und auch die enthaltenden Folds, sollte eigentlich vieles klarer werden. Eine reine BAS-Doku ist mir nicht bekannt.
Hi everybody,
I am currently developing a program with a Kuka Robot, in which I constantly change tools with these two commands:
$TOOL = TOOL_DATA[5]
BAS(#TOOL,5)
then I make movement with PTP_REL, however the movement is not continuous like when you move the robot from one PTP to another. I have noticed that a PTP is defined with BAS(#PTP_PARAMS,100), and there the motion conditions are defined. But since it is not a PTP but PTP_REL, I don't know how I can define the motion conditions to always have a continuous motion and not a step-by-step one.
Greetings and thank you very much for your answers
There is no difference in defining the parameters of ptp and ptp_rel. Your problem has another cause. How did you program blending for your ptp? Probably showing your program would help.
Fubini
Hi,
first I perform a movement to a defined point, and then I make a loop to generate a sequence of points. And I can see that the robot moves step by step with a pause at each point, I don't know if the relative movement affects or if the $advance has something to do with it too. I appreciate your help.
$VEL_AXIS[1] = 100
$VEL_AXIS[2] = 100
$VEL_AXIS[3] = 100
$VEL_AXIS[4] = 100
$VEL_AXIS[5] = 100
$VEL_AXIS[6] = 100
$ACC_AXIS[1] = 100
$ACC_AXIS[2] = 100
$ACC_AXIS[3] = 100
$ACC_AXIS[4] = 100
$ACC_AXIS[5] = 100
$ACC_AXIS[6] = 100
$VEL.ORI1 = 100
$VEL.ORI2 = 100
$ACC.CP = 1.0
$ACC.ORI1 = 100
$ACC.ORI2 = 100
$APO.CDIS=30
$APO.CPTP=30
;FOLD PTP P1 CONT Vel=100 % PDAT1 Tool[5] Base[0];%{PE}%R 8.3.42,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P1, 3:C_DIS, 5:100, 7:PDAT1
$BWDSTART=FALSE
PDAT_ACT=PPDAT1
FDAT_ACT=FP1
BAS(#PTP_PARAMS,100)
PTP XP1 C_PTP
;ENDFOLD
$ADVANCE=1
For i=1 to N_Punkte step 1
Point1 = {x 0,y 0,z 0,a 0,b 0,c 0}
Point1.A= R_A/Num_Points
Point1.B= R_B/Num_Points
Point1.C=R_C/Num_Points
PTP_REL Point1 C_DIS #BASE
ENDFOR
$TOOL = TOOL_DATA[6]
BAS(#TOOL,6)
For i=1 to N_Punkte step 1
Point1 = {x 0,y 0,z 0,a 0,b 0,c 0}
Point1.x= Trans_X/Num_Points
Point1.y= Trans_Y/Num_Points
Point1.z= Trans_Z/Num_Points
PTP_REL Point1 C_DIS #BASE
ENDFOR
$ADVANCE=1 means, the programmpointer(?) only runs one movement line ahead, so I think it's not possible to do a continuous movment.
Thank you for your answer,
I was suspicious of the $Advance command, but I wasn't sure, since I understand that $Advance=1 is necessary to perform all the calculations. I'll prove it with 3. Thank you very much.
...since I understand that $Advance=1 is necessary to perform all the calculations....
The robot will never change the sequence of the statements. You have to take care of using triggers and Interrupts that change variables. In that case the calculations can be done too late.
Thank you for your answer,
I was suspicious of the $Advance command, but I wasn't sure, since I understand that $Advance=1 is necessary to perform all the calculations. I'll prove it with 3. Thank you very much.
Actually $ADVANCE has nothing to do with KRC's ability to perform calculations.
It tells how many (known) points are to be collected so motion planner has data to plan the motions if motions are to be blended.
Any non-zero value will allow approximated motion, including $ADVANCE=1 but... there may be other things in program that advance run pointer pause...
But i have few questions:
Why compute same thing over and over in a loop?
Why bother to interpolate with N_Punkte steps at all?
Why interpolate and blend instead of moving in one motion?
If you plan to stop at any of those steps, why not use an interrupt?
Btw. i tried my version of this example in a simulator (used $STOPNOAPPROX=TRUE) and robot moves smoothly without stopping.
Any non-zero value will allow approximated motion, including $ADVANCE=1 but... there may be other things in program that advance run pointer pause...
But i have few questions:......
Hi,
thanks for the clarification of $Advance
what I'm trying to move is within functions, actually the program is like this. I publish here in summary what I try to do and I don't know if the jump to the function and the mix with For can be the problem now that I understand that $Advance and Bas() are not the cause.
I appreciate your questions, and here I explain what I can understand:
1. I calculate in a loop over and over again because if I send the robot to rotate in tool 250 degrees around Z. It arrives at the end point rotated 250 degrees but does not maintain the orientation. And by doing it in small steps it does.
2. As you see in the code I need both tool and base movements. For example move the robot in X together with rotation in B relative to Base and rotate with Tool in Z. And I can't find any other way than to combine both movements in a step-by-step loop.
3. I think the previous two points answer this. I don't really plan on stopping between these points, it's a sequence.
I apologize if something doesn't make sense, I appreciate your answers.
DEF Wicklung( )
DECL INT i,N_Punkte
DECL REAL dist
;FOLD INI;%{PE}
;ENDFOLD (INI)
;FOLD PTP HOME Vel=100 % DEFAULT;%{PE}%R 8.3.42,%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
;FOLD INI
$VEL_AXIS[1] = 100
$VEL_AXIS[2] = 100
$VEL_AXIS[3] = 100
$VEL_AXIS[4] = 100
$VEL_AXIS[5] = 100
$VEL_AXIS[6] = 100
$ACC_AXIS[1] = 100
$ACC_AXIS[2] = 100
$ACC_AXIS[3] = 100
$ACC_AXIS[4] = 100
$ACC_AXIS[5] = 100
$ACC_AXIS[6] = 100
$VEL.ORI1 = 100
$VEL.ORI2 = 100
$ACC.CP = 1.0
$ACC.ORI1 = 100
$ACC.ORI2 = 100
$APO.CDIS=40
$APO.CPTP=40
;ENDFOLD
;===================================================================
;...Pneumatik
;HALT
;FOLD PTP P1 CONT Vel=100 % PDAT1 Tool[5] Base[0];%{PE}%R 8.3.42,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P1, 3:C_DIS, 5:100, 7:PDAT1
$BWDSTART=FALSE
PDAT_ACT=PPDAT1
FDAT_ACT=FP1
BAS(#PTP_PARAMS,100)
PTP XP1 C_PTP
;ENDFOLD
;FOLD WAIT Time=1 sec;%{PE}%R 8.3.42,%MKUKATPBASIS,%CWAIT,%VWAIT,%P 3:1
WAIT SEC 1
;ENDFOLD
PTP $POS_ACT
;Pneumatik
$ADVANCE=1
dist=5
N_Punkte=4;
HALT
;---------Rotate Tool
For i=1 to N_Punkte step 1
Rotate_Tool(dist,0,0,180, 0 , 0 , N_Punkte)
ENDFOR
;-------Rotate Tool and base
$TOOL = TOOL_DATA[6]
BAS(#TOOL,6)
For i=1 to N_Punkte step 1
Rotate_Base(-dist,0 ,-50 , 0, -60 ,0 , N_Punkte)
Rotate_Tool(0, 0,0,50, 0 ,0 , N_Punkte)
ENDFOR
Rotate_Tool(0, 0,0 ,15 ,0 ,0 , 1)
HALT
;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 Rotate_Base(T_X :IN,T_Y :IN,T_Z :IN,R_A :IN,R_B :IN,R_C :IN, N_p: IN)
REAL T_X, T_Y, T_Z,R_A,R_B,R_C
INT N_p
decl Frame Point1
Point1 = {x 0,y 0,z 0,a 0,b 0,c 0}
Point1.x= T_X/N_p
Point1.y= T_Y/N_p
Point1.z= T_Z/N_p
Point1.A= R_A/N_p
Point1.B= R_B/N_p
Point1.C=R_C/N_p
PTP_REL Point1 C_DIS #BASE
END
DEF Rotate_Tool(T_X :IN,T_Y :IN,T_Z :IN,R_A :IN,R_B :IN,R_C :IN, N_p: IN)
REAL T_X, T_Y, T_Z,R_A,R_B,R_C
INT N_p
decl Frame Point1
Point1 = {x 0,y 0,z 0,a 0,b 0,c 0}
Point1.x= T_X/N_p
Point1.y= T_Y/N_p
Point1.z= T_Z/N_p
Point1.A= R_A/N_p
Point1.B= R_B/N_p
Point1.C=R_C/N_p
PTP_REL Point1 C_DIS #TOOL
END
Alles anzeigen
Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können