Hello Guest it is November 15, 2019, 03:04:20 PM

Author Topic: Little problem with my macro for zero piece  (Read 1073 times)

0 Members and 1 Guest are viewing this topic.

Little problem with my macro for zero piece
« on: April 02, 2018, 03:57:48 PM »
Hi Guys,
I need of your support for a problem with my macro that I use for my machine.
In this macro there is the comand M6T8 that load the probe in 8 position on my carousel..
But when the macro is started the z axis muove directly without wait the charge 8 tool.
In this macro is there necessity to write anything code for wait total charge after M6T8 code?
Following my macro and thanks on Advance



Amove = -300   ' massimo movimento per ricerca probe verso Z-
speed = 300   ' velocità di ricerca
lo_speed = 30   ' velocità di ricerca low
Aret = 25   ' di quanto arretra l'asse dopo il sensing per il secondo approccio
Amove1 = -(Aret * 5)   ' massimo movimento per ricerca probe on Z- per il secondo punto
curr_tool = GetCurrentTool()   ' tool nel mandrino




If GetOemLed (825) <> 0 Then ' sente se il probe è triggerato o scollegato

Code "(Il probe è triggerato o scollegato o il modulo MP1 è spento)"
End
Else


Code "M5"   ' ferma il mandrino
Code "M8"   ' ferma il refrigerante
GotoSafeZ()   ' porta in posizione di sicurezza Z
While IsMoving()   ' completa il percorso
Wend

Code "M6 T8"   ' carica il probe dalla posizione 8 del carosello


Code "G91"   ' spostamento relativo
CurrentFeed = GetOemDRO(818) ' legge il feedrate corrente

' primo trigger Z


Code "F" & speed   ' porta il feedrate alla velocità di approccio

Code "G31 Z " & Amove
While IsMoving()   ' completa il percorso a meno che si triggeri il probe
Wend

' secondo trigger Z

Code "G01 Z " & Aret
While IsMoving()   ' completa il percorso a meno che si triggeri il probe
Wend

Code "F" & lo_speed   ' porta il feedrate alla velocità di approccio low
Code "G31 Z " & Amove1
While IsMoving()   ' completa il percorso a meno che si triggeri il probe
Wend





SetOemDRO(802,0)   ' offset asse Z

Code "F" & speed   ' porta il feedrate alla velocità iniziale


Code "M6 T0" & curr_tool   ' ricarica il tool che era nel caroselo

Code "F" & CurrentFeed ' ripristina il feedrate originale
Code "G90"   ' rimette lo spostamento assoluto
GotoSafeZ()   ' riporta in posizione di sicurezza Z
While IsMoving()   ' completa il percorso
Wend


End If

Offline TPS

*
  •  1,406 1,406
    • View Profile
Re: Little problem with my macro for zero piece
« Reply #1 on: April 03, 2018, 02:24:27 AM »
that depends on your settings  in Gerneral Settings for toolchange,
and on the the code in your M6 macro's.
anything is possible, just try it.
if you find some mistakes, in my bad bavarian english,they are yours.
Re: Little problem with my macro for zero piece
« Reply #2 on: April 03, 2018, 02:31:32 AM »
But the macro M6 is ok of recalled from gcode... the problem is only this script... when I Call this macro the M6 comand don't run completly and the probe find the indicize without wait the end of M6..

Offline TPS

*
  •  1,406 1,406
    • View Profile
Re: Little problem with my macro for zero piece
« Reply #3 on: April 03, 2018, 02:52:27 AM »
can you post your M6 code ?
anything is possible, just try it.
if you find some mistakes, in my bad bavarian english,they are yours.
Re: Little problem with my macro for zero piece
« Reply #4 on: April 03, 2018, 03:54:45 AM »
this is the macro that I use from 2015... run perfectly for my machine...



' Macro cambio utensile automatico (ATC) Rel 4.00 del 25/9/2014

'**************** Definizione degli I/O (si considerano attivi ad 1 e disattivi a 0)

