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:
1G282G293M104 S2004G0 X10 Y20 Z0.2 F30005G1 X20 Y30 E5 F15006M109 S200G28 homing (sıfırlama), G0 hızlı hareket, G1 yazıcı hareketi, M komutları yazıcı ayarları (sıcaklık, fan vs.).
Basit bir parser yazalım:
1import re23class GcodeParser:4def __init__(self, filename):5self.filename = filename6self.commands = []78def parse(self):9with open(self.filename, 'r') as f:10for line in f:11line = line.strip()12# Yorumları kaldır13if ';' in line:14line = line.split(';')[0].strip()1516if not line:17continue1819# Komut ve parametreleri ayır20cmd = line[0] # G veya M21code = line[1:3] # Komut numarası2223params = {}24# X10 Y20 Z0.2 gibi parametreleri çıkar25for match in re.finditer(r'([A-Z])([-\d.]+)', line):26params[match.group(1)] = float(match.group(2))2728self.commands.append({29'type': cmd,30'code': code,31'params': params,32'raw': line33})3435def print_summary(self):36for cmd in self.commands:37print(f"{cmd['type']}{cmd['code']}: {cmd['params']}")3839# Kullanım40parser = 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.
0 yorum