Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

G Kod yorumlayıcı

Başlatan muhendisbey, 06 Şubat 2015, 22:32:55

muhendisbey

Merhaba,

Bir G Kodu yorumlayıcı yapmak istiyorum. Ancak nasıl kullanıldığını bilmiyorum. İnternette yaptığım aramalarda bazı sorularımın cevabına ulaşamadım. Hazır kullanmak istersek çok fazla seçenek var, ancak bunu ben yapmak istiyorum.
Bir işlem yapabilmek için hangi G kodları elzemdir? Galiba tamamı yorumlanacak diye birşey yok. Bir kısmı da özelmiş galiba.
G02 ve G03 fonksiyonlarını matematiksel olarak nasıl hesaplarım?
F ve M kodları tam olarak nedir? Hangilerini kullanmam gerekli? Feed rate'in kodda bulunmasındaki amaç nedir? Elle verdiğim değeri mi dikkate almalıyım yoksa koddakini mi?
Mesela milimetre için (G21) G1 X30 desem burada 30'dan ne anlamalıyım? 0.3mm demek mi? İnçe göre (G20)nasıl yorumlarım?

Şu ana kadarki bilgim G kodu üret, mach3 ile aç, işlet kadardı. Şimdi irdelemek istiyorum.
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

iyildirim

Hangi kodlar elzemdir konusu biraz da yapılmak istenen işle ilgili.
Bana göre g1-2-3 ek olarak absolute-relative koordinat seçimi ve tool kompanzasyonu komutları 2 boyutlu işte bile olmalı. Ek olarak plane seçimi  komutları da işe göre gerekebilir.  Tabii bir de bazı makina komutları. En azından spinde on off vs. gibi.
Diğer çoğu komut g1-2-3 ün kullanıldığı makrolar gibi düşünülebilir.

Feed rate ile kesim hızını belirliyoruz. Olmazsa olmaz.
X30 dan genellikle mm anlaşılır. Ama kendiniz için bir şeyler yapıyorsanız ille de mm olmak zorunda da değil. PCB kazıma için yaptığım yorumlayıcıya koordinatları step sayısı olarak veriyordum.

Enterpolasyon için tek bir yol yok.
Kendi adıma hem lineer hemde dairesel enterpolasyon için Bresenham kullanmıştım.  Dairesel enterpolasyonda daireyi çizmekten, izlemekten daha önemli olan verilen komuta göre bitiş koordinatlarını doğru hesaplamak.
Bir önemli konuda hızlanma ve de özellikle yavaşlama konusu.
Performans  için planlama - bufferlama da önemli.   

linuzcnc, grbl, tinyg gibi projeler fikir verebilir.

muhendisbey

GRBL, linux cnc'yi inceliyorum, en büyük kaynak bunlar benim için şu anda ancak bazı işleri anlayamadım desem daha doğru.
Feedrate bir elzem bu konuda sıkıntı yok, ancak kod üretilirken bu neye göre üretilmiş, neden üretilmiş anlayamadım. Bu değeri ben mach3 ile manuel veriyorsam koddaki ne işe yarıyor?

artımlı koordinat ile mutlak koordinat mesela nasıl yorumlanır? mutlak koordinatı ben şu şekilde yorumladım doğru mu bilmiyorum:
Mutlak koordinat: referans noktaya göre bulunulması gereken koordinat.
artımlı koordinat: bulunan konuma göre verilen koordinat verisi kadar artırılan veya azaltılan koordinat verisi.
doğru mudur?
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

iyildirim

Feedrate i manuel de verebilmenin nedeni örneğin balsa yerine meşe - gürgen kullanmaya karar verdiğinizde sadece malzeme değişikliği nedeni ile bütün cam proses işlemini yeniden yapmamak. Spindle devrine, malzeme ye göre kesim hızını optimize etmek vs. 
Aslında mach3 ün yaptığı da gcode içinde verilmiş olan feedrate değerini replace etmek. Yani gcode yorumlamaktan daha çok gcode dosyası üzerinde bir ön işlem gibi.

Koordinat konusunda söylediğiniz doğru. 
Mutlak koordinatlar her daim bilinilmeli. Artımlı koordinat verildiğinde de aslında mutlak koordinatlarla çalışılır.
Tek fark girdiyi kabul ederken sizinde söylediğiniz gibi gelen koordinat bilgisini direkt hedef koordinat olarak atamak ile o anda bulunulan mutlak koordinatın üzerine gelen artımsal koordinat verisini ekleyerek hedef koordinatı belirlemek.
     

muhendisbey

G02 ve G03 için i,j,k ve R neyi temsil ediyor? interpolasyon yaparken ne parametresi olarak kullanmalıyım? Yani ne bilgisini ifade ediyor?
G02 X10 Y30 R10
bu satır çapı 10 olan bitiş noktası için X'i 10, Y'yi 30 artırarak son noktasına ulaşılan dairesel arc anlamında mıdır?

G02 X3.25 Y2.0 I-1.25 J0
Mesela bu kodu nasıl yorumlamalıyım?
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

Karamel

Hocam kordinat duzlemi var. i j k var.magnetude var. siz vektorlerden bahseiyor olabilirmisiniz? Vektorlerde x eksenine i. y eksenine j ve z eksenine k denir. (tabi bunlarin uzerinde sapka vardir. bunun gibi î)

iyildirim

Linklerde detaylıca anlatılmış.
http://www.cncokulu.net/mill/text/circularinterpolasyon-G02-G03.html
http://linuxcnc.org/docs/html/gcode/gcode.html#sec:G2-G3-Arc

G2-3 ile bir çemberin tamamını veya bir yay  çizebiliyoruz. Bu yayı  çizebilmek için öncelikle merkezini bilmemiz gerekir.