'   Output 1 comando carosello fuori
'      Input 1 sensore carosello fuori
'   Output 2 comando carosello dentro
'      Input 2 sensore carosello dentro
'   Output 3 pinza mandrino
'   Output 4 valvola aria pulizia mandrino
'      Home asse B sensore di zero su carosello
'   Output 8 perno freno mandrino               
'      Input 4 sensore di posizione mandrino
'   Output 7 Accende pompa circuito pneumatico

'*************** Definizione variabili

Dim old_tool As Single               'N. Utensile nel mandrino; 0 siginifica vuoto
Dim new_tool As Single               'N  Utensile da prelevare, numeri ammessi da 1 a 8
Dim tool As Single               'N. Utensile nel mandrino; 0 siginifica vuoto
Dim B_pos (8) As Double               ' sono le posizioni, in gradi, degli utensili messi sul carosello
Dim refrigerante As Single            ' memorizza se si stava usando il refrigerante o no
Dim old_speed As Single               ' memorizza la velocità del mandrino
Dim counter As Double               'timeout fermo mandrino
counter=300000                  'counter per attendere che il mandrino si fermi


'************** Definizione costanti

Const safe_z=-1               'posizione Z sicura per non urtare il carosello
Const load_z = -85               'posizione Z per presa utensile
Const timeout_carosello=3            'quanto tempo può impiegare il carosello per uscire o rientrare prima di errore
Const Z_speed=3000               'velocità di movimento asse Z
Const B_speed=4000               'velocità movimento carosello
Const vel_mandrino=40               'velocità mandindrino minima per posizionamento presa utensile

' le posizioni degli utensili nel carosello. Non si è usata una formula in modo da poter tarare esattamente ogni posizione

B_pos(1)=0
B_pos(2)=45
B_pos(3)=90
B_pos(4)=135
B_pos(5)=180
B_pos(6)=225
B_pos(7)=270
B_pos(8)=315



                     
'            **** Inizio Programma ****
   old_speed=GetRPM()               'legge la velocità mandrino


   old_tool = GetCurrentTool()
   new_tool = GetSelectedTool()
   If new_tool=old_tool Then            'se il nuovo utensile è uguale al vecchio allora non fare nulla
      End                  'esce dalla macro
   End If
   
   If(new_tool>8  Or new_tool<0) Then         'il numero utensile > 8 o < 0
      MachMsg("Il numero consentito di utensili è tra 0 e 8","ERRORE",0) 'scrive messaggio di errore
      Code "M9"               'ferma il refrigerante
      Code "M5"               'ferma il mandrino
      DoOEMButton(1003)            'ferma l'esecuzione del gcode
      End                  'esce dalla macro
   End If
 
    tool = GetSelectedTool()
     SetCurrentTool( tool )

   
' controlla se esiste lo zero macchina per assi Z e B
   
   If (GetOEMLed(809) And  GetOEMLed(811)) Then      'manca lo Zero macchina su Z o lo zero sul carosello
      MachMsg("NON E'STATO FATTO LO ZERO MACCHINA","ERRORE",0)   ' scrive messaggio di errore
      Code "M9"               'ferma il refrigerante
      Code "M5"               'ferma il mandrino
      DoOEMButton(1003)            'ferma l'esecuzione del gcode
      End                  'esce dalla macro
   End If

' Attiva Pompa circuito pneumatico   
   ActivateSignal(Output7)               'attiva pompa
   
' ferma refrigerante e ferma mandrino
   refrigerante= GetOemLed(13)            'se stavo usando il refrigerante o no
   Code "M9"                  'ferma il refrigerante
   Code "G53"                  'passa a coordinate assolute macchina
   Code "F" & Z_speed               'porta la velocità di Z a quella impostata per ATC
   Code "G01 G53 Z" & load_z      'porta Z nella posizione LOAD per far uscire il carosello e rimettere l'utensile dentro
   While IsMoving()               ' attendi fino a che si ferma
   Wend
   Code "S"&vel_mandrino               'rallenta il mandrino
   Code "M3"                  'parte il mandrino
   ActivateSignal(Output8)               'esce il perno freno mandrino
   sleep(3500)                  'aspetta 5 secondi
   Code "M5"                  'ferma  il mandrino,che comuque dovrebbe fermarsi appena il perno entra nella sede
   
   
