Обчислення приблизного часу друку вже нарізаного файлу


10

Я почав писати програму, яка обчислює приблизний час друку з файлу G-коду для вже нарізаної моделі.

Програма працює, і це досить точно.

Він працює наступним чином:

  1. Він сканує весь файл G-коду, щоб виявити всі рухи
  2. Він обчислює час для кожного ходу, діливши відстань відрізка на швидкість в мм / с.

Припустимо, це G-код:

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

Це такий розрахунок:

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

У цьому прикладі на друк піде приблизно 10,7 секунди.

Більш загально, використовувана формула для кожного руху:

moveTime = segmentLength / mmPerSecond

Підсумовуючи всі часи руху, ми маємо загальний орієнтовний час друку.

Я бачив, що на деяких форумах зазначено, що час друку в 3D також залежить від деяких параметрів 3D-принтера, особливо Acceleration X, Acceleration Y, Acceleration Z, Jerk і Z-Jerk.

Я хотів би дати можливість використовувати ці значення для більш точного обчислення часу друку; однак я не розумію, як ці значення впливають на час переміщення:

  1. Як слід розглядати прискорення і ривок; і як вони прискорюють або сповільнюють час друку?
  2. Як слід редагувати формулу, щоб включити прискорення та ривок у розрахунок часу друку?

Наскільки акуратними ви повинні бути? Так, ви можете підключити прискорення та компенсувати короткий пробіг, коли двигуни ніколи не досягають повної швидкості перед уповільненням, і так далі, але якщо чистий результат вимикається лише, скажімо, на 2%, то вам все одно? Спробуйте надрукувати щось просте, наприклад квадратну піраміду, і порівняйте своє передбачення з реальністю.
Карл Віттофт

Я хотів би бути максимально точним ... Зараз на друку на 9 годин різниця між передбаченням і реальністю становить 10-15 хвилин, що дуже багато. Я перегляну вихідний код Марліна, щоб дізнатися, як обробляються прискорення та ривки під час друку
BackSlash

Можливо, ви можете перевірити slic3r і подивитися, як він обчислює ці параметри. Я пам’ятаю, як отримував оцінку часу під час нарізки.
FarO

@FarO Я використовую Slic3r, і я ніколи не бачив оцінки часу. Можливо, я не шукаю потрібного місця, але є багато користувачів, які просять про цю функцію в Інтернеті, тому, боюся, немає можливості дізнатися час друку в Slic3r.
зворотна коса риска

@BackSlash Я зазвичай бачу це у Repetier наприкінці нарізки у журналі виводу. Я здогадуюсь тоді це саме від Repetier!
FarO

Відповіді:


5

Я спробував заглянути в мікропрограмне забезпечення принтера, щоб побачити, як налаштування прискорення впливає на рух машини. З того, що я міг сказати, прискорення, здавалося, реалізовувалося по-різному, залежно від того, яку прошивку я переглянув, а також вплинуло те, які налаштування використовуються на принтері. Я більше не дивився, тому що писати різні правила для кожної різної прошивки здавалося занадто великою проблемою. Можливо, хтось, хто знає більше про це, знає, якщо більшість прошивок використовує ті самі розрахунки.

Я підозрюю, що налаштування прискорення не матиме великої різниці у часі, який потребує друк. Вони, здавалося, не мали значення в дрібних відбитках, які я робив друком з низькою швидкістю. Якщо ви друкували більші відбитки з більшою швидкістю, яка мала довгі шляхи, коли насадка встигла розганятися і зменшуватися, тоді я підозрюю, що ви помітите більшу різницю з часом.

Я виявив, що найбільшою помилкою між прогнозованим часом і фактичним часом був час, який машина витрачає на обробку інструкцій. Під час друку моделі, що має багато коротких рухів, які потрібно надіслати принтеру, і їх потрібно обробити та обчислити принтером, я помітив, що принтер призупиняється на частку секунди. Небагато часу, щоб побачити різницю в рухах принтерів, але це досить помітно, щоб почути. Я підозрюю, що на дешевших принтерах це призведе до більшої помилки, ніж прискорення.