Merkezi ifade etmek için ise iki ayrı format kullanılıyor.

Çember merkezli formatta I-J-K ile bulunulan konuma göre merkezin koordinatları belirtiliyor. Buradan yarıçap da belli zaten. Merkez verilen formatta hedef koordinatın, merkezi verilen çember üzerinde olup olmadığını doğrulamak da mümkün.

Yarıçap belirtilen formatta ise hedef koordinattan başka sadece  yarıçap veriliyor. Hem o anda bulunulan hemde hedef koordinat çizilecek yay  üzerinde olduğundan ve yarıçapı da bildiğinize göre merkez hesaplanabiliyor.  Kendi adıma yarıçap verilen bu formatı hiç kullanmadım. Hem hesabı karışık, özellikle de bir mcu üzerinde. Hemde 180 derece çizimlerde koordinatlardaki çok ufak hesap hataları, yuvarlamaların merkezin hesabında büyük hatalara neden olabileceğinden bahsedilmiş.


G2 X10 Y30 R10 ile yarıçapı 10 olan ve hem bulunulan konum hemde x10, y30 dan geçen bir yay  ifade ediliyor.
G2 X3.25 Y2.0 I-1.25 J0 ile merkezi bulunulan konuma göre 1.25 mm solda olan bir yayı x3.25 Y2.0 koordinatına kadar çizmelisiniz.
 

muhendisbey

@karamel G kodu dediğiniz gibi vektörel bir çizim ancak bilmeyen veya irdeleyen birisi için anlaşılması çok basit olamayabiliyor. İşin içerisinde matematiksel hesap ve modelleme var.

@iyildirim dediğiniz gibi, ufak ihmaller hatalara sebep olabiliyor. GRBL deki G code c dosyasını ve header dosyasını inceliyorum. Mantissa denilen float sayıların küsüratını yorumlama ile ilgili kısımlar var. Bununla ilgili bir de video buldum.
Mantissa and Exponent: Explained
bu kısım can sıkacak gibi.
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

muhendisbey

http://www.instructables.com/id/How-to-program-arcs-and-linear-movement-in-G-Code-/?ALLSTEPS

Burada anlatılan teta1 ve teta2 açıları nasıl ölçülüyor? Bir bilginiz var mı?
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

iyildirim

teta1 çizilecek çemberin-yayın merkezi ile o anda bulunduğunuz yani başlangiç noktası arasındaki açı. 
teta2 de bitiş noktası ile olan açı.
teta2 hesaplanabilir ama eğer üretilen kodun doğruluğunu sağlama gibi bir zorunluluk yoksa hesaplanması gerekmeyebilir. Yayı çizerken bitiş koordinatına epsilon kadar yaklaşmak yeterli denebilir.

X,Y, I,J yani merkezi bildiğiniz formatta açı hesapları daha kolay ve net. 

Bulunduğunuz X koordinatı ile  merkez arası I, Y mesafesi de J.
Karelerin toplamının karekökü yarıçap, atan(I/J) veya atan(J/I) da teta1.
Burada dikkat edilecek nokta verilen I ve J nin başlangıç kooardinatına göre olduğu.

Bitiş noktası için ,  I, J artımsal  verildiğine göre  başlangıç koor. + I,J mutlak çember merkezi.
Çember merkezinin bitiş koordinatına göre farkı da, bitiş koordinatına göre I,J yi artımsal verir. Teta2 de teta1 gibi hesaplanabilir.
Bitiş koordinatına göre hesaplanmış I,J den elde edilecek yarıçap, başlangıç koordinatına göre hesaplananla aynı veya epsilondan küçük ise ise g-kod da sorun yok denebilir.

Bir önceki mesajda bahsedilen matematiksel kesinlik, veya ufak yuvarlamaların sorun oluşturması konusu, merkez verilen formatla ilgili değil. Direk yarıçap verilen X,Y,R ile tarif edilen formatla ilgili.
Elimizde aynı yay üzerindeki iki nokta var. Ve yayı çizebilmek için merkezi bilmemiz gerekir. Dolayısı ile merkezin net koordinatının hesabında yarıçapdan X,Y üzerindeki farksal değerlerin hesabı lazım.  I,J yi bulmak gibi.
Matematiksel kesinlik sorunu derken, 180 dereceye çok yakın çizimlerde Cos(0.000001) veya acos(0.0001) gibi bir fonksiyondan dönecek değerdeki ufak bir yuvarlamanın merkez noktasında yaratabileceği kaymadan bahsediliyor. Ve G2-3 X,Y,R ile ifade edilen formatla ilgili.

G2-3 X,Y,I,J ile ifade edilen formatta hipotenüsten X,Y hesaplamak zorunda kalmadığımızdan bu tip özel bir sorunumuz yok. Ve kullanacağınız algoritmaya göre teta1-2 vs. açı hesaplamak  gerekmeyebilir de.

muhendisbey

Örnek olarak 2. Yay'a ile 3. yaya bakabilir misiniz?
İlk yayda teta1=0 teta2=270 çıkmış.
Denklemi ters çevirip arccos işlemi yaparsam açıyı buluyorum yoksa bakarak bulamıyorum.
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

trgtylcnky

Hocam çemberin merkezinden yay çiziminin başlangıç noktasına bir doğru çekin, sonra o doğrunun x ekseniyle yaptığı açıyı bakın theta1'in 0 olduğunu görebilirsiniz. Aynı şekilde bitiş noktası için de theta2 270 çıkıyor.

muhendisbey

Çok sağolun @iyildirim ve @ trgtylcnky. Birçok işlem mevcut noktaya göre yapılınca çember üzerinden açıyı değil de mevcut noktadan açıya bakıyordum. Doğal olarak ulaşamamıştım.
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.