'   While(IsActive(INPUT4)=FALSE And counter > 0)       'attende l'index posizione mandrino o timeout
'   counter=counter-1
'   Wend
counter=300000
'   Code "M5"
'   ActivateSignal(Output8)               'spenge mandrino
'   sleep(1000)                  'applica freno per 1 secondo
'   DeactivateSignal(Output8)            'toglie il freno
'   sleep (500)                  'leggero ritardo

   If (IsActive(INPUT4)=FALSE)   Then         'se il sensore index del mandrino non è attivo
      MachMsg("Il mandrino non si è fermato correttamente","ERRORE",0)   'scrive messaggio di errore
      Code "M5"               'spenge il mandrino
'Disattiva pompa circuito pneumatico   
      DeactivateSignal(Output7)            'disattiva pompa
      DoOEMButton(1003)            'ferma l'esecuzione del gcode
      DeActivateSignal(Output8)            'rientra il perno fermo mandrino
      End                  'esce dalla macro
   End If

If(new_tool=0) Then   'se devo riporre l'utensile senza caricarne uno nuovo

'   *********** Rimette l'utensile dentro il carosello

Code "F" & B_speed   
   Code "G01 G53 B" & B_pos(old_tool)            'posiziona il carosello sull'utensile da riporre
   While IsMoving()               'attendi fino a che si ferma
   Wend
   
' porta fuori il carosello

   ActivateSignal(Output1)               'sposta il carosello in fuori
   sleep(timeout_carosello * 1000)            ' attende che il carosello sia fuori
   DeactivateSignal(Output1)

   If(IsACTIVE(Input1)=0)   Then            ' se il sensore del carosello fuori non è attivo
      MachMsg("IL CAROSELLO E' BLOCCATO","ERRORE",0)      ' scrive messaggio di errore
      ActivateSignal(Output2)            'riporta il carosello dentro
      sleep(timeout_carosello*1000)         'aspetta
      DeactivateSignal(Output2)
      DoOEMButton(1003)            'ferma l'esecuzione del gcode
'Disattiva pompa circuito pneumatico   
      DeactivateSignal(Output7)            'disattiva pompa
      DeActivateSignal(Output8)            'rientra il perno fermo mandrino
      End                  'esce dalla macro
   End If

   ActivateSignal(Output3)               'apre la pinza del mandrino per mollare l'utensile
   sleep(1000)                  'aspetta un secondo
   ActivateSignal(Output4)               'flush aria compressa per pulizia
   sleep(500)                  'aspetta mezzo secondo
   DeActivateSignal(Output4)            'ferma flush aria compressa per pulizia
   Code "F" & Z_speed               'porta la velocità di Z a quella impostata per ATC
   Code "G01 G53 Z" & safe_z               'porta Z nella posizione Safe per far ruotare il carosello
   While IsMoving()               'attendi fino a che si ferma
   Wend
   DeActivateSignal(Output3)            'chiude la pinza del mandrino
   ActivateSignal(Output2)            'riporta il carosello dentro
      sleep(timeout_carosello*1000)         'aspetta
      DeactivateSignal(Output2)
      DoOEMButton(1003)            'ferma l'esecuzione del gcode
'Disattiva pompa circuito pneumatico   
      DeactivateSignal(Output7)            'disattiva pompa
      DeActivateSignal(Output8)            'rientra il perno fermo mandrino
      End                  'esce dalla macro
   End If

   
If(old_tool>0) Then   'al primo cambio utensili mi trovo il mandrino vuoto altrimenti devo rimettere l'utensile a posto

'   *********** Rimette l'utensile dentro il carosello                           
   
'  rimettere l'utensile a posto


   Code "F" & B_speed   
   Code "G01 G53 B" & B_pos(old_tool)            'posiziona il carosello sull'utensile da riporre
   While IsMoving()               'attendi fino a che si ferma
   Wend
   