Якщо хтось може дізнатись, як обчислюються параметри прискорення принтером і яку команду G-коду можна використовувати для отримання параметрів прискорення з принтера, мені було б дуже цікаво дізнатися про це більше.


Дякую за вашу відповідь, я продовжуватиму пошук. Дякую, що вказали на мене у правильному напрямку: я можу прочитати вихідний код Марліна та шукати частини прискорення та ривка, це, безумовно, допоможе, я не думав про це! Дякую!
BackSlash

3
"Я підозрюю, що параметр прискорення не матиме великої різниці у часі, який потребує друк". <- це не могло бути більш неправильним. Прискорення є домінуючим фактором часу друку, коли швидкість між швидкістю друку та розміром деталі є високою (тобто швидке налаштування швидкості або невеликі деталі або те і інше). Настільки, що збільшення налаштування [максимальної швидкості] в 2 рази навряд чи призведе до 5% скорочення часу друку.
R .. GitHub СТОП ДОПОМОГАТИ ICE

5

Перш за все, є кілька приємних аналізаторів з відкритим кодом, написаних на JavaScript, якими ви можете користуватися в Інтернеті чи читати джерело на веб- сайті https://www.gcodeanalyser.com/ та http://gcode.ws/ . Їхні прогнози не повністю відповідають фактичній прошивці принтера, але вони виконують досить близьку роботу, і читання їх було б корисним.

В основному, історія за прискоренням і ривками полягає в тому, що ви не можете змінити швидкість (швидкість або напрямок) друкуючої головки миттєво. Щоб пришвидшити і сповільнити, потрібен час. Прискорення - це максимальна швидкість, з якою може змінюватися швидкість друкуючої головки. Ривок - це щось неправильне / злому, і це максимальна фальшиво-миттєва зміна швидкості, дозволена на стику двох сегментів / кривих. Суть ривка полягає в тому, щоб уникнути скорботного руху при русі по кривій, що складається з багатьох сегментів, прискорюючи / уповільнюючи в кожному крихітному кутку. Зауважте, що існує два набори налаштувань як для прискорення, так і для ривка:

  • максимальне абсолютне значення (тривалість 3D-вектора), яке часто змінюється у складі gcode, щоб використовувати різні профілі прискорення для переміщень друку проти ходу руху, стіни проти заливки тощо.

  • абсолютні значення на одну вісь (стандартне 1D абсолютне значення) для обмежень машини, які зазвичай встановлюються в налаштуваннях принтера або в стартовому профілі gcode для принтера і ніколи не змінюються.

Рух обмежений завжди дотримуватися обох наборів налаштувань.

Прошивка принтера використовує параметри прискорення і ривка разом з випереджаючим переглядом на майбутніх командах руху , щоб вирішити , як на самому ділі працюють двигуни. Коли він запускає рух, він повинен прискорюватися до заданої максимальної швидкості в межах обмежень прискорення. Він також повинен почати уповільнюватися назад на середині, якщо він не знає, що наступний рух продовжиться в точно такому ж напрямку; на скільки воно має сповільнитися, залежить від різниці векторів руху. Якщо наступний рух буде проходити приблизно в тому ж напрямку, можливо, уникнути уповільнення, використовуючи припусковий ривок, щоб зробити «миттєву» зміну швидкості в куті. Тільки якщо у вас довгі (відносно швидкості) лінійні або приблизно лінійні рухи, ви коли-небудь дійсно досягнете потрібної швидкості.

Отже, щоб оцінити час друку, потрібно це моделювати . Слідкуйте за швидкістю друкувальної головки під час обробки / моделювання gcode, і для кожної команди руху обчислюйте швидкість як функцію часу, використовуючи обмеження прискорення (прискорюючись з максимальною швидкістю, яку вони дозволяють). Вам також потрібно визначити кінцеву швидкість, з якою ви хочете закінчити рух, щоб мати можливість запустити наступну команду руху, і крапку, щоб при необхідності почати уповільнюватися, щоб досягти цієї мети.


Ривок - дериват прискорення.
Триш

1
@trish: за винятком випадків, коли це не так. Дивіться моє запитання 3dprinting.stackexchange.com/questions/10369/… .
R .. GitHub
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.