I was thinking about that solution and i think i ll implement that anyway. Thanks a lot.
Posts by Gieniar
-
-
Thats the shortest way and I know about this but im looking also about sth in robot configuration. Im not sure if sth like that exist in configuration so thats why i create this thread.
But ofc thanks for the reply.
-
Hi, im looking for some information about locking the functionalityof manu 100%. Our client want to lock functionality of MANU 100% in order to protect machine against the operators. IF in abb, is posiibility to TURN OFF this work mode ?
-
A have a problem with approximation,
its possible, when im interpolating two points (SPTP -SLIN )beetween two procedures, and the second procedure have only SLIN instruction and in this case always i have trouble with interpolation.
The advance run works properly and it is in the next procedure before end motion in first one .
-
Yeah, a understand a problem consider with CONTINUE and Advance RUN.
If a continue works before interrupt declaration ? I have one procedure when i'm watching on hard stop detected on sensor and I think this declaration despite the application CONTINUE cause Advance Run Stop.
Furthermore, same situations require turn off the approximation, is there a possibility to dynamic approxmiation off, oder dynamic change of $APO.CDIS ? Because right now, when the robot cant reached the approximation possition it stops "near" the position, so that cause i dont reach a one of home positions.
-
Thanks a lot for this infomative knowledge! I used your solution with CONTINUE before "IF" and it really help me but..
Right now a have still a problem with notification 1123 "Aproximate positioning not posibble". This apperas in some points.
I want to ask if you know what can cause this situation.
If a really small $APO.C_DIS = 2 [mm] can affect on this ?
If change direction of the movement can be a problem oder speed or acc ?
Really helpful will be all yours information about movment approximation. I mark, i don want a solution, a want a clue and improve my knowledge.
-
KS V8.5.465_HF3
KR8R1620 C4
Hi,
I have a question consider on motion interpolation beetwen two procedures.
As I know, in Kuka, there is no posibility to approximate the last point in procedure but maybe sameone have a solution.
I have a main loop in CELL which manages the actual procedure to execute. Inside the procedures a have the another ones responsible for motion commands and the utilis consider with that. So I can say the main loop in CELL is a 1 level, procedure with trajectory is 2 level and the motion procedures are 3 level.
If the PLC choose for example procedure P1000 from main loop, the motion is going smoothly within this procedure up to the last motion. All of the motion instuctions are approximated. I want to make smooth motion (approximated) beetwen two another procedures for example p1000 -> p1100. Actualy before the last motion i get the msg 1123 and 1442.
Mayby someone have the solution to make this movements interpolated. In my opinion this is little bit strange, because every next movement is called by the "subprocedure" and beetwen this "subprocedures" as i told the movment is smooth up to the last when the program goes down from 3 level to 1 to change the 2 levele procedure.
I mark, the advance run does not stop, the $Advance isnt null and i explain my problem brightly. Below I added fragment of code.
Thanks a lot for your help !
Code: Main Loop in CELL - 1 lvl
Display More;---------------------- MAIN PROGRAM LOOP ---------------------- LOOP ;wait for iCmdNr <> 0; nCmdNr = iCmdNr ; copy command number from PLC data SWITCH nCmdNr ;-------------------------------------------------------- ;--------------- PRODUCTION PROCESS CMD ---------------- ;--------------- CmdNr from 1000 to 2100 ---------------- CASE 0 ;------------------------------------------------------ ; Movement to position - pickup home - movement trajectory related to current position (Bender home or intermediate module home) CASE 1000 P1000_PickupHome() ;------------------------------------------------------ ; Movement to pickup position - pickup the tube from the orientation module CASE 1100 P1100_PickupOrientation() ;------------------------------------------------------ ; Movement to position - pickup home - tube in gripper clamps CASE 1200 P1200_DepOrientation() ;------------------------------------------------------ ; Movement to position - intermediate module home CASE 1300 P1300_IntModHome() ;------------------------------------------------------ ; Movement to position - put away tube in intermediate module gripper clamps CASE 1400 P1400_FeedIntermodule() ;------------------------------------------------------ ;Movement to position - intermediate module home - after putaway tube in intermediate module gripper clamps CASE 1500 P1500_DepFeedIntModule() ;------------------------------------------------------ ;Movment to position - left/right side of intermediate module - side depends on actual formed tube position CASE 1600 P1600_PickupIntModule() ;------------------------------------------------------ ; Movement to position - intermediate module home CASE 1700 P1700_DepPickupIntModule() ;------------------------------------------------------ ;Movement to position - crippa home - tube in gripper clamps CASE 1800 P1800_CrippaHome() ;------------------------------------------------------ ;Movement to position - put away tube in crippa colet CASE 1900 P1900_FeedCrippa() ;------------------------------------------------------ ; Movement to position - crippa home - without tube in gripper clamps CASE 2000 P2000_DepFeedCrippa() ;------------------------------------------------------ ; Movement to position - put away tube to NOK container CASE 2100 P2100_NOK() ;-------------------------------------------------------- ;--------------- SERVICE PROCESS CMD ------------------- ;-------------------------------------------------------- ;-------------------------------------------------------- ;Movement to Service position ------------------------- CASE 20 P20_SERVICE_POS() ;-------------------------------------------------------- ;Movement to SAFE HOME position ------------------------- CASE 30 P30_SAFE_HOME() ;-------------------------------------------------------- ;----------------- Brake test procedure ----------------- CASE 40 P40_BRAKETEST() ;-------------------------------------------------------- ;----------------- Axes sync procedure ----------------- CASE 50 P50_AXES_SYNQ() ;------------------------------------------------------ DEFAULT oCmdNr_Ack = 0 PULSE($OUT[250], TRUE,0.5) MsgQuit("Nieznany rozkaz z PLC") ENDSWITCH CONTINUE IF nCmdNr <> 0 THEN P11_ConfirmCommand() ; Command executed, confirm to PLC ENDIF INTERRUPT OFF 8 CONTINUE oCmdNr_Ack = 0 ENDLOOP END
Code: Trajectory procedure - 2 lvl
Display MoreDEF P1200_DepOrientation( ) ;FOLD INI;%{PE} ;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 ;ENDFOLD (USER INI) ;ENDFOLD (INI) MovementE6Axis(PickupHomeAxisPos, F_P1000_PickupHome, P_P1000_PickupHome,true) MovementPTP(XP1300_IntModHome_01, FP1300_IntModHome_01, PP1300_IntModeHome_01, MoveTypeSPTP,TRUE) ;Pozycja końcowa - domowa dla strefy modułu poSredniego ;Wystawienie zezwolenia na potwierdzenie komendy ruchowej TRIGGER WHEN PATH = -50 DELAY = 0 DO P1200ConfirmCommandPerm = TRUE MovementE6Axis(InterModHomeAxisPos, F_P1300_InterModHome, P_P1300_InterModHome,TRUE) HERE IS THE PROBLEM WITH APPROX ;WAIT FOR PICKUP_HOME CONTINUE ; oczekiwanie na zezwolenie wejScia do potwierdzenia komendy WAIT FOR P1200ConfirmCommandPerm CONTINUE P1200ConfirmCommandPerm = FALSE END
Code: Motion instruction - 3 lvl
Display MoreDEF MovementPTP(Position_IN :IN, FrameData_IN :IN, MoveParams_IN :IN, MoveType_IN :IN,ApproxONOFF :IN) ;Deklaracje zmiennych ENUM Motion S_PTP,_PTP, S_LIN,_LIN DECL Motion MoveType_IN DECL E6POS Position_IN DECL FDAT FrameData_IN DECL PDAT MoveParams_IN DECL BOOL ApproxONOFF DECL INT APO_CDIS ;---------------------------------------------------------------------------------------- ;Funkcja obsBugujca operacje ruchowe PTP robota oraz zapisywanie informacja dla RecoveryPath ;---------------------------------------------------------------------------------------- CONTINUE SWITCH MoveType_IN CASE #S_PTP ; ruch SPTP SaveMoveType = 1 CASE #_PTP ; ruch PTP SaveMoveType = 2 DEFAULT ENDSWITCH SavePosition = Position_IN SaveFrameData = FrameData_IN SaveMoveParamsP = MoveParams_IN CONTINUE TRIGGER WHEN DISTANCE = 0 DELAY = 0 DO SavePosParamsPTP(SavePosition,SaveMoveParamsP,SaveFrameData,SaveMoveType) PRIO =-1 CONTINUE SWITCH SaveMoveType ; wybranie odpowiedniego typu ruchu dla aktualnie danego przejazdu do punktu ;pozycja dla przejazdu do uprzednio zapamitanego punktu CASE 1 ; ruch SPTP CONTINUE IF ApproxONOFF THEN $APO.CDIS = MoveParams_IN.APO_DIST SPTP Position_IN WITH $VEL_AXIS[1] = SVEL_JOINT(MoveParams_IN.Vel),$TOOL = STOOL2(FrameData_IN),$BASE = SBASE(FrameData_IN.BASE_NO),$IPO_MODE = SIPO_MODE(FrameData_IN.IPO_FRAME),$LOAD = SLOAD(FrameData_IN.TOOL_NO),$ACC_AXIS[1] = SACC_JOINT(MoveParams_IN),$APO = SAPO_PTP(MoveParams_IN),$GEAR_JERK[1] = SGEAR_JERK(MoveParams_IN),$COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) C_DIS ELSE SPTP Position_IN WITH $VEL_AXIS[1] = SVEL_JOINT(MoveParams_IN.Vel),$TOOL = STOOL2(FrameData_IN),$BASE = SBASE(FrameData_IN.BASE_NO),$IPO_MODE = SIPO_MODE(FrameData_IN.IPO_FRAME),$LOAD = SLOAD(FrameData_IN.TOOL_NO),$ACC_AXIS[1] = SACC_JOINT(MoveParams_IN),$APO = SAPO_PTP(MoveParams_IN),$GEAR_JERK[1] = SGEAR_JERK(MoveParams_IN),$COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) ENDIF CASE 2 ; ruch PTP $BWDSTART = FALSE PDAT_ACT = MoveParams_IN FDAT_ACT = FrameData_IN BAS(#PTP_PARAMS, MoveParams_IN.VEL) SET_CD_PARAMS (0) ; obsluga detekcji kolizji - wybranie jednej z konfiguracji CONTINUE IF ApproxONOFF THEN $APO.CDIS = MoveParams_IN.APO_DIST PTP Position_IN C_DIS ;aproksymacja ELSE PTP Position_IN ENDIF DEFAULT ENDSWITCH ;Zerowanie zmiennej SaveMoveType SaveMoveType = 0 END