' porta fuori il carosello

   ActivateSignal(Output1)               'sposta il carosello in fuori
   sleep(timeout_carosello * 1000)            ' attende che il carosello sia fuori
   DeactivateSignal(Output1)

   If(IsACTIVE(Input1)=0)   Then            ' se il sensore del carosello fuori non è attivo
      MachMsg("IL CAROSELLO E' BLOCCATO","ERRORE",0)      ' scrive messaggio di errore
      ActivateSignal(Output2)            'riporta il carosello dentro
      sleep(timeout_carosello*1000)         'aspetta
      DeactivateSignal(Output2)
      DoOEMButton(1003)            'ferma l'esecuzione del gcode
'Disattiva pompa circuito pneumatico   
      DeactivateSignal(Output7)            'disattiva pompa
      DeActivateSignal(Output8)            'rientra il perno fermo mandrino
      End                  'esce dalla macro
   End If

   ActivateSignal(Output3)               'apre la pinza del mandrino per mollare l'utensile
   sleep(1000)                  'aspetta un secondo
   ActivateSignal(Output4)               'flush aria compressa per pulizia
   sleep(500)                  'aspetta mezzo secondo
   DeActivateSignal(Output4)            'ferma flush aria compressa per pulizia
End If
   
'   *********** Va a prendere il nuovo utensile   
If(new_tool>0) Then                  ' se il nuovo utensile è da 1 a 8 allora lo prende                      
   Code "F" & Z_speed               'porta la velocità di Z a quella impostata per ATC
   Code "G01 G53 Z" & safe_z               'porta Z nella posizione Safe per far ruotare il carosello
   While IsMoving()               'attendi fino a che si ferma
   Wend
   DeActivateSignal(Output3)            'chiude la pinza del mandrino
   Code "F" & B_speed   
   Code "G01 G53 B" & B_pos(new_tool)            'si posiziona sul nuovo utensile
   While IsMoving()               ' attendi fino a che si ferma
   Wend
   
   
' porta fuori il carosello, se non è già fuori.....

   If(IsACTIVE(Input1)=0)   Then               'se il  carosello è ancora dentro
      ActivateSignal(Output1)               'sposta il carosello in fuori
      sleep(timeout_carosello * 1000)            'attende che il carosello sia fuori
      DeactivateSignal(Output1)

      If(IsACTIVE(Input1)=0)   Then            'se il sensore del carosello fuori non è attivo
         MachMsg("IL CAROSELLO E' BLOCCATO","ERRORE",0)      'scrive messaggio di errore
         ActivateSignal(Output2)            'riporta il carosello dentro
         sleep(timeout_carosello*1000)         'aspetta
         DeactivateSignal(Output2)
'Disattiva pompa circuito pneumatico   
         DeActivateSignal(Output8)            'rientra il perno fermo mandrino
         DeactivateSignal(Output7)            'disattiva pompa
         DoOEMButton(1003)            'ferma l'esecuzione del gcode
         End                  'esce dalla macro
      End If
   End If
End If
   
                        
   Code "F" & Z_speed               'porta la velocità di Z a quella impostata per ATC
   ActivateSignal(Output3)               'apre la pinza del mandrino
   Code "G01 G53 Z" & load_z               'porta Z nella posizione di presa
   While IsMoving()               'attendi fino a che si ferma
   Wend      
   DeActivateSignal(Output3)            'chiude la pinza del mandrino
   sleep(1000)                  'attendi 1 secondo
   ActivateSignal(Output2)               'riporta il carosello dentro
   sleep(timeout_carosello*1000)            'aspetta
   
   If(IsACTIVE(Input2)=0)   Then            'se il sensore del carosello dentro non è attivo
      MachMsg("IL CAROSELLO E' BLOCCATO","ERRORE",0)      'scrive messaggio di errore
      ActivateSignal(Output2)            'prova a riportare il carosello dentro
      sleep(timeout_carosello*1000)         'aspetta
      DeactivateSignal(Output2)
      DoOEMButton(1003)            'ferma l'esecuzione del gcode
