Baskı Süresi Tahmini: Gcode Analiz Aracı Geliştirme

3D yazıcı kullanıyorsan Gcode dosyalarının gerçek baskı süresini önceden bilmek çok işe yarar. Slicing yazılımları genellikle hatalı tahminler verir. Dosyayı satır satır analiz ederek hareket hızı, katman yüksekliği ve toplam hareket mesafesinden gerçekçi bir hesaplama yapabiliriz.

Problemi çerçevelersek: Gcode'da her hareket komutu (G1, G0) bir hız değeri (F parametresi) ve koordinatlar içerir. Tüm hareketlerin mesafesini toplayıp ortalama hızla böldüğümüzde dakika cinsinden baskı süresi çıkar. Ekstrüzyon hareketleri (G1 E...) ve boş hareketler (G0) ayrı hesaplanmalı.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1import re
2import math
3
4def estimate_print_time(gcode_file):
5total_distance = 0
6total_time = 0
7current_pos = {'x': 0, 'y': 0, 'z': 0}
8current_speed = 0
9
10with open(gcode_file, 'r') as f:
11for line in f:
12line = line.strip()
13if not line or line.startswith(';'):
14continue
15
16# G1/G0 komutlarını bul
17if line.startswith('G1') or line.startswith('G0'):
18# Koordinatları ve hızı çıkar
19x = re.search(r'X([\d.]+)', line)
20y = re.search(r'Y([\d.]+)', line)
21z = re.search(r'Z([\d.]+)', line)
22f = re.search(r'F([\d.]+)', line)
23
24new_pos = current_pos.copy()
25if x:
26new_pos['x'] = float(x.group(1))
27if y:
28new_pos['y'] = float(y.group(1))
29if z:
30new_pos['z'] = float(z.group(1))
31if f:
32current_speed = float(f.group(1)) / 60 # mm/s'ye çevir
33
34# Mesafeyi hesapla (3D)
35distance = math.sqrt(
36(new_pos['x'] - current_pos['x'])**2 +
37(new_pos['y'] - current_pos['y'])**2 +
38(new_pos['z'] - current_pos['z'])**2
39)
40
41if distance > 0 and current_speed > 0:
42total_distance += distance
43total_time += distance / current_speed
44
45current_pos = new_pos
46
47minutes = total_time / 60
48hours = minutes / 60
49
50return {
51'distance_mm': round(total_distance, 2),
52'time_minutes': round(minutes, 1),
53'time_hours': round(hours, 2),
54'formatted': f"{int(hours)}h {int(minutes % 60)}m"
55}
56
57# Kullanım
58result = estimate_print_time('model.gcode')
59print(f"Toplam mesafe: {result['distance_mm']} mm")
60print(f"Tahmini süre: {result['formatted']}")

Beklenen çıktı:

1Toplam mesafe: 45230.5 mm
2Tahmini süre: 2h 34m

Sık yapılan hata: Hız değeri Gcode'da mm/dakika cinsindedir, hesaplamada mm/saniyeye çevirmek gerekir. Ayrıca G0 (hızlı hareket) komutları genellikle maksimum hızla çalışır, bu da tahminleri etkiler. Daha doğru sonuç için yazıcının maksimum hız değerlerini ayarlamakta fayda var.

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