Here is a macro for automatic tool changer.
'********************************************************
'*
'* Macro for the Automatic tool changer in script M6Start.m1s
'*
'* Description:
'*
'* We have defined fixed positions for each tool.
'* When you input M6 code and a new tool,
'* First, the Z axis goes to "machine zero",
'* then goes to the position of the last tool used
'* and leaves the tool. After that, the Z axis goes
'* to the new tool position and takes the new tool.
'* Finaly, returns to "Machine zero".
'* Before the program begins, the macro checks if the
'* tool number is valid.
'*
'* Process:
'*
'* 1. Z-axis goes to "Machine zero"
'* 2. Then, Z-axis goes to the safe position defined by the user.
'* 3. The Z axis goes down to the height to the tools.
'* 4. Z axis moves to the position of the last tool, moving the
'* X-axis before the Y-axis.
'* 5. The spindle releases the actual tool and the z-axis moves to
'* the position of the new tool.
'* 6. The Z-axis takes the new tool and returns at the safe position
'* 7. Z-axis goes to "Machine Zero".
'*
'*
'* Marco A. Perez C.
'* Sadosa S.A. de C.V.
'*
'* ***********************************************************************
Sub Main() 'Define variables
OldTool = GetOEMDRO (1200)
x = GetToolChangeStart( 0 )
y = GetToolChangeStart( 1 )
z = GetToolChangeStart( 2 )
a = GetToolChangeStart( 3 )
b = GetToolChangeStart( 4 )
c = GetToolChangeStart( 5 )
tool = GetSelectedTool()
NewTool = tool
MaxToolNum = 5 'Maximum number of tools to use.
ToolDown = -50 'Height for the tool change.
ToolUp = 0.0 'Height the Z-axis for the tool change.
PosSec = 50.0 'Safe Position.
If NewTool = OldTool Then
Exit Sub
End If
While NewTool > MaxToolNum
NewTool = Question ("Place valid tool number (between 1 y 5)")
Wend
Code "G00 G53 Z" & ToolUp 'The z-axis is going to "machine zero"
While IsMoving()
Wend
Code "G53 y" & PosSec 'Going to safe position.
While IsMoving()
Wend
Code "G53 Z" & ToolDown 'Down to the height of tools
While IsMoving()
Wend
Call MovePos(OldTool) 'Going to the last position to relase the old tool.
While IsMoving()
Wend
ActivateSignal(Output1) 'Relase the tool.
Code "G4 P1.0"
Code "G53 Z" & ToolUp
While IsMoving()
Wend
Call MovePos(NewTool) 'Go to the new tool position.
While IsMoving()
Wend
Code "G53 Z" & ToolDown 'down the z-axis to hold the tool.
While IsMoving()
Wend
DeActivateSignal(Output1) 'hold the new tool.
Code "G4 P1.0"
Code "G53 y" & PosSec 'Returns to the safe position.
While IsMoving()
Wend
Code "G53 Z" & ToolUp 'Returns z-axis to "machine zero".
Call SetUserDRO (1200,NewTool)
SetCurrentTool( NewTool )
End Sub
Sub MovePos(ByVal ToolNumber As Integer)
Select Case ToolNumber 'Here set the position of each tool.
Case Is = 1
Code "G00 G53 x12.0"
Code "G00 G53 y5.0"
Case Is = 2
Code "G00 G53 x24.0"
Code "G00 G53 y5.0"
Case Is = 3
Code "G00 G53 x36.0"
Code "G00 G53 y5.0"
Case Is = 4
Code "G00 G53 x48.0"
Code "G00 G53 y5.0"
Case Is = 5
Code "G00 G53 x60.0"
Code "G00 G53 y5.0"
End Select
End Sub
Main