Mach3 Otomatik Takım Değiştirme


bu videodaki gibi takım boyu telafisi işlemini nasıl yaparız. yardımcı olursanız sevinirim ben baya bi macro indirdim işin içinden çıkamadım
 
Belki yardımcı olabilir...

Mach 3 tool setter Big-tex version - Page 25

Ok I found a clean enough work around for this macro.... I tested it a few times today, ran well from VB editor but from MDI it would do even strange things, I have marked in blue where this would happen.

The odd thing was it would head DOWN and seemed to lump all of the blue lines together (down, x and y movement) at a very slow feed and travel until I got a servo tripping out or my hand hitting the estop.

Thinking that it should not run them all together I added sleeps(25) between and also a big sleep(500) and a small move off z abs zero and now it seems to run fine... I don't know what it was being so strange but so far after many tests it seems to work well!

Hope it us helpful to others!


' Author: Christopher Esser (Smokingman). Based on the work done by Greolt
' modded by jestah 4th dec 2012

' Define fixed parameters (Currently in Metric )

Tnumber = GetDRO(24) ' gets current tool
ProbeDist = "-200" 'Set the maximum distance to move the Z-axis before probe touches contact plate.
ProbeFeed = "500" 'Set the first plunge speed for the probe
ProbeFeed2 = "30" 'Set the second plunge speed for the probe
Retract = "0.5" 'Set distance to retract after probe (incremental move away from touch plate)
Retract2 = "0" 'Set distance to retract after probe ( in mech. coor.)
Xprobpos = "2635.74" 'Centre of tool sensor X in mech coor
Yprobpos = "31.64" 'Centre of tool sensor Y in mech coor' Declare Global Variables
Probeoffset = "0"' offset from probe top to table surface

' Declare Global Variables
Dim CurrentFeed
Dim CurrentAbsInc
Dim CurrentGmode
Dim StartingPoint

' Begin the Program
Call GetState
Call doProbe
Call RestoreState

' Get the Starting states
Sub GetState()
CurrentFeed = GetOemDRO(818) ' Get the current feedrate to return to later
CurrentAbsInc = GetOemLED(48) ' Get the current G90/G91 state (Abs Coordinate Mode)
CurrentGmode = GetOemDRO(819) ' Get the current G0/G1 state
StartingPoint = GetOemDRO(85) - GetOemDRO(832) ' Get starting Z position in work coordinates (Z Machine Coord DRO - Z Fixture Orig Off DRO)
End Sub

' Restore the states
Sub RestoreState()
Code "F" &CurrentFeed ' Returns to prior feed rate
If CurrentAbsInc = 0 Then Code "G91" ' If G91 was in effect before then return to it
If CurrentGMode = 0 Then Code "G0" ' If G0 was in effect before then return to it
End Sub

' Probe routine
Sub doProbe()


'Start the actual probe

code "G49" 'remove any tool offset (tried both of these options to stop hitting soft limits on z)
sleep(500)

ActivateSignal(OUTPUT5) ' Dust hood up

'Code "G91 G0 Z-0.01"
Code "G90 G0 G53 Z" & Retract2 ' ( this is where the movement hits the solf limits even with the above removing tool lenght offsets...?!??!?)
While IsMoving()
Sleep(50)
Wend

Tme = 0
While(GetOEMLED(822) = fulse)
Sleep(100)
Tme = Tme +.1
If(Tme > 2)Then
MsgBox("Hood up signal Timed out - please check!")
Exit Sub
End If
Wend

Code "G0 G53 X" & Xprobpos
While IsMoving()
Sleep(50)
Wend
Code "G0 G53 Y" & Yprobpos
While IsMoving()
Sleep(50)
Wend

Code "F" &ProbeFeed ' Set the probe plunge speed
Code "G91 G31 Z" &ProbeDist ' Probing move using incremental move mode.
While IsMoving() ' Wait while it happens
Sleep(50)
Wend