'Disattiva pompa circuito pneumatico   
      DeActivateSignal(Output8)            'rientra il perno fermo mandrino
      DeactivateSignal(Output7)         'disattiva pompa
      End                  'esce dalla macro
   End If

'Disattiva pompa circuito pneumatico   
   DeactivateSignal(Output7)   'disattiva pompa
   DeactivateSignal(Output2)


   Code "G54"   'passa a coordinate precedenti
   Code "F" & Z_speed   'porta la velocità di Z a quella impostata per ATC
   Code "S" & old_speed   'ripristina velocitù mandrino
   If refrigerante Then
      Code "M7"   'se il refrigerante era acceso lo riaccende
   End If
   DeActivateSignal(Output8)            'rientra il perno fermo mandrino

   Code "M3"   'riaccende il mandrino   
   'Code "G01 Z" & GetToolchangestart(2)   'rimette Z dove era prima della macro
   While IsMoving()   'attendi fino a che si ferma
   Wend


End
Re: Little problem with my macro for zero piece
« Reply #5 on: April 03, 2018, 04:35:14 AM »
Now I try to write the code sleep (20000) after M6T8 and Now the toolchange run while wait 20 seconds... for me the macro need a code that told to Mach3 to wait the tool change and not run for find the digitize while run the M6

Offline TPS

*
  •  1,406 1,406
    • View Profile
Re: Little problem with my macro for zero piece
« Reply #6 on: April 03, 2018, 04:50:14 AM »
i have modified yout M6 code alittle bit, try this:

Code: [Select]
' Main routine for tool change -----------------------------------------------------
Global Const vbCritical = 16

Sub Main()
' Macro cambio utensile automatico (ATC) Rel 4.00 del 25/9/2014

'**************** Definizione degli I/O (si considerano attivi ad 1 e disattivi a 0)

'   Output 1 comando carosello fuori
'      Input 1 sensore carosello fuori
'   Output 2 comando carosello dentro
'      Input 2 sensore carosello dentro
'   Output 3 pinza mandrino
'   Output 4 valvola aria pulizia mandrino
'      Home asse B sensore di zero su carosello
'   Output 8 perno freno mandrino               
'      Input 4 sensore di posizione mandrino
'   Output 7 Accende pompa circuito pneumatico

'*************** Definizione variabili

Dim old_tool As Single               'N. Utensile nel mandrino; 0 siginifica vuoto
Dim new_tool As Single               'N  Utensile da prelevare, numeri ammessi da 1 a 8
Dim tool As Single               'N. Utensile nel mandrino; 0 siginifica vuoto
Dim B_pos (8) As Double               ' sono le posizioni, in gradi, degli utensili messi sul carosello
Dim refrigerante As Single            ' memorizza se si stava usando il refrigerante o no
Dim old_speed As Single               ' memorizza la velocità del mandrino
Dim counter As Double               'timeout fermo mandrino
counter=300000                  'counter per attendere che il mandrino si fermi


'************** Definizione costanti

Const safe_z=-1               'posizione Z sicura per non urtare il carosello
Const load_z = -85               'posizione Z per presa utensile
Const timeout_carosello=3            'quanto tempo può impiegare il carosello per uscire o rientrare prima di errore
Const Z_speed=3000               'velocità di movimento asse Z
Const B_speed=4000               'velocità movimento carosello
Const vel_mandrino=40               'velocità mandindrino minima per posizionamento presa utensile

' le posizioni degli utensili nel carosello. Non si è usata una formula in modo da poter tarare esattamente ogni posizione

