Basitçe söylemek gerekirse, G-Code bilgisayarlı sayısal kontrol (CNC) için bir programlama dilidir. Başka bir deyişle, bir makineyi kontrol eden bir bilgisayar tarafından konuşulan dildir ve hareket ve diğer eylemler için gerekli tüm komutları iletir.
Ayrıca daha önce hazırladığımız G-Code Nedir? isimli içeriğimize göz atmanızı öneririz.
G kodu, farklı masaüstü ve endüstriyel makineler için standart dil olsa da, onu en çok 3D yazıcılarımız aracılığıyla tanıyor olabiliriz. Şimdiye kadar bununla ilgilenmemiş olabilirsiniz ve bu aslında normaldir çünkü 3D dilimleyiciler kodu “otomatik olarak” oluşturur.
Yine de, 3D baskı hakkında daha derin bir anlayış geliştirmek istiyorsanız, G kodunun temellerini öğrenmek çok önemlidir. Bu bilgi, RepRap ve Marlin gibi 3D yazıcı donanım yazılımının özelleştirilmesini sağlarken, yazdırma işlemlerini çok daha iyi gidermenize ve kontrol etmenize olanak tanır.
Bu makalede, birkaç satır komutun nasıl okunacağı, anlaşılacağı ve yazılacağı da dahil olmak üzere G kodunun temellerini ele alacağız ve kodlamaya yeni başlayanlar için bile sağlam bir arka plan sağlayacağız. Lafı fazla uzatmadan, en baştan başlayalım!
Genel olarak programlamaya yabancı olanlar için, G kodunu, her biri 3D yazıcıya belirli bir görevi gerçekleştirmesini söyleyen sıralı talimat satırları olarak düşünün. Bu satırlar komutlar olarak bilinir ve yazıcı, kodun sonuna ulaşana kadar bunları birer birer yürütür.
“G kodu” terimi, bir bütün olarak programlama diline atıfta bulunmak için kullanılsa da, aynı zamanda 3D baskıda kullanılan iki tür komuttan biridir: “genel/General” ve “çeşitli/Miscellaneous” komutlar.
Bir 3D yazıcıdaki hareket türlerinden genel komut satırları sorumludur. Bu tür komutlar, G komutlarında olduğu gibi ‘G’ harfiyle tanımlanır. Yazıcı kafası tarafından gerçekleştirilen üç artı eksen hareketini kontrol etmenin yanı sıra, filament ekstrüzyonundan da sorumludurlar.
Çeşitli komutlar ise makineye geometrik olmayan görevleri gerçekleştirmesi talimatını verir. 3D baskıda, bu tür görevler, göreceğimiz gibi, nozul ve yatak için ısıtma komutlarını ve ayrıca fan kontrolünü içerir. Çeşitli komutlar ‘M’ harfi ile tanımlanır.
Sözdizimi/Syntax
Her G kodu komut satırı belirli bir sözdizimini izler. Her satır yalnızca bir komuta karşılık gelir ve bu da çok uzun kodlara yol açabilir.
Herhangi bir satırın ilk argümanı komut kodunun kendisidir. Gördüğümüz gibi, bir “G” veya “M” kod türü olabilir ve ardından komutu tanımlayan bir sayı gelebilir. Örneğin, “G0” doğrusal bir hareket komutuna karşılık gelir.
Ardından, komutu daha doğru tanımlayan parametreler gelir. Son konumu ve ne kadar hızlı hareket ettiğini içeren bir G0 doğrusal hareketi için, büyük harflerle de belirtilir. Yakında göreceğimiz gibi, her komutun kendi parametre seti vardır.
Başlamadan önce, çeşitli komutların üzerinden geçtiğimizde, bir harf ve sayıdan sonra kodun ne yaptığını açıklayan noktalı virgüller göreceksiniz. İşte kod yorumu içeren bir satır örneği:
G1 X25 Y5 ; Ben bir kod yorumuyum!
Diğer programcıların belirli kod satırlarını veya bölümlerini anlayabilmeleri için programcıların genellikle sade İngilizce açıklamalar eklemesi gerekir. Ayrıca, bazı şeyleri neden belirli bir şekilde kodladığınızı unutarak, bazı şeyleri yeniden anlamakta zorlanabilirsiniz.
Bu sorunu çözmek için kod yorumları vardır. Yorumlar, noktalı virgülden sonra gelen her şeyi (aynı satırda) içerir ve G kodunu yürütürken makine tarafından tamamen yok sayılır. Bu şekilde, tamamen programcıların gözleri içindir.
Kelimenin tam anlamıyla yüzlerce G kodu komutu olsa da, aşağıdaki birkaç bölümde en temel ve önemli olanları ele alacağız. Alıştıktan sonra, referans sayfalarından diğer komutları kendi akışınızda keşfedebileceksiniz.
G0 ve G1: Doğrusal Hareket
G0 ve G1 komutlarının her ikisi de doğrusal hareketler gerçekleştirir. Geleneksel olarak, G0, başlangıç ve hareket hareketleri gibi ekstrüzyon olmayan hareketler için kullanılırken, G1 tüm ekstrüzyon doğrusal hareketi kapsar.
Yine de her iki komut da aynı işlevi görür. G0 veya G1 parametreleri, tüm X-, Y- ve Z-eksenleri için son konumları, hareket sırasında gerçekleştirilecek ekstrüzyon miktarını ve ayarlı birimlerde besleme hızı tarafından belirtilen hızı içerir.
Örnek
G1 X90 Y50 Z0.5 F3000 E1, yazıcıya, 3.000 mm/dk’lık bir besleme hızında (F) X = 90 mm, Y = 50 mm, Z = 0,5 mm nihai koordinatlarına doğru düz bir çizgide (G1) hareket etmesini söyler. (E) ekstrüderde 1 mm malzeme ekstrüzyon yapar.
Çoğu doğrusal hareket, tek bir katman içinde gerçekleştirilir; bu, Z koordinatının genellikle komut satırından çıkarıldığı anlamına gelir.
G90 ve G91: Mutlak ve Göreli Konumlandırma
G90 ve G91 komutları, makineye hareket için kullanılan koordinatları nasıl yorumlayacağını söyler. G90, genellikle varsayılan olan “mutlak konumlandırma”yı kurarken, G91 “göreli konumlandırma” içindir.
Her iki komut da herhangi bir parametre gerektirmez ve birinin ayarlanması diğerini otomatik olarak iptal eder. Konumlandırmanın çalışma şekli oldukça basittir, o yüzden hemen konuya girelim.
Örnek
Yazıcı kafasını bir satırda X=30’a taşımak istediğimizi varsayalım. Mutlak konumlandırma modunda bu şöyle görünür:
G90 ; mutlak konumlandırma G0 X30 ; X = 30 koordinatına gönderme
Bu basit hareket, yazıcıya yazıcı kafasını X = 30’da konumlanacak şekilde hareket ettirmesini söyler. Şimdi, göreli bir konumlandırma hareketi için yazıcı kafasının şu anda nerede olduğunu bilmemiz gerekir. X = 10’da olduğunu varsayalım:
G91 ; göreceli konumlandırma G0 X20 ; X ekseni boyunca +20mm hareket ettirilir
G91 önce makineye koordinatları mevcut konuma göre yorumlamasını söyler (X = 10). Bunu bilerek, makinenin X ekseni pozitif yönünde 20 mm hareket etmesi ve böylece istediğimiz gibi X = 30’a ulaşması gerekiyor.
G28 ve G29: Otomatik Ev ve Yatak Seviyelendirme
Tüm hareket eksenlerinin fiziksel sınırlarını belirleme sürecine “homing” diyoruz. G28 komutu, bu görevi, sınırları onaylamak için uç durdurmaları(end stop) tetikleyene kadar yazıcı kafasını hareket ettirerek gerçekleştirecektir.
Hedef arama, yalnızca makinenin kendisini yönlendirmesi için değil, aynı zamanda yazıcı kafasının sınırların dışına çıkmasını önlemek için de önemlidir. G28 komutu genellikle her yazdırma işleminden önce gerçekleştirilir.
Spesifik eksen, X, Y veya Z parametre olarak dahil edilerek ayrı ayrı ev konuma sabitlenebilir. Aksi takdirde, G28 tek başına üçünü de barındırır.
Örnek
G28 X Y; yalnızca X ve Y eksenlerini eve getirir G28 ; tüm eksenleri eve getirir
Başka bir komut olan G29, otomatik yatak seviyelendirme dizisini başlatır. Baskıdan önce yatağı düzleştirmenin birçok farklı yöntemi vardır, çünkü bu genellikle son kullanıcılar tarafından değil, bellenim tarafından belirlenir. Bu nedenle, yöntemleri ve komut parametrelerini çevreleyen ayrıntılara girmeyeceğiz. Sadece G29’un genellikle bir otomatik evden (G28) sonra gönderildiğini ve bellenim tarafından belirlenen şekilde otomatik yatak seviyelendirmeyi yapması gerektiğini bilin.
G29 ; otomatik yatak seviyelendirme sırasında gerçekleştir
M104, M109, M140 ve M190: Sıcaklık Ayarı
Bunlar, yine herhangi bir hareket içermeyen temel çeşitli komutlardır.
Başlamak için, M104 komutu, sıcak ucun ulaşması için bir hedef sıcaklık ayarlar ve aksi belirtilmedikçe bu sıcaklığı korur.
Parametrelerden bazıları, gerçek sıcaklık değerini (S) ve hangi yazıcı kafasının (T) ısıtılacağını (çoklu ekstrüzyon kurulumları için) içerir.
Örnek
M104 S210 ; sıcak uç için hedef sıcaklığı 210 dereceye ayarla
Bu komut satırı, makineye tek sıcak ucunu 210 °C’ye kadar ısıtması talimatını verir. Hedef sıcaklığı ayarladıktan sonra yazıcı, sıcak ucu ısıtırken sonraki komut satırını gerçekleştirmeye devam edecektir.
Alternatif olarak, bir sonraki satıra geçmeden önce o hedefe ulaşılmasını beklemek istersek M109 komutunu kullanabiliriz.
M109 S210 ; sıcak uç için hedef sıcaklığı 210 dereceye ayarlayın ve ulaşılana kadar hiçbir şey yapmayın
Yatak sıcaklığının ayarlanması, sıcak uca çok benzer, ancak bunun yerine M140 ve M190 komutlarıyla:
M140 S110 ; yatak için hedef sıcaklığı 110 dereceye ayarla M190 S110 ; yatak için hedef sıcaklığı 110 dereceye ayarlayın ve ulaşılana kadar hiçbir şey yapmayın
M106 ve M107: Fan Kontrolü
3D yazıcılar için bir diğer önemli görev olan çeşitli M106 ve M107 komutları, fan kontrolü sağlar.
M106 bir fanı açar ve hızını ayarlar. İlk katman ve köprüleme sırasında baskı işlemi sırasında farklı hızlar gerektiğinden, bu özellikle parça soğutma fanı için kullanışlıdır.
Hız parametresi 0 ile 255 arasında bir değer olmalıdır. 255 değeri %100 güç sağlar ve bu aralıktaki herhangi bir sayı buna göre bir yüzde belirtir.
Örnek
M106 ; fanı maksimum (%100) hızda açar M106 S128 ; bir fanı açar ve %50 güce ayarlar
Çoklu hız kontrollü fanlar, her bir fana bellenim tarafından bir indeks atandığından, indeks (P) parametreleri ile tanımlanabilir.
Son olarak, M107 komutu belirtilen bir fanı kapatacaktır. Herhangi bir indeks parametresi sağlanmazsa, genellikle kapatılacak olan parça soğutma fanıdır.
Artık 3D baskı için kullanılan gerçek bir kod parçasına bakmak için iyi bir konumdayız. G kodu programları, ileride göreceğimiz gibi, üç farklı bölüme ayrılabilir.
3D dilimleyici tarafından oluşturulan bir G kodu dosyasını açmak için bir metin düzenleyici kullanırsanız, bunun hemen G veya M komutlarıyla başlamayabileceğini belirtmekte fayda var. Örneğin, Cura veya Simplify3D gibi bir dilimleyici, yorumlar içinde önceden tanımlanmış bazı yazdırma işlemi parametrelerini dahil ederek kodu başlatır. Bu çizgiler yazdırmayı etkilemez, bunun yerine örneğin katman yüksekliği gibi parametreler için hızlı bir referans sunar.
Aşama 1: Başlatma
Herhangi bir programın ilk bölümü, modeli yazdırmaya başlamadan önce gereken hazırlık görevlerini içerir. Aşağıdakiler, gerçek bir 3D yazdırma işinden gelen başlatma G kodu komutlarının ilk altı satırıdır.
G90 M82 M140 S80 M104 S200 G28 G29
Şimdi bildiğimiz gibi, ilk satır hareketlerin mutlak konumlandırma kullanması gerektiğini söylerken, ikinci satır ekstrüdere ekstrüzyonu mutlak terimlerle yorumlamasını söyler.
Üçüncü ve dördüncü satırlar, yatağı ve nozulu hedef sıcaklıklarına ısıtmaya başlar. Hedef sıcaklığı beklemeyeceğine dikkat edin; bu, yazıcının ısınırken yatağı otomatik olarak çalıştıracağı ve düzleştireceği anlamına gelir.
Bazı başlatma rutinleri (örneğin PrusaSlicer tarafından kullanılan), yazdırma işlemine geçmeden önce tek bir düz çizgi yazdırmak gibi bir nozzle temizleme işlemini içerir.
Aşama 2: Yazdırma
İşte tüm olayın gerçekleştiği yer. Dilimlenmiş bir G kodu dosyasına bakarsanız, nozulun gerçekte ne yaptığını anlamamızın imkansız olduğunu görürsünüz.
3D baskı, katman katman bir işlemdir, bu nedenle, tek bir katmanı yazdırırken bu aşamanın XY düzleminde birçok hareketi içerdiğini göreceksiniz. Bu yapıldıktan sonra, Z yönündeki küçük bir hareket, bir sonraki katmanın başlangıcını belirleyecektir.
G kodu komutlarının yazdırma aşamasında nasıl görünebileceğine dair bir örnek:
G1 X103.505 Y153.291 E4.5648; XY düzleminde hareket ve ekstrüzyon G1 X103.291 Y153.505 E4.5804; XY düzleminde hareket ve ekstrüzyon G1 Z0.600 F3000 ; katmanı değiştir G1 X104.025 Y154.025 F9000; XY düzleminde hareket G1 X95.975 Y154.025 E0.4133 F1397; XY düzleminde hareket ve ekstrüzyon
Aşama 3: Yazıcıyı Sıfırlamak
Son olarak, yazdırma tamamlandığında, G kodu komutlarının bazı son satırları yazıcıyı makul bir varsayılan duruma getirir.
Örneğin, nozul önceden tanımlanmış bir konuma gidebilir, diğer eylemlerin yanı sıra sıcak uç ve yatak ısıtıcıları kapatılır ve motorlar devre dışı bırakılır.
M107 ; fanı kapat G1 Z10 ; nozulu baskıdan uzaklaştır M104 S0 ; sıcak uç ısıtmasını kapat M140 S0 ; yatak ısıtmasını kapat M84 ; motorları kapat
Terminal Girişleri ve Çıkışları
Şimdiye kadar, yalnızca bilgisayarın yazıcıya G kodu komutları göndermesinden (genellikle bir SD kart aracılığıyla aktarılır) bahsettik. Ancak, bu tek iletişim yöntemi değildir.
Pronterface ve OctoPrint gibi bazı kontrol yazılımları, 3D yazıcı ile doğrudan iletişime izin verir; bu durumda komutları manuel olarak girebilirsiniz.
Ayrıca bu yazımızdan OctoPrint Nedir? Nasıl kurulur öğrenebilirsiniz.
Açık nedenlerden dolayı, kod satırlarını tek tek göndererek herhangi bir şey yazdırmak pratik olmaz. Ancak bazen bu iletişim yöntemine, kalibrasyon için değerli bilgileri almak veya 3D yazıcının bir ekranı olmadığında bile başka amaçlar için ihtiyaç duyulur.
Örneğin, M105 “sıcaklıkları bildir” komutu, mevcut sıcak ucu ve yatak sıcaklıklarını alacaktır (bu, daha sonra OctoPrint gibi bir şey tarafından görüntülenebilir).
Bu iletişim aynı zamanda donanım yazılımı düzeyinde sabit kodlanmış EEPROM ayarlarını görmek ve değiştirmek için de çok kullanışlıdır. Bir motorun adımları/mm, maksimum besleme hızları veya PID gibi parametreler M503 (“rapor ayarları”) aracılığıyla görüntülenebilir, manuel olarak değiştirilebilir ve ardından M500 (“ayarları kaydet”) aracılığıyla kaydedilebilir.
G-Code Yazdırma
Şimdiye kadar, G kodunu çok daha iyi okuyabiliyor ve anlayabiliyorsunuz. Yine de yazarsanız faydasını görürsünüz.
Bu web sitesi G kodu çevrimiçi görselleştirme, G kodu komutları yazabileceğiniz ve bunları uygun şekilde simüle edebileceğiniz için becerilerinizi test etmek için harika bir araçtır.
Dilimleyicilerden dışa aktarılan G kodu dosyalarına bakmak, G kodunun 3D yazdırma için nasıl çalıştığına ilişkin bazı bilgiler de sağlamalıdır. Yanınızda bir komut referans sayfası olduğundan emin olun ve kodu keşfedin!
Uyumluluk
G kodu komutlarını anlayarak daha bilgili ve güçlü bir 3D baskı kullanıcısı olacağınızı umuyoruz. G kodu en karmaşık bilgisayar dili olmasa da yine de çok fazla pratik ve çalışma gerektirir.
Bu makaleyi tamamlamadan önce, G kodu uyumluluğu hakkında biraz konuşmaya değer olabilir.
Pek çok 3D yazdırma ürün yazılımı türü vardır ve her biri farklı G kodunun “türlerine” sahip olabilir. Bu, bir makinede çalışan komutlar başka bir makinede çalışmayabileceğinden, büyük uyumluluk sorunlarına yol açabilir.
Dilimleyici yazılımı, kodu makineye özel son işlem sürücülerinden geçirerek bunu gerçekleştirir. Son işlemci, gelen kodun özelleğini algılar ve kodu, üretici yazılımının anlayacağı bir şeye dönüştürür.