// Inizio inizializzare variabile

OldTool = Convert.ToDouble (AS3.Getfield (3000)); 			//Utensile in mandrino
X_palp = Convert.ToDouble (AS3.Getfield (3001));			//posizione X del palpatore 
Y_palp = Convert.ToDouble (AS3.Getfield (3002));			//posizione Y del palpatore
X_UT1 = Convert.ToDouble (AS3.Getfield (3003));
Y_UT1 = Convert.ToDouble (AS3.Getfield (3004));
ToolY = Y_UT1-50;   										// Y fuori rastelliera
ToolDown = Convert.ToDouble (AS3.Getfield (3005)); 			// DISTANZA DISCESA SU PORTAUTENSILE
UTpres = Convert.ToDouble (AS3.Getfield (3006));			// posizione maassima presetting

if (UTpres > 10)
{
	UTpres = 10;
}

// Fine inizializzare variabile

if(!exec.GetLED(56)||!exec.GetLED(57)||!exec.GetLED(58)) 		// controllo se la macchina e referenziata.
{
  MessageBox.Show("La macchina dovrebbe essere referenziata!");
  exec.Stop();
  return;
}

for (NewTool=1; NewTool<= UTpres; NewTool++)
{
	exec.Code ("G00 G53 Z" + ToolUp); 							//Z sopra
	while(exec.IsMoving()){}
	exec.AddStatusmessage("Utensile nel mandrino: " + OldTool);

	MovePos(OldTool);											//posizione data dal DRO es.1200

	while(exec.IsMoving()){}
	exec.Code ("G00 G53 Z" + ToolDown);							//abbassa la Z
	exec.Code ("G4 P1");
	while (exec.IsMoving ()) {}

	exec.Setoutpin (1, 17);										//Sets pin17 High
	exec.Code ("G4 P1.0"); 										//Wait for the tool to release
					

	exec.Code ("G01 F500 G53 Z" + ToolMove);					//alza la z
	exec.Code ("G00 G53 Y" + ToolY); 							//Y fuori
	while (exec.IsMoving ()) {}


	exec.AddStatusmessage ("Utensile nuovo: " + NewTool);
 
	OldTool=NewTool;

	MovePos(NewTool);											//muove verso il nuovo strumento

	while (exec.IsMoving ()) {}
	exec.Code ("G01 F400 G53 Z" + ToolDown);					//abbassa la Z
	exec.Code ("G4 P2");
	while (exec.IsMoving ()) {}


	exec.Clroutpin (1, 17); 									//Sets pin17 Low

	exec.Code ("G4 P2"); 										//prende lo strumento
	while (exec.IsMoving ()) {}


	exec.Code ("G01 F700 G53 Z" + ToolUP);						//alza la Z

//  ????? 		Call SetUserDRO (1000,NewTool)		'imposta il dro dell'utente

exec.Setcurrenttool (NewTool);

//+++++++++++++++++++++++ROUTINE DI MISURA ++++++++++++++++++


	exec.Code ("G0 G53 Y" + ToolY); 'Y fuori
	while (exec.IsMoving ()) {}

	//mi allineo sul palpatore

	exec.Code ("G1 G53 X" + X_palp + "F" + fmax); 
	while (exec.IsMoving ()) {}
	exec.Code ("G1 G53 Y" + Y_palp + "F" + fmax); 
	while (exec.IsMoving ()) {}

	exec.AddStatusmessage ("Misura utensile: " + NewTool);

	//scendo sul palpatore per vedere la misura della punta attuale
	exec.Code ("F" + fminZ);
	exec.Code ("G31 Z" & zmin);
	while (exec.IsMoving ()) {}


Zuno = exec.GetZpos ();									//memorizzo il valore di Z della punta attuale

if (NewTool == 1)
{
	Zzero = Zuno;
	counter = (196 + NewTool) - 1;
	AS3.Setfield (0.0000, counter);
	AS3.Validatefield (counter);
}
else
{
	if (Zuno < Zzero)
	{
		Zdelta = Zzero - Zuno;
		counter = (196 + NewTool) - 1;
		AS3.Setfield (Zdelta, counter);
		AS3.Validatefield (counter);
	}
	else
	{
		Zdelta = Zuno - Zzero;
		counter = (196 + NewTool) - 1;
		AS3.Setfield (Zdelta, counter);
		AS3.Validatefield (counter);
	}
}

exec.Code ("G01 F700 G53 Z" + ToolUP);								//alza la z
while (exec.IsMoving ()) {}
exec.Code ("G00 G53 Y" + ToolY); 									//Y fuori
while (exec.IsMoving ()) {}
Zuno = exec.GetZpos ();												//memorizzo il valore di Z della punta attuale

}

	//Muovo verso origine pezzo
	exec.Code ("G00 G53 Z" + ToolUp);								//Z sopra
	while (exec.IsMoving ()) {}
	exec.AddStatusmessage ("Procedura terminata");


#Events

// Start global variables 


int ToolUp = -1; 		// Z Hieght to Rapid from tool to tool
int ToolMove= -45; 		// movimento mentre cambia
int fminZ = 200;
int fmin = 1000;
int fmax = 3000;
int zmin = -200;
int counter = 0;

double NewTool = 0;
double OldTool;			//Utensile in mandrino
double X_palp;			//posizione X del palpatore (Settings -> Tool Change Location)
double Y_palp;			//posizione Y del palpatore
double X_UT1;
double Y_UT1;
double ToolY;   		// Y fuori rastelliera
double ToolDown; 		// DISTANZA DISCESA SU PORTAUTENSILE
double UTpres;			// posizione maassima presetting


// per ora non in uso
double Zzero = 0;
double Zuno = 0;
double Zdelta = 0;
double ZoffsetParam = 2;

// End global variables



void MovePos(int NumeroUtensile)
{
	switch (NumeroUtensile)
	{
			case 1 :
				Xpos = X_UT1
				YPos = Y_UT1
				break;
			case 2 :
				Xpos = X_UT1+45
				YPos = Y_UT1
				break;
			case 3 :
				Xpos = X_UT1+90
				YPos = Y_UT1
				break;
			case 4 :
				Xpos = X_UT1+135
				YPos = Y_UT1
				break;
			case 5 :
				Xpos = X_UT1+180
				YPos = Y_UT1
				break;
			case 6 :
				Xpos = X_UT1+225
				YPos = Y_UT1
				break;
			case 7 :
				Xpos = X_UT1+270
				YPos = Y_UT1
				break;
			case 8 :
				Xpos = X_UT1+315
				YPos = Y_UT1
				break;
			case 9 :
				Xpos = X_UT1+360
				YPos = Y_UT1
				break;
			case 10 :
				Xpos = X_UT1+405
				YPos = Y_UT1
				break;
			default :
				break;
	}
exec.Code ("G01 F2000 G53 X" + XPos);
exec.Code ("G01 F2000 G53 Y" + YPos); 
exec.AddStatusmessage ("Posizione utensile n: " + NumeroUtensile + "X= " + XPos + "Y= " + YPos);
}

              
