Menghitung perkiraan waktu cetak file yang sudah diiris

10

Saya mulai menulis aplikasi yang menghitung perkiraan waktu cetak total dari file G-code untuk model yang sudah diiris.

Program ini berfungsi dan cukup akurat.

Ia bekerja sebagai berikut:

  1. Ini memindai seluruh file kode-G untuk mengidentifikasi semua gerakan
  2. Ini menghitung waktu untuk setiap gerakan dengan membagi jarak segmen dengan kecepatan dalam mm / s.

Mari kita asumsikan ini adalah kode-G:

G28 ; home all axes
G1 Z0.200 F5400.000
G1 X158.878 Y27.769 E6.65594 F900.000

Ini perhitungan yang dilakukannya:

totalTime = 0

# G28 ; home all axes
currentX = 0 mm
currentY = 0 mm
currentZ = 0 mm

# G1 Z0.200 F5400.000
newZ = 0.2 mm
mmPerSecond = 5400 / 60 = 90 mm/s
deltaZ = newZ - currentZ = 0.2 - 0 = 0.2 mm
segmentLength = deltaZ  = 0.2 mm
moveTime = segmentLength / mmPerSecond = 0.2 / 90 = 0.002 s
totalTime = totalTime + moveTime = 0 + 0.002 = 0.002 s

# G1 X158.878 Y27.769 E6.65594 F900.000
newX = 158.878 mm
newY = 27.769 mm
mmPerSecond = 900 / 60 = 15 mm/s
deltaX = newX - currentX = 158.878 - 0 = 158.878 mm
deltaY = newY - currentY = 27.769 - 0  = 27.769 mm
segmentLength = square_root(deltaX² + deltaY²) = 161.287 mm
moveTime = deltaZ / mmPerSecond = 161.287 / 15 = 10.755 s
totalTime = totalTime + moveTime = 0.002 + 10.755 = 10.757 s

Dalam contoh ini, cetakan akan memakan waktu sekitar 10,7 detik.

Lebih umum, rumus yang digunakan adalah, untuk setiap gerakan:

moveTime = segmentLength / mmPerSecond

Dengan menjumlahkan semua waktu bergerak, kami memiliki total perkiraan waktu cetak.

Saya telah melihat bahwa beberapa forum menyatakan bahwa waktu cetak 3D juga tergantung pada beberapa pengaturan pada printer 3D, terutama Akselerasi X, Akselerasi Y, Akselerasi Z, Jerk, dan Z-Jerk.

Saya ingin memungkinkan untuk menggunakan nilai-nilai itu untuk lebih akurat menghitung waktu cetak; namun, saya tidak mengerti bagaimana nilai-nilai tersebut mempengaruhi waktu perpindahan:

  1. Bagaimana seharusnya Akselerasi dan Jerk dipertimbangkan; dan, bagaimana mereka mempercepat atau memperlambat waktu cetak?
  2. Bagaimana saya harus mengedit rumus saya untuk memasukkan Akselerasi dan Jerk dalam perhitungan waktu cetak?
BackSlash
sumber
Seberapa akurat Anda harus? Ya, Anda dapat memasang akselerasi, dan mengimbangi putaran pendek di mana motor tidak pernah mencapai kecepatan penuh sebelum perlambatan, dan seterusnya, tetapi jika hasil bersihnya hanya mati oleh, katakanlah, 2%, apakah Anda peduli? Coba cetak sesuatu yang sederhana seperti piramida persegi dan bandingkan prediksi Anda dengan kenyataan.
Carl Witthoft
Saya ingin menjadi setepat mungkin ... Sekarang pada 9 jam mencetak perbedaan antara prediksi dan kenyataan adalah 10-15 menit, yang banyak. Saya akan melihat kode sumber marlin untuk menemukan bagaimana akselerasi dan brengsek ditangani saat mencetak
BackSlash
Mungkin Anda bisa memeriksa slic3r dan melihat bagaimana menghitung parameter tersebut. Saya ingat mendapatkan perkiraan waktu saat mengiris.
FarO
@ Faro Saya menggunakan Slic3r dan saya tidak pernah melihat estimasi waktu. Mungkin saya tidak melihat tempat yang tepat tetapi ada banyak pengguna yang meminta fitur itu melalui web, jadi saya khawatir tidak ada cara untuk mengetahui waktu cetak di Slic3r.
BackSlash
@ BackSlash Saya biasanya melihatnya di Repetier pada akhir pemotongan di log keluaran. Saya kira itu dari Repetier sendiri!
FarO

Jawaban:

5

Saya telah mencoba melihat ke dalam firmware printer untuk melihat bagaimana pengaturan Percepatan mempengaruhi pergerakan mesin. Dari apa yang saya tahu, Akselerasi tampaknya diterapkan secara berbeda tergantung pada firmware yang saya lihat dan juga dipengaruhi oleh pengaturan yang digunakan pada printer itu. Saya tidak melihat lebih jauh karena menulis aturan yang berbeda untuk setiap firmware berbeda sepertinya terlalu banyak masalah. Mungkin seseorang yang tahu lebih banyak tentang ini akan tahu jika sebagian besar firmware menggunakan perhitungan yang sama.

Saya menduga bahwa pengaturan percepatan tidak akan membuat banyak perbedaan dengan waktu yang dibutuhkan untuk mencetak. Mereka tampaknya tidak membuat perbedaan pada cetakan kecil yang telah saya lakukan dengan kecepatan rendah. Jika Anda mencetak cetakan yang lebih besar dengan kecepatan lebih cepat yang memiliki jalur panjang di mana nozzle punya waktu untuk berakselerasi dan melambat maka saya kira Anda akan melihat perbedaan yang lebih besar dari waktu ke waktu.

