Funzionerà? Cerco aiuto per macro ATC con Mach3. Si inizia..
- Pedro
- God
- Messaggi: 7084
- Iscritto il: domenica 6 aprile 2008, 18:44
- Località: Roma
Re: Funzionerà? Cerco aiuto per macro ATC con Mach3. Si iniz
"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."
- Pedro
- God
- Messaggi: 7084
- Iscritto il: domenica 6 aprile 2008, 18:44
- Località: Roma
Re: Funzionerà? Cerco aiuto per macro ATC con Mach3. Si iniz
Zebrauno ha scritto:E chi ha scritto "invece", anzi, proprio come alternativa di kanalog a mio avviso la Umax puo' far gola almeno a 50% di chi oggi la usa insieme a kflop.
Poi costa poco e si installa in mezzo lampo!
avevo compreso male

"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."
- pierpaolo
- Senior
- Messaggi: 1319
- Iscritto il: martedì 19 giugno 2012, 1:10
- Località: roma
Re: Funzionerà? Cerco aiuto per macro ATC con Mach3. Si iniz
tranquillo, quando hai tempo!!Pedro ha scritto:si, per non lasciarla in pressione dopo che ha depositato l'ho chiusa ma non riaperta. Domani, se avrò tempo, correggerò. Per questo ho messo la macro, 4 occhi vedono sempre meglio

poi cmq una volta stesa la "definitiva", ti dico come la interpreto io e mi dici se è ok o se invece nn ci ho capito nulla!!!


