' Macro per azzerare l'asse Z utilizzando un probe
' di altezza conosciuta posizionato sopra il pezzo da lavorare
' versione 1.4 3/11/2011
' Robot Factory
'
' Condizioni macchina:
' Zero macchina: X tutto a destra, Y tutto dietro, Z tutto in alto.
'
' Direzioni macchina:
' Asse X, verso sinistra +X verso destra -X
' Asse Y, verso dietro -Y verso avanti +Y
' Asse Z, verso alto +Z verso basso -Z
'
' INDISPENSABILE:
' Abilitare e verificarne il funzionamento dell'ingresso PROBE (port 1 pin 10)(Config | Input Signal)
'
'  
' Condizioni di lavoro iniziali:
' 1) Referenziare a ZERO macchina
' 2) Portarsi sullo Zero pezzo rispetto a X ed Y
' 3) Azzerare i contatori X ed Y
' 4) Spostarsi in una posizione X - Y comoda per posizionare il probe
' 5) Portare l'asse Z in una posizione adatta per la misurazione
' 6) Posizionare il probe
' 7) Premere Set 'Z'
' 8) Inizio lavorazione

' variabili del programma

'     ToolPathOnOff = 132			' mi carico la definizione del tasto tool path
     fmax = 1000			' imposto il feedrate massimo
     fmin = 150				' imposto il feedrate per la misurazione
     rifalt = GetUserDRO(1154)  ' <-----  Altezza (spessore) del probe
     zmin = -20			' profondit oltre il probe
     Zcontact = GetOemLed (825)		' led Digitizer

' verifico se  impostato il valore con l'altezza del probe e se non c' contatto

If rifalt <> 0 Then		' altezza del probe

If Zcontact = 0 Then			' contatto in probe

DoSpinStop() 				' fermo in ogni caso per sicurezza il motore M5

' controllo se la macchina  stata referenziata

If (GetLed (7) = 0) And (GetLed (8) = 0) And (GetLed (9) = 0) Then	' controllo se la macchina  stata referenziata

	If GetOEMLed (16) Then	' controllo di non essere in coordinate macchina
		DoOEMButton (256)
 		While IsMoving()
 		Wend
	End If

 Call SetDro (2,0)			' porto il contatore Z a zero
 While IsMoving()
 Wend

Response = MsgBox ("E' stato impostato l'asse Z per il probe?", 4 , "ATTENZIONE")
 If (Response = 6) Then 
  i = 99
 Else
   MsgBox ("Bisognava impostato l'asse Z per il probe")
 End If

If i <> 99 Then				' non faccio nulla

 MsgBox ("Non posso utilizzare la funzione di azzeramento")

Else

zzero = 0
zzero = GetDRO (32)			' memorizzo la posizione iniziale ASSOLUTA di Z

If zzero < -30 Then	' se pezzo troppo alto non posso usare il probe

' inizio programma

    DoOEMButton (132)	' disabilito il tool path
 	While IsMoving()
 	Wend

Response = MsgBox ("E' stato posizionato il probe?", 4 , "ATTENZIONE")
 If (Response = 6) Then 
  i = 99
 Else
  MsgBox ("Bisognava posizionare il probe")
 End If

     If i <> 99 Then				' non faccio nulla

      MsgBox ("Non posso azzerare l'asse Z")

     Else

	 Call SetDro (2,0)			' porto il contatore Z a zero
	 While IsMoving()
	 Wend

         code "G0 F" & fmin			' porto il feedrate al minimo
         While IsMoving()
         Wend
	 	          
         If IsSuchSignal (22) Then		' scendo sul probe
         	code "G31 Z" & zmin
         	While IsMoving()
         	Wend
         End If
         
         zuno = GetVar (2002)			' memorizzo il valore di Z
         zsu = zuno + 5
         code "G1 Z" & zsu			' salgo per la seconda misura
         While IsMoving()
         Wend
         
         If IsSuchSignal (22) Then		' scendo una seconda volta
         	code "G31 Z" & zmin
         	While IsMoving()
         	Wend
         End If
         
         zdue = GetVar (2002)			' memorizzo il valore di Z
         znew = (zuno + (zdue)) / 2
         code "G0 F" & fmax			' porto il feedrate al valore massimo
         While IsMoving()
         Wend

         code "G1 G53 Z" & zzero		' salgo fino a zzero
         While IsMoving()
         Wend
         
         Response = MsgBox ("E' stato tolto il probe?", 4 , "ATTENZIONE")
         	If (Response = 6) Then 
         		i = 99
         	End If
         
         If i <> 99 Then			' non faccio nulla

             MsgBox ("Non posso azzerare l'asse Z")
         
         Else

                 zpro = 0
                 zpro = znew - rifalt
                 zpez = 0
                 zpez = zzero + (zpro)
                 code "G1 X0 Y0"		' vado a zero X e zero Y
                 While IsMoving()
                 Wend
                 
                 code "G1 G53 Z" & zpez		' porto Z a zero pezzo
                 While IsMoving()
                 Wend

                 Call SetDro (2,0)		' porto il contatore Z a zero
                 While IsMoving()
                 Wend

                 MsgBox ("Ora si pu iniziare il lavoro")
         End If             
     End If

' se pezzo troppo alto non posso usare il probe
Else
	MsgBox ("Non ci sono le condizioni per effettuare l'operazione")
End If
End If
' controllo se la macchina  stata referenziata
Else
	MsgBox ("Bisogna referenziare la macchina")
End If
Call DoOEMButton (132)	' abilito il tool path
 While IsMoving()
 Wend
' contatto in probe
Else
 MsgBox ("Contatto nel probe")
End If
' altezza del probe
Else
  MsgBox ("Non  stata inserita l'altezza del probe")
End If