Saya telah menemukan bahwa kesalahan terbesar antara waktu yang diperkirakan dan waktu yang sebenarnya adalah waktu yang dihabiskan mesin untuk memproses instruksi. Saat mencetak model yang memiliki banyak gerakan pendek yang perlu dikirim ke printer dan harus diproses dan dihitung oleh printer, saya perhatikan printer akan berhenti sebentar selama sepersekian detik. Tidak cukup lama untuk melihat perbedaan pergerakan printer, tetapi cukup terlihat untuk didengar. Saya menduga bahwa pada printer yang lebih murah ini akan menyebabkan kesalahan yang lebih besar daripada akselerasi.

Jika seseorang dapat mengetahui bagaimana pengaturan akselerasi dihitung oleh printer dan perintah G-code apa yang dapat digunakan untuk mengeluarkan pengaturan akselerasi dari printer, saya akan sangat tertarik mengetahui lebih banyak tentang ini.

pengguna802599
sumber
Terima kasih atas jawaban Anda, saya akan terus mencari. Terima kasih telah menunjukkan saya ke arah yang benar: Saya dapat membaca kode sumber Marlin dan mencari bagian kontrol percepatan dan brengsek, pasti akan membantu, saya tidak memikirkannya! Terima kasih!
BackSlash
3
"Saya menduga bahwa pengaturan percepatan tidak akan membuat banyak perbedaan dengan waktu yang dibutuhkan untuk mencetak." <- ini tidak salah lagi. Akselerasi adalah faktor dominan dalam waktu cetak setiap kali rasio antara kecepatan cetak dan ukuran detail tinggi (yaitu pengaturan kecepatan cepat atau detail kecil atau keduanya). Sedemikian rupa sehingga meningkatkan pengaturan kecepatan [maks] dengan faktor 2x tidak mungkin membuat bahkan pengurangan waktu cetak sebesar 5%.
R .. GitHub BERHENTI MEMBANTU ICE
5

Pertama-tama, ada beberapa analisa open source bagus yang ditulis dalam JavaScript yang dapat Anda gunakan online, atau baca sumbernya, di https://www.gcodeanalyser.com/ dan http://gcode.ws/ . Prediksi mereka tidak sepenuhnya cocok dengan firmware printer yang sebenarnya, tetapi mereka melakukan pekerjaan yang cukup dekat, dan membacanya akan informatif.

Pada dasarnya, kisah di balik akselerasi dan brengsek adalah Anda tidak dapat mengubah kecepatan (kecepatan atau arah) print head secara instan. Diperlukan waktu untuk mempercepat dan memperlambat. Akselerasi adalah kecepatan maksimum di mana kecepatan print head dapat berubah. Brengsek adalah sesuatu yang keliru / retas, dan merupakan maks kecepatan palsu-sesaat dalam kecepatan yang diizinkan pada persimpangan dua segmen / kurva. Titik brengsek adalah untuk menghindari gerakan berombak ketika bergerak sepanjang kurva yang terdiri dari banyak segmen dengan mempercepat / mengurangi kecepatan di setiap sudut kecil. Perhatikan bahwa ada dua set pengaturan untuk akselerasi dan brengsek:

  • nilai absolut maksimum (panjang vektor 3D) yang sering diubah sebagai bagian dari kode sandi untuk menggunakan berbagai profil percepatan untuk gerakan cetak vs gerakan perjalanan, dinding vs pengisi, dll.

  • nilai absolut per sumbu (nilai absolut standar 1D) untuk batasan mesin, yang biasanya diatur dalam pengaturan printer atau profil mulai kode untuk printer Anda dan tidak pernah berubah.

Gerakan dibatasi untuk selalu menghormati kedua set pengaturan.

Firmware printer menggunakan pengaturan percepatan dan brengsek bersama dengan lookahead pada perintah gerak yang akan datang untuk memutuskan bagaimana sebenarnya mengoperasikan motor. Ketika memulai gerakan, ia harus mempercepat hingga kecepatan maks yang dikonfigurasi dalam batasan akselerasi. Ia juga harus mulai memperlambat kembali di tengah jalan kecuali ia tahu gerakan selanjutnya akan berlanjut ke arah yang sama persis; berapa banyak harus melambat tergantung pada perbedaan vektor gerakan. Jika gerakan berikutnya akan berada di sekitar arah yang sama, itu mungkin bisa menghindari melambat dengan menggunakan penyimpangan brengsek untuk membuat perubahan kecepatan "seketika" di sudut. Hanya jika Anda memiliki gerakan linear (relatif terhadap kecepatan) yang panjang atau kira-kira linear, Anda akan benar-benar mencapai kecepatan yang diminta.

Jadi, untuk memperkirakan waktu cetak, Anda perlu memodelkan ini. Melacak kecepatan print head saat memproses / mensimulasikan gcode, dan untuk setiap perintah gerak, hitung kecepatan sebagai fungsi waktu menggunakan batas akselerasi (berakselerasi pada kecepatan maksimum yang dimungkinkan). Anda juga perlu mencari tahu kecepatan akhir yang Anda inginkan untuk mengakhiri gerakan agar dapat memulai perintah gerak berikutnya, dan titik untuk mulai melambat jika perlu untuk mencapai itu.

R .. GitHub BERHENTI MEMBANTU ES
sumber
Jerk adalah turunan dari akselerasi.
Trish
1
@ Trish: kecuali kalau tidak. Lihat pertanyaan saya 3dprinting.stackexchange.com/questions/10369/… .
R .. GitHub BERHENTI MEMBANTU ICE