ZProbePos = GetVar(2002) ' Get the axact point the probe was hit

If (ProbeDist+StartingPoint = ZProbePos) Then ' No contact was made during plunge
Code "(Probe failed!)"
Exit Sub
End If

Code "G90 G0 Z" &ZProbePos ' Go back to that point. Always a very small amount of overrun.
While IsMoving ()
Sleep(50)
Wend

Code "G91 G0 Z" & Retract ' Retract
While IsMoving() ' Wait while it happens
Sleep(50)
Wend

Code "F" &ProbeFeed2 ' Set the probe plunge speed
Code "G91 G31 Z-" &Retract+0.5 ' Probing move using incremental move mode.
While IsMoving() ' Wait while it happens
Sleep(50)
Wend

ZProbePos = GetVar(2002) ' Get the axact point the probe was hit

Code "G90 G0 Z" &ZProbePos ' Go back to that point. Always a very small amount of overrun.
While IsMoving ()
Sleep(50)
Wend

SetToolParam(Tnumber,2,ZProbePos)

Code "G0 G53 Z" & Retract2 ' Retract to mech zero
While IsMoving ()
Sleep(50)
Wend

Code "G43 H" &Tnumber' apply offset to tool

Code "(Tool offset set)" 'is it possible to but the actual offset set in this box?

DeActivateSignal(OUTPUT5)

End Sub
 

teşekkürler bi kaç gün içinde deniyecem. m6 makrosunun içinde çalışmasını istiyorum.
tool change pozisyonunda duracak takımı değiştirdikten sonra tekrar startladığımda 1. takımla 2. takım arasındaki boy farkını düşecek. bu kadar yazdıktan sonra farkettim macroda g43 varmış yalnız anlamadığım deactivaresignal(output5) i ne için koymuş sanırsam atc için, bide bu macro m6 macrosumu yoksa m6end macrosumu.
 
Bu kod yeterli olmayacaktır. Çünkü yukardaki kodda önce Z ToolUp (Takımdan takıma gecerken kullanılacak Z seviyesi) değerine iniyor, sonra eski bıçağı bırakmak için Z ToolDown değerine düşüyor tool bırakmada almada yapılmadan "G00 Y10" koordinatına hareket ediyor ve "G4 ..." kodu işletiliyor.
Öncelikle MovePos alt fonksiyonu Tool Bırakma ve Alma için farklı hareket edecek şekilde yeniden düzenlenmeli. Çünkü bıçak alma davranışı ile bıçak bırakma davranışı artık farklılaşmak zorunda.

Kolay gelsin...
Selamlar bu macroyu biraz düzenleyip kullandım sorunsuz çalışıyor ama bahsedildiği gibi takımları sadece tepeden inip alıyor ve bırakıyor. bu macroya tooldown konumuna indikten sonra y ekseninde 20mm geriye giderek takımı bırakacak ve aynı şekilde yeni takımı tepeden inip alacak ve y ekseninde 20mm ileri çıkıp toolup yapacak şekilde nasıl düzenlerim. Çok uğraştım ama bir türlü yapamadım.
 
Visual Basic fazla bilmiyorum. Delphi olsa şipşak hallederdim. :D
Bende de ATC yok bu nedenle tam deneyemedim de. Her ihtimale karşı tedbirli kullanın. Sanal olarak denedim sorun gözükmüyor ama orjinali gibi bazı eksikleri var. Bazı kontroller yok bu nedenle hatalar olabilir. Spindle ağzında bıçak varmı yokmu? Bıçak konulacak yerde başka bıçak varmı yokmu? Makine ilk açıldığında spindle ağzında kaç numaralı bıçak var yada yok? Vs. vs..
Ayrıca hata durumlarında ne yapılacağıda belirsiz. Orjinalinde de bu kontroller olmadığı için şimdilik eklemeye gerek görmedim. Tüm bunları gözönünde bulundurup kullanırken emniyeti elden bırakmamak gerekir.