- Pedro
- God
- Messaggi: 7084
- Iscritto il: domenica 6 aprile 2008, 18:44
- Località: Roma
Re: Funzionerà? Cerco aiuto per macro ATC con Mach3. Si iniz
corrette alcune cose, Dagli una occhiata se vedi qualcosa di macroscopico nella sequenza che ho di nuovo saltato
' Macro cambio utensile automatico (ATC) Rel 1.03 del 16/10/2013
'**************** 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 B sensore di zero su carosello
' Output 5 freno mandrino
' Input 4 sensore di posizione mandrino
'*************** 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 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
'************** Definizione costanti
Const safe_z=-11 'posizione z sicura per il carosello
Const load_z = -44 'posizione z per presa utensile
Const timeout_carosello=10 'quanto tempo può impiegare il carosello per uscire o rientrare prima di errore
Const Z_speed=30 'velocità di movimento asse Z
Const B_speed=30 'velocità movimento carosello
' 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)=45
B_pos(7)=270
B_pos(8)=315
' **** Inizio Programma ****
old_speed=GetRPM() 'legge la velocità mandrino
' controlla se esiste lo zero macchina per assi Z e B
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 (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("M5 M9") 'ferma il refrigerante e ferma il mandrino
DoOEMButton(1003) 'ferma l'esecuzione del gcode
End 'esce dalla macro
End If
' 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 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("S20") 'rallenta il mandrino
counter=300000
While(IsACTIVE(Input4)=0 Or counter > 0) 'attende l'index posizione mandrino o timeout
couter=counter-1
Wend
sleep (500) 'leggero ritardo
If (IsActive(INPUT4)=0) Then 'se il sensore del carosello fuori non è attivo
MachMsg("Il mandrino non si è fermato correttamente","ERRORE",0) 'scrive messaggio di errore
DoOEMButton(1003) 'ferma l'esecuzione del gcode
End 'esce dalla macro
End If
Code "M5"
ActivateSignal(Output5) 'attiva freno mandrino su inverter
sleep(1000) 'applica freno per 1 secondo
DeactivateSignal(Output5) 'toglie il freno
If(new_tool>8) Then 'il numero utensile > 8
MachMsg("Il numero consentito di utensili è tra 1 e 8","ERRORE",0) 'scrive messaggio di errore
DoOEMButton(1003) 'ferma l'esecuzione del gcode
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 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
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
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
Code "F" & Z_speed 'porta la velocità di Z a quella impostata per ATC
Code "G01 Z" & safe_z 'porta Z nella posizione Safe per far ruotare il carosello
DeActivateSignal(Output3) 'chiude la pinza del mandrino
While IsMoving() 'attendi fino a che si ferma
Wend
Code "F" & B_speed
Code "G01 B" & B_pos(new_tool) 'si posiziona sul nuovo utensile
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
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
End 'esce dalla macro
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 Z" & load_z 'porta Z nella posizione di presa
While IsMoving() 'attendi fino a che si ferma
Wend
ActivateSignal(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 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
End 'esce dalla macro
End If
DeactivateSignal(Output2)
Code "G54" 'passa a coordinate precedenti
Code "F" & Z_speed 'porta la velocità di Z a quella impostata per ATC
Code "G01 Z" & GetToolchangestart(2) 'rimette Z dove era prima della macro
While IsMoving() 'attendi fino a che si ferma
Wend
If refrigerante Then
Code "M7" 'se il refrigerante era acceso lo riaccende
End If
END
' Macro cambio utensile automatico (ATC) Rel 1.03 del 16/10/2013
'**************** 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 B sensore di zero su carosello
' Output 5 freno mandrino
' Input 4 sensore di posizione mandrino
'*************** 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 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
'************** Definizione costanti
Const safe_z=-11 'posizione z sicura per il carosello
Const load_z = -44 'posizione z per presa utensile
Const timeout_carosello=10 'quanto tempo può impiegare il carosello per uscire o rientrare prima di errore
Const Z_speed=30 'velocità di movimento asse Z
Const B_speed=30 'velocità movimento carosello
' 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)=45
B_pos(7)=270
B_pos(8)=315
' **** Inizio Programma ****
old_speed=GetRPM() 'legge la velocità mandrino
' controlla se esiste lo zero macchina per assi Z e B
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 (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("M5 M9") 'ferma il refrigerante e ferma il mandrino
DoOEMButton(1003) 'ferma l'esecuzione del gcode
End 'esce dalla macro
End If
' 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 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("S20") 'rallenta il mandrino
counter=300000
While(IsACTIVE(Input4)=0 Or counter > 0) 'attende l'index posizione mandrino o timeout
couter=counter-1
Wend
sleep (500) 'leggero ritardo
If (IsActive(INPUT4)=0) Then 'se il sensore del carosello fuori non è attivo
MachMsg("Il mandrino non si è fermato correttamente","ERRORE",0) 'scrive messaggio di errore
DoOEMButton(1003) 'ferma l'esecuzione del gcode
End 'esce dalla macro
End If
Code "M5"
ActivateSignal(Output5) 'attiva freno mandrino su inverter
sleep(1000) 'applica freno per 1 secondo
DeactivateSignal(Output5) 'toglie il freno
If(new_tool>8) Then 'il numero utensile > 8
MachMsg("Il numero consentito di utensili è tra 1 e 8","ERRORE",0) 'scrive messaggio di errore
DoOEMButton(1003) 'ferma l'esecuzione del gcode
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 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
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
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
Code "F" & Z_speed 'porta la velocità di Z a quella impostata per ATC
Code "G01 Z" & safe_z 'porta Z nella posizione Safe per far ruotare il carosello
DeActivateSignal(Output3) 'chiude la pinza del mandrino
While IsMoving() 'attendi fino a che si ferma
Wend
Code "F" & B_speed
Code "G01 B" & B_pos(new_tool) 'si posiziona sul nuovo utensile
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
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
End 'esce dalla macro
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 Z" & load_z 'porta Z nella posizione di presa
While IsMoving() 'attendi fino a che si ferma
Wend
ActivateSignal(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 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
End 'esce dalla macro
End If
DeactivateSignal(Output2)
Code "G54" 'passa a coordinate precedenti
Code "F" & Z_speed 'porta la velocità di Z a quella impostata per ATC
Code "G01 Z" & GetToolchangestart(2) 'rimette Z dove era prima della macro
While IsMoving() 'attendi fino a che si ferma
Wend
If refrigerante Then
Code "M7" 'se il refrigerante era acceso lo riaccende
End If
END
Non hai i permessi necessari per visualizzare i file e le foto allegati in questo messaggio. Per visualizzare tali file devi registrarti ed effettuare il Login
"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."
- pierpaolo
- Senior
- Messaggi: 1319
- Iscritto il: martedì 19 giugno 2012, 1:10
- Località: roma
Re: Funzionerà? Cerco aiuto per macro ATC con Mach3. Si iniz
Dopo lo stampo e gli do un'occhiata in tranquillità di modo da metterci un pochino di cervello!! 

- pierpaolo
- Senior
- Messaggi: 1319
- Iscritto il: martedì 19 giugno 2012, 1:10
- Località: roma
Re: Funzionerà? Cerco aiuto per macro ATC con Mach3. Si iniz
allora Pedro, ora sembra andare ma avrei delle domande su quelle che sicuramente saranno delle sviste e nn errori!!!
in rosso la parte della tua macro in blu le mie considerazioni (forse anche sbagliate
)
' Macro cambio utensile automatico (ATC) Rel 1.03 del 16/10/2013
'**************** 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 B sensore di zero su carosello
' Output 5 freno mandrino
' Input 4 sensore di posizione mandrino
'*************** 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 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
'************** Definizione costanti
Const safe_z=-11 'posizione z sicura per il carosello
Const load_z = -44 'posizione z per presa utensile
Const timeout_carosello=10 'quanto tempo può impiegare il carosello per uscire o rientrare prima di errore
Const Z_speed=30 'velocità di movimento asse Z
Const B_speed=30 'velocità movimento carosello
' 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)=45 forse =225?
B_pos(7)=270
B_pos(8)=315
' **** Inizio Programma ****
old_speed=GetRPM() 'legge la velocità mandrino
' controlla se esiste lo zero macchina per assi Z e B
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 (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("M5 M9") 'ferma il refrigerante e ferma il mandrino
DoOEMButton(1003) 'ferma l'esecuzione del gcode
End 'esce dalla macro
End If
' 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 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("S20") 'rallenta il mandrino
counter=300000
While(IsACTIVE(Input4)=0 Or counter > 0) 'attende l'index posizione mandrino o timeout
couter=counter-1
Wend
sleep (500) 'leggero ritardo
If (IsActive(INPUT4)=0) Then 'se il sensore del carosello fuori non è attivo sensore mandrino?
MachMsg("Il mandrino non si è fermato correttamente","ERRORE",0) 'scrive messaggio di errore
DoOEMButton(1003) 'ferma l'esecuzione del gcode
End 'esce dalla macro
End If
Code "M5"
ActivateSignal(Output5) 'attiva freno mandrino su inverter
sleep(1000) 'applica freno per 1 secondo
DeactivateSignal(Output5) 'toglie il freno
si potrebbe mantenere il freno per tutto il cambio o porterebbe altri errori?
If(new_tool>8) Then 'il numero utensile > 8
MachMsg("Il numero consentito di utensili è tra 1 e 8","ERRORE",0) 'scrive messaggio di errore
DoOEMButton(1003) 'ferma l'esecuzione del gcode
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 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
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
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
Code "F" & Z_speed 'porta la velocità di Z a quella impostata per ATC
Code "G01 Z" & safe_z 'porta Z nella posizione Safe per far ruotare il carosello
DeActivateSignal(Output3) 'chiude la pinza del mandrino tra questi si potrebbe inserire un leggero ritardo prima della chiusura per evitare che si richiuda sul vecchio utensile?
While IsMoving() 'attendi fino a che si ferma
Wend
Code "F" & B_speed
Code "G01 B" & B_pos(new_tool) 'si posiziona sul nuovo utensile
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 quando è rientrato?
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
End 'esce dalla macro
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 Z" & load_z 'porta Z nella posizione di presa
While IsMoving() 'attendi fino a che si ferma
Wend
ActivateSignal(Output3) 'chiude la pinza del mandrino riapre una pinza già aperta? o forze era stata chiusa?
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 fuori non è attivo dovrebbe essere sensore carosello DENTRO!
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
End 'esce dalla macro
End If
DeactivateSignal(Output2)
Code "G54" 'passa a coordinate precedenti
Code "F" & Z_speed 'porta la velocità di Z a quella impostata per ATC
Code "G01 Z" & GetToolchangestart(2) 'rimette Z dove era prima della macro
While IsMoving() 'attendi fino a che si ferma
Wend
If refrigerante Then
Code "M7" 'se il refrigerante era acceso lo riaccende
End If
END
segnalato questo mi sembra che ci siamo, ma tu sicuramente avrai l'occhio più allenato del mio per queste cose.... dimmi tu se erano segnalazioni giuste altrimenti nn considerarle!!!
nn sto nella pelle tanto sono contento di vedere che sta prendendo forma qualcosa che per me era impossibile anche da capire!!!
in rosso la parte della tua macro in blu le mie considerazioni (forse anche sbagliate

' Macro cambio utensile automatico (ATC) Rel 1.03 del 16/10/2013
'**************** 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 B sensore di zero su carosello
' Output 5 freno mandrino
' Input 4 sensore di posizione mandrino
'*************** 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 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
'************** Definizione costanti
Const safe_z=-11 'posizione z sicura per il carosello
Const load_z = -44 'posizione z per presa utensile
Const timeout_carosello=10 'quanto tempo può impiegare il carosello per uscire o rientrare prima di errore
Const Z_speed=30 'velocità di movimento asse Z
Const B_speed=30 'velocità movimento carosello
' 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)=45 forse =225?
B_pos(7)=270
B_pos(8)=315
' **** Inizio Programma ****
old_speed=GetRPM() 'legge la velocità mandrino
' controlla se esiste lo zero macchina per assi Z e B
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 (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("M5 M9") 'ferma il refrigerante e ferma il mandrino
DoOEMButton(1003) 'ferma l'esecuzione del gcode
End 'esce dalla macro
End If
' 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 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("S20") 'rallenta il mandrino
counter=300000
While(IsACTIVE(Input4)=0 Or counter > 0) 'attende l'index posizione mandrino o timeout
couter=counter-1
Wend
sleep (500) 'leggero ritardo
If (IsActive(INPUT4)=0) Then 'se il sensore del carosello fuori non è attivo sensore mandrino?
MachMsg("Il mandrino non si è fermato correttamente","ERRORE",0) 'scrive messaggio di errore
DoOEMButton(1003) 'ferma l'esecuzione del gcode
End 'esce dalla macro
End If
Code "M5"
ActivateSignal(Output5) 'attiva freno mandrino su inverter
sleep(1000) 'applica freno per 1 secondo
DeactivateSignal(Output5) 'toglie il freno
si potrebbe mantenere il freno per tutto il cambio o porterebbe altri errori?
If(new_tool>8) Then 'il numero utensile > 8
MachMsg("Il numero consentito di utensili è tra 1 e 8","ERRORE",0) 'scrive messaggio di errore
DoOEMButton(1003) 'ferma l'esecuzione del gcode
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 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
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
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
Code "F" & Z_speed 'porta la velocità di Z a quella impostata per ATC
Code "G01 Z" & safe_z 'porta Z nella posizione Safe per far ruotare il carosello
DeActivateSignal(Output3) 'chiude la pinza del mandrino tra questi si potrebbe inserire un leggero ritardo prima della chiusura per evitare che si richiuda sul vecchio utensile?
While IsMoving() 'attendi fino a che si ferma
Wend
Code "F" & B_speed
Code "G01 B" & B_pos(new_tool) 'si posiziona sul nuovo utensile
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 quando è rientrato?
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
End 'esce dalla macro
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 Z" & load_z 'porta Z nella posizione di presa
While IsMoving() 'attendi fino a che si ferma
Wend
ActivateSignal(Output3) 'chiude la pinza del mandrino riapre una pinza già aperta? o forze era stata chiusa?
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 fuori non è attivo dovrebbe essere sensore carosello DENTRO!
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
End 'esce dalla macro
End If
DeactivateSignal(Output2)
Code "G54" 'passa a coordinate precedenti
Code "F" & Z_speed 'porta la velocità di Z a quella impostata per ATC
Code "G01 Z" & GetToolchangestart(2) 'rimette Z dove era prima della macro
While IsMoving() 'attendi fino a che si ferma
Wend
If refrigerante Then
Code "M7" 'se il refrigerante era acceso lo riaccende
End If
END
segnalato questo mi sembra che ci siamo, ma tu sicuramente avrai l'occhio più allenato del mio per queste cose.... dimmi tu se erano segnalazioni giuste altrimenti nn considerarle!!!

nn sto nella pelle tanto sono contento di vedere che sta prendendo forma qualcosa che per me era impossibile anche da capire!!!

-
- God
- Messaggi: 5318
- Iscritto il: venerdì 1 febbraio 2008, 11:28
- Località: Modena
Re: Funzionerà? Cerco aiuto per macro ATC con Mach3. Si iniz
C'è sempre da considerare la Legge di Murphy: «Se qualcosa può andar... male, lo farà.»
Per cui , finchè non è tutto pronto , e si fa il primo collaudo , non si saprà cosa andare a modificare , c'è da aspettarsi di dover dedicare un po di tempo per sistemare le cose e trovare i bug , Non sono un porta gliella , ma è sempre così
Per cui , finchè non è tutto pronto , e si fa il primo collaudo , non si saprà cosa andare a modificare , c'è da aspettarsi di dover dedicare un po di tempo per sistemare le cose e trovare i bug , Non sono un porta gliella , ma è sempre così

CIAO A TUTTI !
- Pedro
- God
- Messaggi: 7084
- Iscritto il: domenica 6 aprile 2008, 18:44
- Località: Roma
Re: Funzionerà? Cerco aiuto per macro ATC con Mach3. Si iniz
il resto? devo pensarci su sopratutto alla frenatura. Si può mantenere il freno si tutto il tempo, per il motore e l'inverter va bene? Il fatto che non so come si comportano i tuoi.
il movimento del carosello, dentro e fuori: in effetti se mette un utensile a posto già dovrebbe essere fuori, ok ma non succede nulla secondo me. La seconda parte, quella dell'utensile nuovo, la esegue comunque mentre la prima solo se deve rimettere l'utensile a posto, quindi tira fuori il carosello. Insomma invece di fare fuori-dentro-fuori faccio fare fuori-fuori, che nulla cambia, potrei flagagre per ottimizzare, ok..ma credo che nulla possa far danno
la pinza, si un ritardo si potrebbe mettere.
Vediamo se facciamo una versione almeno in teoria funzionante

tu quando sarai pronto con l'elettronica per provare il tutto?
rispondo a torn: vero, però una base di cosa si vuole fare bisogna averla. Purtroppo l'hardware non è pronto e questo complica, se fosse stato pronto avrei fatto una routine per volta e non sarei andato avanti fino a che non si era sicuri che funzionasse ma siccome si aveva premura di avere la macro

poco male, almeno qualche idea ce la siamo scambiata, meno tempo perso poi...che se poi decido di partire per la polinesia per i prossimi 5 anni almeno pierpaolo può diverticisi

"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."
- pierpaolo
- Senior
- Messaggi: 1319
- Iscritto il: martedì 19 giugno 2012, 1:10
- Località: roma
Re: Funzionerà? Cerco aiuto per macro ATC con Mach3. Si iniz
mha.... io sono dell'idea di dare di principio fiducia a chi sa il fatto suo... ovvio poi il giorno che si installerà il tutto (e credetemi, se avessi la macchina sotto mano avrei già cominciato a fare prove sulla cnc fin dal primo post) si cercherà di starsene belli belli con la mano sull'emergenza e con le impostazioni di velocità al minimo!!!
si può sbagliare è vero, ma nn sbaglia solo chi nn si cimenta...
quindi diciamo che credo fermamente in Pedro e in quelle che sono le sue capacità vista la ipetuta esperienza... in linea teorica la terra gira attorno a se stessa in 24H ma tutti sappiamo che nn è così... quindi essendo ancora qui a scrivere se ne deduce che nn sia proprio deleteria come cosa!!!
speriamo che la stessa teoria sia applicata alla mia cnc!!!

si può sbagliare è vero, ma nn sbaglia solo chi nn si cimenta...
quindi diciamo che credo fermamente in Pedro e in quelle che sono le sue capacità vista la ipetuta esperienza... in linea teorica la terra gira attorno a se stessa in 24H ma tutti sappiamo che nn è così... quindi essendo ancora qui a scrivere se ne deduce che nn sia proprio deleteria come cosa!!!
speriamo che la stessa teoria sia applicata alla mia cnc!!!



- pierpaolo
- Senior
- Messaggi: 1319
- Iscritto il: martedì 19 giugno 2012, 1:10
- Località: roma
Re: Funzionerà? Cerco aiuto per macro ATC con Mach3. Si iniz
allora, per quanto riguarda la parte hardware ci sto ancora tribolando ma ne verrò a capo prima o poi... Spero entro la fine della prox settimana, lavoro permettendo!
Per il discorso freno DC sempre attaccato se il cambio utensile (e quindi il freno) duri più di 10 secondi allora è sconsigliabile...
Per ora teniamo la tua strada pedro, che mi sembra anche l'unica valida...


Per il discorso freno DC sempre attaccato se il cambio utensile (e quindi il freno) duri più di 10 secondi allora è sconsigliabile...
Per ora teniamo la tua strada pedro, che mi sembra anche l'unica valida...


- Pedro
- God
- Messaggi: 7084
- Iscritto il: domenica 6 aprile 2008, 18:44
- Località: Roma
Re: Funzionerà? Cerco aiuto per macro ATC con Mach3. Si iniz
nuova release con piccole correzioni come da suggerimenti
Non hai i permessi necessari per visualizzare i file e le foto allegati in questo messaggio. Per visualizzare tali file devi registrarti ed effettuare il Login
"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."
- pierpaolo
- Senior
- Messaggi: 1319
- Iscritto il: martedì 19 giugno 2012, 1:10
- Località: roma
Re: Funzionerà? Cerco aiuto per macro ATC con Mach3. Si iniz
Grande Pedro....
Ora sto combattendo con la scheda che sembra funzionare alla perfezione, ma una volta collegata a mach3 sembra riconoscere solo l'input1 ci sono molti ponticelli e devo vedere se magari uno di quello è impostato malamente!!!
Intanto Pedro se ci trovi all'interno della macro qualcosa da migliorare, lo sai che siamo tutti qui a leggerti...
Ora sto combattendo con la scheda che sembra funzionare alla perfezione, ma una volta collegata a mach3 sembra riconoscere solo l'input1 ci sono molti ponticelli e devo vedere se magari uno di quello è impostato malamente!!!
Intanto Pedro se ci trovi all'interno della macro qualcosa da migliorare, lo sai che siamo tutti qui a leggerti...

- Pedro
- God
- Messaggi: 7084
- Iscritto il: domenica 6 aprile 2008, 18:44
- Località: Roma
Re: Funzionerà? Cerco aiuto per macro ATC con Mach3. Si iniz
scheda curiosaaa
vabbè, siamo in attesa di provare a muovere qualcosa

vabbè, siamo in attesa di provare a muovere qualcosa

"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."
- pierpaolo
- Senior
- Messaggi: 1319
- Iscritto il: martedì 19 giugno 2012, 1:10
- Località: roma
Re: Funzionerà? Cerco aiuto per macro ATC con Mach3. Si iniz
Più che schedina curiosaaa direi schedaccia cineseeee!!!
Cmq dopo ripetute e innumerevoli prove sono riuscito a settarla con mach3 domani vi posto una foto delle impostazioni che magari possono essere utili a qualcuno!!! Ho dovuto inventarmi i draghi ed impostare i pin di start reg a -1 per farli coincidere con le impostazioni della scheda mhaa valla a capire...
Intanto sto aspettando anche il driver per il carosello che dovrebbe arrivare a giorni...
Pedro, nella macro leggevo che proprio all'inizio del programma la macro controlla se esiste lo 0 macchina ( ma in che modo? Forse mach3 riconosce se all'accensione è stato fatto oppure no?)
Inoltre vedevo che passa subito alle coordinate assolute macchina con G53, ma con questo sposta in una posizione sicura la tavola con x e y? ( per esempio a x0 e y0)
C'è forse da impostare per x e y le posizioni di cambio utensile in mach3?
Vabbè per ora è già un successo aver settato sta scheda
nella speranza poi di acquistare una smotstepper!!! Che da quanto ho letto è abbastanza semplice nel settaggio!!!

Cmq dopo ripetute e innumerevoli prove sono riuscito a settarla con mach3 domani vi posto una foto delle impostazioni che magari possono essere utili a qualcuno!!! Ho dovuto inventarmi i draghi ed impostare i pin di start reg a -1 per farli coincidere con le impostazioni della scheda mhaa valla a capire...
Intanto sto aspettando anche il driver per il carosello che dovrebbe arrivare a giorni...
Pedro, nella macro leggevo che proprio all'inizio del programma la macro controlla se esiste lo 0 macchina ( ma in che modo? Forse mach3 riconosce se all'accensione è stato fatto oppure no?)
Inoltre vedevo che passa subito alle coordinate assolute macchina con G53, ma con questo sposta in una posizione sicura la tavola con x e y? ( per esempio a x0 e y0)
C'è forse da impostare per x e y le posizioni di cambio utensile in mach3?
Vabbè per ora è già un successo aver settato sta scheda


- pierpaolo
- Senior
- Messaggi: 1319
- Iscritto il: martedì 19 giugno 2012, 1:10
- Località: roma
Re: Funzionerà? Cerco aiuto per macro ATC con Mach3. Si iniz


Non hai i permessi necessari per visualizzare i file e le foto allegati in questo messaggio. Per visualizzare tali file devi registrarti ed effettuare il Login