B_pos(1)=0
B_pos(2)=45
B_pos(3)=90
B_pos(4)=135
B_pos(5)=180
B_pos(6)=225
B_pos(7)=270
B_pos(8)=315



                     
'            **** Inizio Programma ****
   old_speed=GetRPM()               'legge la velocità mandrino


   old_tool = GetCurrentTool()
   new_tool = GetSelectedTool()
   If new_tool=old_tool Then            'se il nuovo utensile è uguale al vecchio allora non fare nulla
      response = MsgBox ("tool already loaded",vbOK + vbCritical ,"ERRORE")   ' scrive messaggio di errore
      End                  'esce dalla macro
   End If
   
   If(new_tool>8  Or new_tool<0) Then         'il numero utensile > 8 o < 0
      response = MsgBox("Il numero consentito di utensili è tra 0 e 8",vbOK + vbCritical ,"ERRORE") 'scrive messaggio di errore
      Code "M9"               'ferma il refrigerante
      Code "M5"               'ferma il mandrino
      DoOEMButton(1003)            'ferma l'esecuzione del gcode
      End                  'esce dalla macro
   End If
 
    tool = GetSelectedTool()
     SetCurrentTool( tool )

   
' controlla se esiste lo zero macchina per assi Z e B
   
   If (GetOEMLed(809) And  GetOEMLed(811)) Then      'manca lo Zero macchina su Z o lo zero sul carosello
      response = MsgBox ("NON E'STATO FATTO LO ZERO MACCHINA",vbOK + vbCritical ,"ERRORE")   ' scrive messaggio di errore
      Code "M9"               'ferma il refrigerante
      Code "M5"               'ferma il mandrino
      DoOEMButton(1003)            'ferma l'esecuzione del gcode
      End                  'esce dalla macro
   End If

' Attiva Pompa circuito pneumatico   
   ActivateSignal(Output7)               'attiva pompa
   
' ferma refrigerante e ferma mandrino
   refrigerante= GetOemLed(13)            'se stavo usando il refrigerante o no
   Code "M9"                  'ferma il refrigerante
   Code "G53"                  'passa a coordinate assolute macchina
   Code "F" & Z_speed               'porta la velocità di Z a quella impostata per ATC
   Code "G01 G53 Z" & load_z      'porta Z nella posizione LOAD per far uscire il carosello e rimettere l'utensile dentro
   While IsMoving()               ' attendi fino a che si ferma
   Wend
   Code "S"&vel_mandrino               'rallenta il mandrino
   Code "M3"                  'parte il mandrino
   ActivateSignal(Output8)               'esce il perno freno mandrino
   sleep(3500)                  'aspetta 5 secondi
   Code "M5"                  'ferma  il mandrino,che comuque dovrebbe fermarsi appena il perno entra nella sede
   
   
'   While(IsActive(INPUT4)=FALSE And counter > 0)       'attende l'index posizione mandrino o timeout
'   counter=counter-1
'   Wend
counter=300000
'   Code "M5"
'   ActivateSignal(Output8)               'spenge mandrino
'   sleep(1000)                  'applica freno per 1 secondo
'   DeactivateSignal(Output8)            'toglie il freno
'   sleep (500)                  'leggero ritardo

   If (IsActive(INPUT4)=FALSE)   Then         'se il sensore index del mandrino non è attivo
      response = MsgBox ("Il mandrino non si è fermato correttamente",vbOK + vbCritical ,"ERRORE")   'scrive messaggio di errore
      Code "M5"               'spenge il mandrino
'Disattiva pompa circuito pneumatico   
      DeactivateSignal(Output7)            'disattiva pompa
      DoOEMButton(1003)            'ferma l'esecuzione del gcode
      DeActivateSignal(Output8)            'rientra il perno fermo mandrino
      End                  'esce dalla macro
   End If

If(new_tool=0) Then   'se devo riporre l'utensile senza caricarne uno nuovo

'   *********** Rimette l'utensile dentro il carosello

Code "F" & B_speed   
   Code "G01 G53 B" & B_pos(old_tool)            'posiziona il carosello sull'utensile da riporre
   While IsMoving()               'attendi fino a che si ferma
   Wend
   
' porta fuori il carosello

   ActivateSignal(Output1)               'sposta il carosello in fuori
   sleep(timeout_carosello * 1000)            ' attende che il carosello sia fuori
   DeactivateSignal(Output1)

   If(IsACTIVE(Input1)=0)   Then            ' se il sensore del carosello fuori non è attivo
      response = MsgBox ("IL CAROSELLO E' BLOCCATO",vbOK + vbCritical ,"ERRORE")      ' scrive messaggio di errore
      ActivateSignal(Output2)            'riporta il carosello dentro
      sleep(timeout_carosello*1000)         'aspetta
      DeactivateSignal(Output2)
      DoOEMButton(1003)            'ferma l'esecuzione del gcode