Tüm sorumluluk kullanacak olanlara aittir şimdiden belirteyim...

Macroda kullanılan bazı değişkenlerle ilgili bilgilerde şöyle:

Xtool, Ytool: Bıçakların bulunduğu pozisyonlar. Kullanılan magazine göre değişiklikler olabilir.

Park : Mandaldan kurtulmak için gereken mesafe. + yada - yönde olabilir.
Magazinin X yada Y ekseninde olmasına veya makinanın ön tarafında veya arka tarafında olmasına göre kullanım şekli değişebilir.
Pozisyona göre
Y+Park / Y-Park / X+Park / X-Park
olarak değişebilir.

ToolUp: Z nin bıçak bıraktıktan sonra diğer bıçağı almak için bulunacağı pozisyon (Güvenlik seviyesi)

ToolDown: Bıçakların bulunduğu Z pozisyonu.


Bıçak bırakma İşlemi:
1-Önce Z ToolUp pozisyonuna gelir.
2-XTool , Ytool+Park pozisyonuna gidilir.
3-Z Tooldown seviyesine iner.
4-XTool , Ytool pozisyonuna itilir.
5-Bıçak bırakılır.
6-Z ToolUp seviyesine çıkar.

Bıçak Alma İşlemi:
1-Önce Z ToolUp pozisyonuna gelir.
2-XTool , Ytool pozisyonuna gidilir.
3-Z Tooldown seviyesine iner.
4-Bıçak Tutulur.
5-XTool , Ytool+Park pozisyonuna çekilir.
6-Z ToolUp seviyesine çıkar.
7-Kalınan X,Y pozisyonuna gidilir.

Umarım işinize yarar. Kolay gelsin.


Kod:
' OTOMATİK TAKIM DEĞİŞTİRME MAKROSU' Mehmet İzzet KÖSE
Public xtool As Integer
Public Ytool As Integer


Sub Main()
OldTool = GetOEMDRO (1200) 
x = GetToolChangeStart( 0 )
y = GetToolChangeStart( 1 )
z = GetToolChangeStart( 2 )
a = GetToolChangeStart( 3 )
b = GetToolChangeStart( 4 )
c = GetToolChangeStart( 5 )
tool = GetSelectedTool()
Park = 50
NewTool = tool




MaxToolNum = 8 '*** Değiştirmek istenen max. takım sayısı
ToolDown = -30   '*** Takımı almak yada bırakmak için Z nin pozisyonu...!
ToolUp = 30     '*** Bıraktığı takımdan alacağı takıma giderken Z nin pozisyonu...!




If NewTool = OldTool Then
Exit Sub
End If




While NewTool > MaxToolNum
NewTool = Question ("Enter New Tool Number up to " & MaxToolNum)
Wend






'*************** Eski takım bırakılıyor *************************
Code "G00 G53 Z" & ToolUp
While IsMoving()
Wend


Call ToolPos(OldTool)
Code "G53 X" & XTool & " Y" & YTool+Park
While IsMoving()
Wend


Code "G53 Z" & ToolDown
Code "G4 P.75"
While IsMoving()
Wend


Code "G53 X" & XTool & " Y" & YTool
While IsMoving()
Wend


ActivateSignal(Output1) '*** Takımı bırakmak için gerekli sinyal....!
Code "G4 P1.0"          '*** Takımı bırakmak için bekletmek... gerektiği kadar gecikme yaptırılır...!
'SystemWaitFor (7)     '*** Takımı aldığını bildiren Limit switch sinyalini beklemek...opsiyoneldir.. 
Code "G53 Z" & ToolUp   '*** Takım bırakıldı ve Toolup seviyesine çıkıldı... 




'************** Yeni takım alınıyor ******************************
Call ToolPos(NewTool)
Code "G53 X" & XTool & " Y" & YTool
While IsMoving()
Wend


