If anyone is familiar with ABB IRC5, there are system inputs that will allow the controller to load robot programs into the active task from its own internal hard drive. I have previously used this on jobs that have thousands of points per part in order to minimize the disk space in the current task. When the operator selects a certain job, the PLC will signal the robot to load that part's series of programs. I am trying to do something similar with Kuka. The R1 file has hundreds of robot programs in it and there is not enough space, however if there was a way to only load the needed program at the time, this would solve the issue without having to reprogram the entire job. Does anyone know of a way that this can be done, whether it be from within the Kuka's memory or an external source?
Posts by Ahiers
-
-
Delete those INI folds in the subroutines, and try a different interrupt number, f. e. number 1.
For whatever reason I changed the interrupt from 5 to 10 and now it works. The manual doesn't say anything about 5 being a reserved number or anything, I'm scratching my head as to why it wouldn't work. Thanks for the help.
-
Here are the full code snippets. I tried to condense for readability.
The start and end points are roughly 1.5 meters away. The robot travels to the end point without triggering the interrupt and stopping.
Code
Display MoreDEF PICK_STACK ( ) ;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) ;FOLD PTP HOME Vel=100 % DEFAULT ;%{PE} ;FOLD Parameters ;%{h} ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.old; Kuka.IsGlobalPoint=False; Kuka.PointName=HOME; Kuka.BlendingEnabled=False; Kuka.MoveDataPtpName=DEFAULT; Kuka.VelocityPtp=100; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=PTP ;ENDFOLD $BWDSTART = FALSE PDAT_ACT = PDEFAULT FDAT_ACT = FHOME BAS(#PTP_PARAMS, 100.0) SET_CD_PARAMS (0) PTP XHOME ;ENDFOLD INTERRUPT DECL 5 WHEN $IN[1041]==TRUE DO SEARCH_FOUND () ;FOLD PTP PSEARCH_START CONT Vel=10 % PDAT1 Tool[1]:INFEED_VAC Base[0] ;%{PE} ;FOLD Parameters ;%{h} ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.old; Kuka.IsGlobalPoint=False; Kuka.PointName=PSEARCH_START; Kuka.BlendingEnabled=True; Kuka.MoveDataPtpName=PDAT1; Kuka.VelocityPtp=10; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=PTP ;ENDFOLD $BWDSTART = FALSE PDAT_ACT = PPDAT1 FDAT_ACT = FPSEARCH_START BAS(#PTP_PARAMS, 10.0) SET_CD_PARAMS (0) PTP XPSEARCH_START C_Dis ;ENDFOLD SEARCH_MOTION () ;FOLD LIN PSEARCH_FOUND Vel=0.1 m/s CPDAT1 Tool[1]:INFEED_VAC Base[0] ;%{PE} ;FOLD Parameters ;%{h} ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.old; Kuka.IsGlobalPoint=False; Kuka.PointName=PSEARCH_FOUND; Kuka.BlendingEnabled=False; Kuka.MoveDataName=CPDAT1; Kuka.VelocityPath=0.1; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=LIN ;ENDFOLD $BWDSTART = FALSE LDAT_ACT = LCPDAT1 FDAT_ACT = FPSEARCH_FOUND BAS(#CP_PARAMS, 0.1) SET_CD_PARAMS (0) LIN XPSEARCH_FOUND ;ENDFOLD ;FOLD WAIT Time= 1.0 sec ;%{PE} ;FOLD Parameters ;%{h} ;Params IlfProvider=kukaroboter.basistech.inlineforms.logics.wait; Time=1.0 ;ENDFOLD WAIT SEC 1.0 ;ENDFOLD ;FOLD PTP HOME Vel=100 % DEFAULT;%{PE} ;FOLD Parameters ;%{h} ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.old; Kuka.IsGlobalPoint=False; Kuka.PointName=HOME; Kuka.BlendingEnabled=False; Kuka.MoveDataPtpName=DEFAULT; Kuka.VelocityPtp=100; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=PTP ;ENDFOLD $BWDSTART = FALSE PDAT_ACT = PDEFAULT FDAT_ACT = FHOME BAS(#PTP_PARAMS, 100.0) SET_CD_PARAMS (0) PTP XHOME ;ENDFOLD END DEF SEARCH_MOTION ( ) ;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) INTERRUPT ON 5 ;FOLD LIN PSEARCH_END Vel=0.1 m/s CPDAT1 Tool[1]:INFEED_VAC Base[0] ;%{PE} ;FOLD Parameters ;%{h} ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.old; Kuka.IsGlobalPoint=False; Kuka.PointName=PSEARCH_END; Kuka.BlendingEnabled=False; Kuka.MoveDataName=CPDAT1; Kuka.VelocityPath=0.1; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=LIN ;ENDFOLD $BWDSTART = FALSE LDAT_ACT = LCPDAT1 FDAT_ACT = FPSEARCH_END BAS(#CP_PARAMS, 0.1) SET_CD_PARAMS (0) LIN XPSEARCH_END ;ENDFOLD WAIT FOR TRUE INTERRUPT OFF 5 END DEF SEARCH_FOUND ( ) ;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) INTERRUPT OFF 5 BRAKE XPSEARCH_FOUND = $POS_INT XPSEARCH_FOUND.Z = XPSEARCH_FOUND.Z - 500 RESUME END
-
I am trying to write a simple search interrupt that stops motion when an input is received and record the point, then go to an offset of that point. See code below.
I am unable to get the interrupt to trigger and stop the robot. I have verified that 1041 is the correct input and that the input is not on when the interrupt is turned on. If anyone has any ideas as to why this would be the case it would be appreciated.
Code
Display MoreDEF PICK ( ) PTP HOME INTERRUPT DECL 5 WHEN $IN[1041]==TRUE DO SEARCH_FOUND () PTP PSEARCH_START SEARCH_MOTION () LIN PSEARCH_FOUND PTP HOME END DEF SEARCH_MOTION ( ) INTERRUPT ON 5 LIN PSEARCH_END WAIT FOR TRUE INTERRUPT OFF 5 END DEF SEARCH_FOUND ( ) INTERRUPT OFF 5 BRAKE XPSEARCH_FOUND = $POS_INT XPSEARCH_FOUND.Z = XPSEARCH_FOUND.Z - 500 RESUME END
-
I'm also having trouble with the same thing. All of the instance information I can find is incomplete, the EDS file doesn't work in Studio 5000, etc.
-
Worked perfectly. I assumed RAISE could only be used for user created errors.
Thanks for your help.
-
I have a search routine that consists of a number of SearchL instructions. Occasionally I will get the ERR_SIGSUPSEARCH error where the signal is already high (or low) when the search starts.
I am attempting to include error handling where if this error happens, the robot should retry the entire procedure. However I have only been able to find the RETRY command, but this just restarts the program at the search where the error happened. Does anyone know of a way I could retry the entire procedure? I attempted to do a GOTO from the error to the top of the procedure but this is not allowed.
Thanks.