'Disattiva pompa circuito pneumatico   
      DeactivateSignal(Output7)            'disattiva pompa
      DeActivateSignal(Output8)            'rientra il perno fermo mandrino
      End                  'esce dalla macro
   End If

   ActivateSignal(Output3)               'apre la pinza del mandrino per mollare l'utensile
   sleep(1000)                  'aspetta un secondo
   ActivateSignal(Output4)               'flush aria compressa per pulizia
   sleep(500)                  'aspetta mezzo secondo
   DeActivateSignal(Output4)            'ferma flush aria compressa per pulizia
   Code "F" & Z_speed               'porta la velocità di Z a quella impostata per ATC
   Code "G01 G53 Z" & safe_z               'porta Z nella posizione Safe per far ruotare il carosello
   While IsMoving()               'attendi fino a che si ferma
   Wend
   DeActivateSignal(Output3)            'chiude la pinza del mandrino
   ActivateSignal(Output2)            'riporta il carosello dentro
      sleep(timeout_carosello*1000)         'aspetta
      DeactivateSignal(Output2)
      DoOEMButton(1003)            'ferma l'esecuzione del gcode
'Disattiva pompa circuito pneumatico   
      DeactivateSignal(Output7)            'disattiva pompa
      DeActivateSignal(Output8)            'rientra il perno fermo mandrino
      End                  'esce dalla macro
   End If

   
If(old_tool>0) Then   'al primo cambio utensili mi trovo il mandrino vuoto altrimenti devo rimettere l'utensile a posto

'   *********** Rimette l'utensile dentro il carosello                           
   
'  rimettere l'utensile a posto


   Code "F" & B_speed   
   Code "G01 G53 B" & B_pos(old_tool)            'posiziona il carosello sull'utensile da riporre
   While IsMoving()               'attendi fino a che si ferma
   Wend
   
' porta fuori il carosello

   ActivateSignal(Output1)               'sposta il carosello in fuori
   sleep(timeout_carosello * 1000)            ' attende che il carosello sia fuori
   DeactivateSignal(Output1)

   If(IsACTIVE(Input1)=0)   Then            ' se il sensore del carosello fuori non è attivo
      response = MsgBox ("IL CAROSELLO E' BLOCCATO",vbOK + vbCritical ,"ERRORE")      ' scrive messaggio di errore
      ActivateSignal(Output2)            'riporta il carosello dentro
      sleep(timeout_carosello*1000)         'aspetta
      DeactivateSignal(Output2)
      DoOEMButton(1003)            'ferma l'esecuzione del gcode
'Disattiva pompa circuito pneumatico   
      DeactivateSignal(Output7)            'disattiva pompa
      DeActivateSignal(Output8)            'rientra il perno fermo mandrino
      End                  'esce dalla macro
   End If

   ActivateSignal(Output3)               'apre la pinza del mandrino per mollare l'utensile
   sleep(1000)                  'aspetta un secondo
   ActivateSignal(Output4)               'flush aria compressa per pulizia
   sleep(500)                  'aspetta mezzo secondo
   DeActivateSignal(Output4)            'ferma flush aria compressa per pulizia
End If
   
'   *********** Va a prendere il nuovo utensile   
If(new_tool>0) Then                  ' se il nuovo utensile è da 1 a 8 allora lo prende                     
   Code "F" & Z_speed               'porta la velocità di Z a quella impostata per ATC
   Code "G01 G53 Z" & safe_z               'porta Z nella posizione Safe per far ruotare il carosello
   While IsMoving()               'attendi fino a che si ferma
   Wend
   DeActivateSignal(Output3)            'chiude la pinza del mandrino
   Code "F" & B_speed   
   Code "G01 G53 B" & B_pos(new_tool)            'si posiziona sul nuovo utensile
   While IsMoving()               ' attendi fino a che si ferma
   Wend
   
   
