Расчет расчетного времени печати уже нарезанного файла

g-code acceleration estimation

Я начал писать приложение, которое вычисляет предполагаемое общее время печати по файлу 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-принтера, особенно ускорения X, ускорения Y, ускорения Z, рывка и Z-рывка.

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

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

, 👍11

Обсуждение

Насколько вы должны быть внимательны? Да, вы можете подключить ускорение и компенсировать короткие пробеги, когда двигатели никогда не достигают полной скорости перед замедлением и так далее, но если чистый результат только, скажем, на 2%, вас это волнует? Попробуйте напечатать что-нибудь простое, например квадратную пирамиду, и сравните свое предсказание с реальностью., @Carl Witthoft

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

Может быть, вы могли бы проверить slic3r и посмотреть, как он вычисляет эти параметры. Я помню, как получил оценку времени при нарезке., @FarO

@FarO Я использую Slic3r и никогда не видел оценки времени. Может быть, я не смотрю в нужное место, но есть много пользователей, которые просят об этой функции через Интернет, поэтому я боюсь, что в Slic3r невозможно узнать время печати., @BackSlash

Я обычно вижу ее в Repetier в конце среза в выходном журнале. Я думаю, тогда это от самого Репитера!, @FarO


2 ответа


5

Я попытался изучить встроенное по принтера, чтобы узнать, как настройка ускорения влияет на движение машины. Из того, что я мог сказать, ускорение, казалось, реализовывалось по-разному в зависимости от того, на какую прошивку я смотрел, а также зависело от настроек, используемых на принтере. Я не стал смотреть дальше, потому что написание разных правил для каждой отдельной прошивки казалось слишком большой проблемой. Возможно, кто-то, кто знает об этом больше, знал бы, использует ли большинство прошивок одни и те же вычисления.

Я подозреваю, что настройка ускорения не будет иметь большого значения для времени, которое занимает печать. Они, казалось, не имели никакого значения для небольших отпечатков, которые я печатал с медленной скоростью. Если бы вы печатали более крупные отпечатки на более высоких скоростях, у которых были длинные пути, где сопло успевало ускоряться и замедляться, я подозреваю, что вы заметили бы большую разницу со временем.

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

Если кто-нибудь сможет узнать, как параметры ускорения рассчитываются принтером и какую команду G-кода можно использовать для получения параметров ускорения из принтера, мне было бы действительно интересно узнать больше об этом.


,

Спасибо за ваш ответ, я продолжу поиски. Спасибо, что указали мне правильное направление: я могу прочитать исходный код Marlin и найти детали управления ускорением и рывком, это, безусловно, поможет, я об этом не думал! Спасибо!, @BackSlash

"Я подозреваю, что настройка ускорения не будет иметь большого значения для времени, которое занимает печать". <-- это не может быть более неправильным. Ускорение является доминирующим фактором во времени печати, когда соотношение между скоростью печати и размером деталей велико (т. Е. Настройка быстрой скорости или мелкие детали или и то, и другое). Настолько, что увеличение [максимальной] скорости в 2 раза вряд ли приведет к сокращению времени печати даже на 5%., @R.. GitHub STOP HELPING ICE


6

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

По сути, история ускорения и рывка заключается в том, что вы не можете мгновенно изменить скорость (скорость или направление) печатающей головки. Требуется время, чтобы ускориться и замедлиться. Ускорение-это максимальная скорость, с которой может изменяться скорость печатающей головки. Рывок-это что-то вроде неправильного названия/взлома, и это максимальное мгновенное изменение скорости, допустимое на пересечении двух сегментов/кривых. Смысл рывка в том, чтобы избежать прерывистого движения при движении по кривой, состоящей из множества сегментов, ускоряясь/замедляясь на каждом крошечном углу. Обратите внимание, что существует два набора настроек как для ускорения, так и для рывка:

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

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

Движение ограничено, чтобы всегда соблюдать оба набора настроек.

Прошивка принтера использует настройки ускорения и рывка, а также смотрит на предстоящие команды движения, чтобы решить, как на самом деле управлять двигателями. Когда он начинает движение, он должен разогнаться до заданной максимальной скорости в пределах ограничений на ускорение. Он также должен начать замедляться на полпути, если только он не знает, что следующее движение будет продолжаться в том же направлении; насколько оно должно замедлиться, зависит от разницы в векторах движения. Если следующее движение будет происходить примерно в том же направлении, возможно, удастся избежать замедления, используя припуск на рывок для "мгновенного" изменения скорости на повороте. Только если у вас есть длинные (относительно скорости) линейные или приблизительно линейные движения, вы когда-нибудь действительно достигнете требуемой скорости.

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

,

Рывок является производным ускорения., @Trish

@триш: за исключением тех случаев, когда это не так. Смотрите мой вопрос https://3d-printery.ru/topics/10369/why-does-jerk-have-units-of-mm-s-rather-than-mm-s%c2%b3., @R.. GitHub STOP HELPING ICE