I have modified a macro and so far and have my dust boot and tool rack moving.
so far I haven't been able to get the pnp signal to work.
- Code: Select all
while(!AS3.GetLED(131)) // check Collet has opened
while(AS3.GetLED(131)) // check Collet has closed
while(AS3.GetLED(132)) // check tool has locked
{
I greatly appreciate the help.
- Code: Select all
//STEPCRAFT linear toolchanger code
// (1) STEPCRAFT port definition
int Chuckopenport = 4;
int Chuckopenpin = 14;
int Toollockcheckport = 2;
int Toollockcheckpin = 5;
int Checkcolletopenport = 2;
int Checkcolletopenpin = 4;
int Atcslidefwdport = 4;
int Atcslidefwdpin = 9;
int Dustshoeport = 4;
int Dustshoepin = 7;
double[] ToolX = new double[11];
double[] ToolY = new double[11];
ToolX[0] = 0; // Tool0 X position
ToolY[0] = 0; // Tool0 Y position
// (2) STEPCRAFT tool holder XY positions
ToolX[1] = 5; // Tool1 X position
ToolY[1] = 10; // Tool1 Y position
ToolX[2] = 10; // Tool2 X position
ToolY[2] = 10; // Tool2 Y position
ToolX[3] = 15; // Tool3 X position
ToolY[3] = 10; // Tool3 Y position
ToolX[4] = 1228.7; // Tool4 X position
ToolY[4] = 119.9; // Tool4 Y position
ToolX[5] = 1228.7; // Tool5 X position
ToolY[5] = 153.6; // Tool5 Y position
// (3) STEPCRAFT optional tools
ToolX[6] = 1228.7; // Tool6 X position
ToolY[6] = 186.4; // Tool6 Y position
// ToolX[7] = 100; // Tool7 X position
// ToolY[7] = 180; // Tool7 Y position
// ToolX[8] = 100; // Tool8 X position
// ToolY[8] = 180; // Tool8 Y position
// ToolX[9] = 100; // Tool9 X position
// ToolY[9] = 180; // Tool9 Y position
// ToolX[10] = 100; // Tool10 X position
// ToolY[10] = 180; // Tool10 Y position
// (4) STEPCRAFT basic parameters for tool change
double SafeZ = -1;
double Ztoolrelease = -3;
double Ztoolpickup = -3;
double Ytooloffset = -1; //STEPCRAFT tool position offset for Y
double Ztooloffset = -1; //STEPCRAFT tool position offset for Z
int Newtool = exec.Getnewtool();
int Currenttool = exec.Getcurrenttool();
if(Newtool == -1) // If new tool number is -1 means a missing T code, so we need to stop here...
return;
// (5) STEPCRAFT max. number of tools possible
if(Newtool <0 || Newtool >6) // Tool number is out of range, so we need to stop here...
return;
if(Newtool == Currenttool) // Same tool was selected, so do nothing, stop here...
return;
if(!exec.GetLED(56)||!exec.GetLED(57)||!exec.GetLED(58)) // If machine was not homed then it is unsafe to move in machine coordinates, stop here...
{
MessageBox.Show("The machine was not yet homed, do homeing before executing a tool change!");
exec.Stop();
return;
}
while(exec.IsMoving()){}
// Get current XY machine coordinates to return to this position at the end of the macro
double Xoriginalpos = exec.GetXmachpos();
double Yoriginalpos = exec.GetYmachpos();
// Stop spindle if running and Move Z up
exec.Stopspin();
exec.Code("G00 G53 Z"+ SafeZ); // Move Z up
while(exec.IsMoving()){}
if(Currenttool!=0)
{
// Move to old tool position on XY plane
// dust shoe up
exec.Setoutpin(Dustshoeport,Dustshoepin);
exec.Wait(1000); // Wait one 1000msec
// STEPCRAFT
exec.Code("G00 G53 X" + ToolX[Currenttool] + " Y" + (ToolY[Currenttool] +Ytooloffset));
while(exec.IsMoving()){}
//atcfwd
exec.Setoutpin(Atcslidefwdport,Atcslidefwdpin);
exec.Wait(2000);
// end of atcfwd
// Drop current tool
exec.Code("G00 G53 Z"+ Ztoolrelease); // Move Z axis down to tool holder position
// STEPCRAFT
exec.Code("G01 F500 G53 Y" + ToolY[Currenttool]); // Move Y axis to tool holder position
while(exec.IsMoving()){}
exec.Setoutpin(Chuckopenport, Chuckopenpin); // Open the chuck with pneumatic valve
exec.Wait(1000); // Wait one 1000msec
// STEPCRAFT
exec.Code("G01 F500 G53 Z"+ (SafeZ + Ztooloffset)); // STEPCRAFT Move Z up for tool change
while(exec.IsMoving()){}
}
if(Currenttool==0)
{
// STEPCRAFT open chuck if tool = 0
exec.Wait(200);
MessageBox.Show("No tool in chuck. Correct?"); // STEPCRAFT safety question
exec.Setoutpin(Chuckopenport, Chuckopenpin); // Open the chuck with pneumatic valve
exec.Wait(1000); // Wait one 1000msec
}
if(Newtool!=0)
{
// Move to new tool position on XY plane
exec.Code("G00 G53 X" + ToolX[Newtool] + " Y" + ToolY[Newtool]);
while(exec.IsMoving()){}
// Pick new tool
exec.Code("G01 F1000 G53 Z"+ Ztoolpickup); // Move Z axis down to tool holder position
while(exec.IsMoving()){}
exec.Clroutpin(Chuckopenport, Chuckopenpin); // Close the chuck with pneumatic valve
exec.Wait(1000); // Wait one 1000msec
exec.Clroutpin(Atcslidefwdport,Atcslidefwdpin); // atc slide back
exec.Wait(1000);
while(exec.IsMoving()){}
if(!exec.Ismacrostopped()) // If tool change was not interrupted with a stop only then validate new tool number
{
exec.Setcurrenttool(Newtool); //Set the current tool -> the new tool
//MessageBox.Show("Tool change done."); // STEPCRAFT no message required
}
// STEPCRAFT
exec.Code("G01 F1000 G53 Y" + (ToolY[Newtool] +Ytooloffset)); // Move Y axis to tool holder offset position
exec.Code("G00 G53 Z"+ SafeZ); // Move Z up
while(exec.IsMoving()){}
}
if(Newtool==0)
{
// Move Z/axis up with open chuck
exec.Code("G00 G53 Z"+ SafeZ); // Move Z up
while(exec.IsMoving()){}
exec.Clroutpin(Chuckopenport, Chuckopenpin); // Close the chuck with pneumatic valve
exec.Wait(1000); // Wait one 1000msec
while(exec.IsMoving()){}
if(!exec.Ismacrostopped()) // If tool change was not interrupted with a stop only then validate new tool number
{
exec.Setcurrenttool(Newtool); //Set the current tool -> the new tool
//MessageBox.Show("Tool change done."); // STEPCRAFT no message required
}
while(exec.IsMoving()){}
}
// Move back to start point
exec.Code("G00 G53 X" + Xoriginalpos + " Y" + Yoriginalpos);
while(exec.IsMoving()){}
// Measure new tool will go here....
// Getting the tool offset of the new tool
exec.Code("G43 H"+Newtool); // Load new tool offset
// Dust shoe down
exec.Clroutpin(Dustshoeport, Dustshoepin);
exec.Wait(1000); // Wait one 1000msec
exec.Wait(200);
while(exec.IsMoving()){}
if(exec.Ismacrostopped()) // STEPCRAFT interruption
{
exec.StopWithDeccel();
MessageBox.Show("Tool change was interrupted by user!");
}