
Thanks forr the super fast reply.
I think maybe this is a cleaner program?? I'm up for any critism at all. If any of you experts would be so kind as to tell me if there is a better way please do so. Thanks.
DEF TOOLCHANGE(TOOL_NO:IN) ;Global SP Calls TOOL_NO variable from main program
:TOOL_NO is the requested Tool
(----------DECLARATION SECTION-----------)
DECL AXIS TOOLSAFE
DECL E6POS Tool_Home_Pos, Tool_Dep_Pos, Tool_Grab_Pos
DECL INT A
(----------INITIALIZATION SECTION--------)
bas (#initmov,0)
TOOLSAFE={AXIS:A1 -90,A2 -140,A3 136,A4 0,A5 90,A6 90}
INT TOOL_NO
SIGNAL CURNTTOOL_NO $IN[6] TO $IN[8] ;Robot recieves digital input when a tool is mounted
(---------MAIN SECTION------------------)
$TOOL=NULL
$BASE=TOOLRACK
IF TOOL_NO NOT CURNTTOOL_NO THEN ;Check to see if tool change is required
PTP TOOLSAFE ;Safe Move
TOOLDEPOSIT() ;Deposit Tool
TOOLGRAB() ;Grab specified tool
PTP TOOLSAFE
IF TOOL_NO NOT CURNTTOOL_NO THEN ;Confirm correct tool
HALT ;HALT Robot
ENDIF
ENDIF
END ;End of Tool change Program
DEF TOOLDEPOSIT() ;Tool deposit subprogram local
A=CURNTTOOL_NO
TOOLPOS()
PTP Tool_Dep_Pos
$VEL_CP= .1 m/s
LIN Tool_Home_Pos
$OUT_C[5]= TRUE
WAIT 1 sec
LIN_REL {Y 150}
END
DEF TOOLGRAB() ;Tool grab subprogram local
A=TOOL_NO
TOOLPOS()
PTP Tool_Grab_Pos
$VEL_CP= .1 m/s
LIN Tool_Home_Pos
$OUT_C[5]= TRUE
WAIT 1 sec
LIN_REL {Z 200}
END
DEF TOOLPOS() ;Loads correct tool locations
SWITCH A
CASE 1
Tool_Home_Pos= {X 0,Y 0,Z 0,A 0, B 0,C 0,S 0,T 0}
Tool_Dep_Pos= Tool_Home_Pos
Tool_Dep_Pos.Z= Tool_Safe_Pos.Z + 200
Tool_Grab_Pos= Tool_Home_Pos
Tool_Grab_Pos.Y= Tool_Grab_Pos.Y - 75
CASE 2
Tool_Home_Pos= {X 178,Y 0,Z 0,A 0, B 0,C 0,S 0,T 0}
Tool_Dep_Pos= Tool_Home_Pos
Tool_Dep_Pos.Z= Tool_Safe_Pos.Z + 200
Tool_Grab_Pos= Tool_Home_Pos
Tool_Grab_Pos.Y= Tool_Grab_Pos.Y - 75
CASE 3
Tool_Home_Pos= {X 356,Y 0,Z 0,A 0, B 0,C 0,S 0,T 0}
Tool_Dep_Pos= Tool_Home_Pos
Tool_Dep_Pos.Z= Tool_Safe_Pos.Z + 200
Tool_Grab_Pos= Tool_Home_Pos
Tool_Grab_Pos.Y= Tool_Grab_Pos.Y - 75
DEFUALT
HALT
END
