|
Example
MintMT Application
This
Mint example demonstrates a simple tool changer which determines the shortest
path to the next tool. The tool is selected from the digital inputs.
'=======================================================================
' File Name: tool_picker.mnt
'
' Baldor 2001
'
' Description:
' Example program showing how an axis may be used to move to a range
' of discrete positions using the smallest move possible.
'=======================================================================
'Constant declarations
Const _nNoOfTools = 12
'Number of tools in the machine
Const _nDistanceBetweenTools =
1000 'Distance between each tool (counts)
Const _mkToolMask = 01111
'Mask for digital inputs 0-3
'Macro declarations
Define ipTrigger =
INX.4 'Define the trigger input
Define opInMotion =
OUTX.1 'Output for in motion flag to PLC
'Clear any outstanding errors and enable the drive
CANCEL
DRIVEENABLE = 1
'Number of encoder counts per rev of the tool changer
ENCODERWRAP.0 =
_nNoOfTools * _nDistanceBetweenTools
'Wait here in a loop to allow the program to run
Loop
Pause ipTrigger
'Wait for a trigger to activate
subPickTool IN &
_mkToolMask 'Pick tool based on digital inputs 0-3
Pause !ipTrigger
'Wait for trigger to deactivate
End Loop
End
'Place the drive configuration parameters here
'This will be called on program start-up
Startup
SCALE = 1
'Assume scaling is in counts
INPUTMODE = 0
'Setup the I/O - all level triggered
HOMEINPUT.0 = 5
'The digital input used to mark the home position
HOMESPEED.0 = 500
HOMEBACKOFF.0 = 2
'Back-off at half the home speed
End Startup
'This subroutine serves two purposes, firstly to home the tool picker
'when a tool index of zero is supplied, and secondly to pick tools
'when supplied with a non-zero tool index.
Sub subPickTool(ByVal nToolIndex
As Integer)
Dim nDistanceToMove
'Check that the tool index is within range
If nToolIndex >
_nNoOfTools Then Exit Sub
opInMotion = 1 'Turn on the "in motion" signal
If nToolIndex = 0
Then
HOME.0 =
_hmNEGATIVE_SWITCH
Pause IDLE.0
POS.0 = 0
ENCODER.0 = 0
Else
nDistanceToMove = (nToolIndex
* _nDistanceBetweenTools)
- ENCODER.0
'The required move distance need never be greater than half a
'revolution, so add or subtract 1/2 a tool revolution
If nDistanceToMove >
(_nDistanceBetweenTools * _nNoOfTools) / 2
Then
nDistanceToMove = _
nDistanceToMove - (_nDistanceBetweenTools *
_nNoOfTools)
Else If nDistanceToMove <
-(_nDistanceBetweenTools * _nNoOfTools)
/ 2 _
Then
nDistanceToMove = _
nDistanceToMove + (_nDistanceBetweenTools *
_nNoOfTools)
End If
'Perform a relative move to the tool location and wait for completion
MOVER.0 = nDistanceToMove
GO.0 : PAUSE
IDLE.0
End If
opInMotion = 0 'Turn off the "in motion" signal
End Sub
'Onerror handler
'Should handle following errors, etc.
Event OnError
Print "Error ",
Err, " on line ",
Erl
End
End Event
|