Code "G53 Z" & ToolDown
Code "G4 P.75"
While IsMoving()
Wend


DeActivateSignal(Output1) '*** Takımı bırakmak için gönderilen sinyali kapatıyor, yani takımı tutuyor. 
Code "G4 P1.0"            '*** Wait for the tool to Clamp
While IsMoving()
Wend


Code "G53 X" & XTool & " Y" & YTool+Park  '*** Takım alındıktan sonra mandaldan kurtarmak için Y yönünde +20 gidiliyor... 
While IsMoving()
Wend


Code "G53 Z" & ToolUp




'************* Tool numarası set ediliyor ***********************
Call SetUserDRO (1200,NewTool)
SetCurrentTool( NewTool )
Code "G00 X" & x & " Y" & y '*** Takım değiştirmeyi tamamlayıp kaldığı yere konumlanma....
End Sub






'*********** Takım konumlnma alt fonksiyonu Takım yerleri burda belirtilir. ************
'Xtool: Toolun X değeri  Ytool: Toolun Y değeri.
'Tool hangi eksende ise ona göre değerleri değiştirmek gerekir.


Sub ToolPos(ByVal ToolNumber As Integer)


Select Case ToolNumber


Case Is = 1
XTool = 50
YTool = 0


Case Is = 2
XTool = 100
YTool = 0


Case Is = 3
XTool = 150
YTool = 0


Case Is = 4
XTool = 200
YTool = 0


Case Is = 5
XTool = 250
YTool = 0


Case Is = 6
XTool = 300
YTool = 0


Case Is = 7
XTool = 350
YTool = 0


Case Is = 8
XTool = 400
YTool = 0


End Select


End Sub
Main
 
Son düzenleme:
ramertürk teşekkürler sanal olarak sorunsuz çalıştı gerçek makinada henüz denemedim ama çalışır büyük ihtimalle. Ben park olarak yazmamıştım değişkeni ondan çalışmadı galiba benim macro her neyse.

Seninde bahsettiğin gibi mach3 her açılışında tool0 olarak açılıyor ama makinada daha önceki işten kalma tool 3 takılı olsa bile 0 olarak başlıyor. bunun bir yolu varmı mach3 kapanırken hangi tool takılı olduğunu kaydetse bunun bir yolu varmı.
yada makina işini bitirince takımı götürüp yerine bırakacak ve tool0 olarak kapanacak bir macromu eklemek lazım
 
Sanırım var. General Config içindeki Tool Selections Persistent ayarını yaparsanız en son takılı olan tool hafızada kalıyor.


TOOL.jpg
 
ramerturk hocam sizinle birkac konuda görüsmem lazım.Bana yardımcı olacagınız ümidindeyim.
 
Sanırım var. General Config içindeki Tool Selections Persistent ayarını yaparsanız en son takılı olan tool hafızada kalıyor.
selam üstad. bir şey sormak istiyorum takım değiştirmede tooldowna sabit bir ölçü giriyoruz takımı almak yada bırakmak için sıfıra in gibi. bunu bütün takımlar için kullanıyor. tooldown kısmını her takım için farklı bir değer atayamazmıyız.
 
selam üstad. bir şey sormak istiyorum takım değiştirmede tooldowna sabit bir ölçü giriyoruz takımı almak yada bırakmak için sıfıra in gibi. bunu bütün takımlar için kullanıyor. tooldown kısmını her takım için farklı bir değer atayamazmıyız.

Olur tabiki neden olmasın, sadece makroda biraz değişiklik yapmak lazım. Makroda XTool,YTool yanına birde her tool için Ztool gibi bir değişken vermek gerekir. Ama bunlar için nasıl bir toolchange mekanizması kullanıldığını da bilmek gerekir. Yoksa yanlış yönlendirmiş olmayalım.
 

Forum istatistikleri

Konular
129,755
Mesajlar
929,698
Kullanıcılar
452,505
Son üye
ironman2112

Yeni konular

Geri
Üst