' porta fuori il carosello, se non è già fuori.....

   If(IsACTIVE(Input1)=0)   Then               'se il  carosello è ancora dentro
      ActivateSignal(Output1)               'sposta il carosello in fuori
      sleep(timeout_carosello * 1000)            'attende che il carosello sia fuori
      DeactivateSignal(Output1)

      If(IsACTIVE(Input1)=0)   Then            'se il sensore del carosello fuori non è attivo
         response = MsgBox ("IL CAROSELLO E' BLOCCATO",vbOK + vbCritical ,"ERRORE")      'scrive messaggio di errore
         ActivateSignal(Output2)            'riporta il carosello dentro
         sleep(timeout_carosello*1000)         'aspetta
         DeactivateSignal(Output2)
'Disattiva pompa circuito pneumatico   
         DeActivateSignal(Output8)            'rientra il perno fermo mandrino
         DeactivateSignal(Output7)            'disattiva pompa
         DoOEMButton(1003)            'ferma l'esecuzione del gcode
         End                  'esce dalla macro
      End If
   End If
End If
   
                       
   Code "F" & Z_speed               'porta la velocità di Z a quella impostata per ATC
   ActivateSignal(Output3)               'apre la pinza del mandrino
   Code "G01 G53 Z" & load_z               'porta Z nella posizione di presa
   While IsMoving()               'attendi fino a che si ferma
   Wend     
   DeActivateSignal(Output3)            'chiude la pinza del mandrino
   sleep(1000)                  'attendi 1 secondo
   ActivateSignal(Output2)               'riporta il carosello dentro
   sleep(timeout_carosello*1000)            'aspetta
   
   If(IsACTIVE(Input2)=0)   Then            'se il sensore del carosello dentro non è attivo
      response = MsgBox ("IL CAROSELLO E' BLOCCATO",vbOK + vbCritical ,"ERRORE")      'scrive messaggio di errore
      ActivateSignal(Output2)            'prova a riportare il carosello dentro
      sleep(timeout_carosello*1000)         'aspetta
      DeactivateSignal(Output2)
      DoOEMButton(1003)            'ferma l'esecuzione del gcode
'Disattiva pompa circuito pneumatico   
      DeActivateSignal(Output8)            'rientra il perno fermo mandrino
      DeactivateSignal(Output7)         'disattiva pompa
      End                  'esce dalla macro
   End If

'Disattiva pompa circuito pneumatico   
   DeactivateSignal(Output7)   'disattiva pompa
   DeactivateSignal(Output2)


   Code "G54"   'passa a coordinate precedenti
   Code "F" & Z_speed   'porta la velocità di Z a quella impostata per ATC
   Code "S" & old_speed   'ripristina velocitù mandrino
   If refrigerante Then
      Code "M7"   'se il refrigerante era acceso lo riaccende
   End If
   DeActivateSignal(Output8)            'rientra il perno fermo mandrino

   Code "M3"   'riaccende il mandrino   
   'Code "G01 Z" & GetToolchangestart(2)   'rimette Z dove era prima della macro
   While IsMoving()   'attendi fino a che si ferma
   Wend


End
End Sub


'global Sub's
Sub WaitForMove ()
While IsMoving()
Sleep(15)
Wend
End Sub



anything is possible, just try it.
if you find some mistakes, in my bad bavarian english,they are yours.
Re: Little problem with my macro for zero piece
« Reply #7 on: April 03, 2018, 04:51:47 AM »
Exactly what you change?

Offline TPS

*
  •  1,406 1,406
    • View Profile
Re: Little problem with my macro for zero piece
« Reply #8 on: April 03, 2018, 04:57:20 AM »
only covered the code into a

Sub Main()

End Sub

and replaced the MachMSG to MSGBox, they seemed not to work on my System.
anything is possible, just try it.
if you find some mistakes, in my bad bavarian english,they are yours.
Re: Little problem with my macro for zero piece
« Reply #9 on: April 03, 2018, 05:01:46 AM »
Okk I Will try it!