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


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-принтере, особенно от ускорения X, ускорения Y, ускорения Z, рывка и Z-рывка.

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

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

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

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

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

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

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

Ответы:


5

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

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

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

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


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

3
«Я подозреваю, что настройка ускорения не будет иметь большого значения для времени, которое занимает печать». <- это не может быть больше неправильно. Ускорение является доминирующим фактором во время печати, когда соотношение между скоростью печати и размером детали является высоким (то есть, настройка быстрой скорости или мелкие детали или оба). Настолько, что увеличение скорости [max] в 2 раза вряд ли приведет к сокращению времени печати даже на 5%.
R .. GitHub ОСТАНОВИТЬ ЛЬДА

5

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

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

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

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

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

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

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


Рывок является производной от ускорения.
Триш

1
@trish: кроме случаев, когда это не так. Смотрите мой вопрос 3dprinting.stackexchange.com/questions/10369/… .
R .. GitHub ОСТАНОВИТЬСЯ, ПОМОГАЯ ЛЬДУ
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.