Sıfırdan G-code Parseri: 3B Yazıcı Komutlarını Anlamak

3B yazıcılar G-code adlı bir dil kullanır. Bu, yazıcıya nozzle konumunu, sıcaklığı ve hızı söyleyen basit metin komutlarıdır. G0 ileri git, M104 ısıtıcıyı ayarla gibi. Bir parser yazarak bu komutları okuyup işleyebilirsin.

G-code satırları genelde şöyle görünür:

1G28
2G29
3M104 S200
4G0 X10 Y20 Z0.2 F3000
5G1 X20 Y30 E5 F1500
6M109 S200

G28 homing (sıfırlama), G0 hızlı hareket, G1 yazıcı hareketi, M komutları yazıcı ayarları (sıcaklık, fan vs.).

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

Basit bir parser yazalım:

1import re
2
3class GcodeParser:
4def __init__(self, filename):
5self.filename = filename
6self.commands = []
7
8def parse(self):
9with open(self.filename, 'r') as f:
10for line in f:
11line = line.strip()
12# Yorumları kaldır
13if ';' in line:
14line = line.split(';')[0].strip()
15
16if not line:
17continue
18
19# Komut ve parametreleri ayır
20cmd = line[0] # G veya M
21code = line[1:3] # Komut numarası
22
23params = {}
24# X10 Y20 Z0.2 gibi parametreleri çıkar
25for match in re.finditer(r'([A-Z])([-\d.]+)', line):
26params[match.group(1)] = float(match.group(2))
27
28self.commands.append({
29'type': cmd,
30'code': code,
31'params': params,
32'raw': line
33})
34
35def print_summary(self):
36for cmd in self.commands:
37print(f"{cmd['type']}{cmd['code']}: {cmd['params']}")
38
39# Kullanım
40parser = GcodeParser('print.gcode')
41parser.parse()
42parser.print_summary()

Bu kod G-code dosyasını satır satır okur, yorumları temizler (`;` sonrası), komut tipini ve parametreleri ayıklar. Çıktı şöyle olur:

1G28: {}
2G29: {}
3M104: {'S': 200.0}
4G0: {'X': 10.0, 'Y': 20.0, 'Z': 0.2, 'F': 3000.0}
5G1: {'X': 20.0, 'Y': 30.0, 'E': 5.0, 'F': 1500.0}
6M109: {'S': 200.0}

Sık yapılan hata: G-code'daki hareket hızı (F parametresi) mm/dakika cinsinden, ama bunu mm/saniyeye çevirmeden yazıcıya göndermek yanlış sonuç verir. Ayrıca bazı yazıcılar E (ekstruder) değerini bağıl, bazıları mutlak kabul eder, dosyayı oluşturan slicing yazılımının ayarına bak.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz