Hello Guest it is October 16, 2021, 01:17:33 PM

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - TPS

1521
no the M6 is not defect.
it seams to be handled different between G-Code call, and macro call.
i guess it is affected, because it is a "System" macro like M3 M4...

1522
General Mach Discussion / Re: Probing - what would i need?
« on: April 03, 2018, 12:05:05 PM »
Hi Dave,

during the retrofit of my TongIl TNV40 (witch is still not finished), i came also to the
probing  / toollength question.

i am trying to explain, how i want to "handle" this, just to give you (maybe) some ideas.

some basic's of the TongIl
-BT40 spindle toolclamp spring loaded and pneumitc tool release
-16 place umbrella toolchanger

i got to the question 16 places, but i have more than 16 Tools? ???
so i created Screen and script functionality to use the full range of Mach Tooltable,
according to the 16 place TC. means i created a Little database (well it is a Textfile) to
create a relationship between Tools (Mach tooltable) and TC places.
so now i can "book in" a tool to TC place and M6 handles to get the tool from the right
TC place. that gave me the "range" of the full Mach tooltable.

next question BT40 spindle, but i have a lot of SK40 Tools?  ???
they are principly the same, exept the pick and place height of Z-axis, and a different look pin (lenght).
look pin's are avaliable, so no Problem, but the different pick/place , ok added this Information also
to my "extrenal" datebase some Scripting, done.


next question was how to handle the tool lenght?  ???
out of your thread i "grabbed" the idea of the tool lenght setter.
so some material laying around ,some Screen work, some VB Scripting later
the tool setter was finished , toollenght is stored automatcly in the Mach tooltable.

next question surface probing?  ???
i digged out a 3d touch probe (chineese) witch i buyed years ago, did some testing,
tolerance 0.01-0.02mm good enough for what i do.
again some Screen work, some Scripting and it does what i Need.

after all this i recogized, i don't Need a touchplate (or sensor, witch i use on an older machine) to
get the tool lenght.

i write this only to give you some more idea's,
if you want to take some, the coding is no Problem.

Thomas



1523
ok,
i have tested this on my machine, where i can do a real toolchange.

and you are absolute right, the macro is not waiting for the M6 to be finished.

so i made a Little Workaround.

code for the M6 call:

Code: [Select]
SetUserLed(1400,0)

Code "M6 T8"

While GetUserLed(1400) = 0
Sleep(50)
Wend

and then the last line in M6 is:

Code: [Select]
SetUserLed(1400,1)

so the calling macro has to wait until M6 set's UserLed(1400).

you have also to find an other mechanism to know that the run of M6 was faulty,
to cancel the main macro as well.

the trick with the UserLed is "dirty".
i would get the M6 code in a function inside your main macro, and create a returnvalue to
have the control in main macro by a fault.

1524
General Mach Discussion / Re: Probing - what would i need?
« on: April 03, 2018, 07:41:31 AM »
i have also no idea about the Quality of These part's.

i buyed mine, figured out the tolerance was below 0,05mm,
and that was good enough for this case.

1525
only covered the code into a

Sub Main()

End Sub

and replaced the MachMSG to MSGBox, they seemed not to work on my System.

1526
General Mach Discussion / Re: Probing - what would i need?
« on: April 03, 2018, 04:55:30 AM »
i am using one of those for the tool lenght

1527
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




1528
so what is Happening if you excecute the

M6T8 line?

i have tryed it here, it is jumping into M6 but then i can't test more,
because i dont have the same physics.

1529
load it into VB Scriper Window use the green >|| button to step
through and see what is Happening.

1530
General Mach Discussion / Re: Probing - what would i need?
« on: April 03, 2018, 03:37:40 AM »
here a screenshot of my probing screen