Система G-кодов и внутренних команд слайсера CreationWorkshop X 1.2.3.

Подписаться на 3Dtoday
pl32
Идет загрузка
Загрузка
17.01.19
655
10
печатает на RK-1
Техничка
11
Статья относится к принтерам:
Wanhao Duplicator 7 (D7) Wanhao Duplicator 7 PLUS
Приветствую, коллеги.
Прошлый раз я писал об системе G-кодов в различных вариантах 54 и 75-й версии CreationWorkshop, о багах в системе G-кодов 75-й версии, и об различиях в отработке G-кодов с компа и с BOX.
Но все течет, все меняется, и осенью 2018 года для владельцев Wanhao D7 или аналогичных принтеров стала доступна новая бесплатная версия слайсера - CreationWorkshop X 1.2.3.
В целом CreationWorkshop X 1.2.3 мало отличается от 54-го или 75-го – основные функции те же, новых наворотов нет, но есть несколько интересных особенностей:
1) Слайсер скачивается с профилями под Wanhao D7 (варианты BOX, дисплей 2, дисплей 3), ничего дополнительно настраивать не надо – надо установить нужный профиль машины.
G-код настроен правильно, никаких ошибок, багов и пр. нет. Разница между компом и BOX учтена, ошибки и багги в кодах для 75-го воркшопа исправлены. Временные задержки на время подъема-опускания платформы рассчитываются автоматически.
2) В слайсере итоговый G-код настраивается. Полностью. Включая засветку (в 54,75-й версиях засветка не настраивалась – G-код был жестко прописан в глубинах программы).
3) Появились пользовательские команды, которым пользователь может присвоить любой код или значение.
4) Появились новые команды, и новые времени задержки печати.

Итак, рассмотрим, какие коды и команды используются.
G1 Z…. – перемещение платформы. Можно задать скорость параметром F
G4 P0 – пауза 0 мс (необходима при работе с BOX, обеспечивает паузу до окончания выполнения предыдущей команды)
G21 – задание единиц измерения (мм)
G28 Z – перемещение платформы в нулевую позицию («дом»)
G91 – использования относительных координат

M17 – инициализация моторов
M18 – отключение моторов
M106 S255 – включение засветки УФ-светодиодом
M106 S0 – выключение засветки УФ-светодиодом
Внимание! Если вы пользуетесь не Wanhao, а другим принтером – например JAP – для отключения надо использовать команду M107.

@cmdOpenShutter – пользовательская команда, заменяется на M106 S255
@cmdCloseShutter – пользовательская команда, заменяется на M106 S0

Значения пользовательских команд задаются в текстовом файле профиля машины:
< UserParameters >
< cmdOpenShutter type="String" default="M106 S255" / >
< cmdCloseShutter type="String" default="M106 S0" / >
Соответственно можно задать свои команды, или заменить M106 S0 на M107 (актуально для JAP).

%d$CURSLICE – номер слоя. Внутренняя переменная.

%d$SettleTime – задержка на растекание полимера, задается в окне SettleTime
%d$BlankTime – задержка времени между отключением подсветки и подъемом платформы, задается в окне BlankTime. Фактически не нужна.
%d$TopTime – задержка времени платформы в верхнем положении. По умолчанию 0, имеет смысл ставить 100 мс. Задается в окне TopTime

$ZLiftDist – высота подъема платформы. Задается в соответствующем окне.
$NumFirstLayers – количество первых слоев. Задается в соответствующем окне.
$ZBottomLiftRate – скорость подъема платформы на первых слоях Задается в соответствующем окне.
$ZLiftRate – скорость подъема платформы на остальных слоях Задается в соответствующем окне.
F$ZRetractRate – скорость опускания платформы. Задается в соответствующем окне.
$ZDir – направление движения, определяется схемой (top-dawn или dawn-top).
$LayerThickness – толщина слоя. Задается в соответствующем окне.

< Delay > - внутренняя команда Воркшопа. Задает промежуток времени. Воспринимается как Воркшопом, так и BOX.
< Takes > - внутренняя команда Воркшопа. Задает промежуток времени. Отличие от < Delay > - позволяет использовать условные операторы для задания времени, воспринимается только Воркшопом и не воспринимается BOX.
Примечание – пробелов не надо. Здесь и далее установлены пробелы, иначе движок сайта воспримет команды Воркшопа как команды движка.

Теперь рассмотрим, что же нам предлагается по умолчанию.

Стартовый код:
;********** Header Start ********
G21 ; (установка единиц в мм)
G91 ; (относительная система координат)
M17 ; (инициализация двигателей)
; G28 Z ; Привод платформы в «ноль» - «заремено» - т.е данная команда не будет выполняться.
Если вы хотите, чтобы перед началом печати у вас платформа автоматически отправлялаьс «в дом» - надо убрать точку с запятой перед командой.


Код перед засветкой слоя:
;********** Pre-Slice %d$CURSLICE ******** ; В G-код запишется комментарий с номером слоя
G4 P0 ; Код для BOX – дождаться выполнения предыдущих команд (т.е дождаться опускания платформы), при усправлении с компа не нужен
;< Delay > %d$SettleTime ; задержка времени на растекание полимера

Код засветки слоя (в предыдущих версиях Воркшоп отсуствовал!).
;********** Layer %d$CURSLICE ******** ; В G-код запишется комментарий с номером слоя
;< Slice > %d$CURSLICE ; вывод кадра с номером, равным номеру слоя
@cmdOpenShutter ; UV on ; строка будет заменена на M106 S255 – включение засветки
;{$CURSLICE < $NumFirstLayers? < Delay > %d$FirstLayerTime: < Delay > %d$LayerTime} ; команда < Delay > не поддерживает условный оператор, поэтому два времени засветки приходится задавать вот таким хитрым способом… Напомню – у нас два времени засветки – для первых и для последующих слоев.
@cmdCloseShutter ; UV off ; строка будет заменена на M106 S0 – отключение засветки,
;< Slice > Blank ; вывод пустого кадра
;< Delay > %d$BlankTime ; задержка времени перед подъемом платформы.

Код подъема-опускания платформы:
;********** Lift Sequence %d$CURSLICE ********; В G-код запишется комментарий с номером слоя
G1 Z($ZLiftDist * $ZDir) F{$CURSLICE < $NumFirstLayers?$ZBottomLiftRate:$ZLiftRate} ; подъем платформы, условный оператор задает две скорости – для первых и последующих слоев.
;< Takes > {$CURSLICE < $NumFirstLayers?%d($ZLiftDist*1000*60/$ZBottomLiftRate):%d($ZLiftDist*1000*60/$ZLiftRate)} ; автоматически вычисляется время задержки – время подъема платформы, с учетом двух скоростей. Для управления с компа. При работе с BOX не нужна.
G4 P0 ; BOX не воспринимает команду < Takes >, но по команде G4 будет ожидать конца подъема.
;< Delay > %d$TopTime ; задержка платформы в верхнем положении
G1 Z(($LayerThickness-$ZLiftDist) * $ZDir) F$ZRetractRate ;опускание платформы
;< Takes > %d(($ZLiftDist*1000-$LayerThickness*1000)*60/$ZRetractRate) ; автоматически вычисляется время задержки – время опускания платформы.

Код окончания печати
;********** Footer ********
@cmdCloseShutter ; UV off ; строка будет заменена на M106 S0 – отключение засветки,
G4 P0 ; Ожидание окончания выполнения предыдущей команды BOX
G1 Z40.0 F150.0 ; подъем платформы на 40 мм со скростью 150 мм/мин. Параметры подъема и скорость подъема можно изменять вручную во вкладке G-коды.
Внимание! Если у вас высокая деталь (выше 160 мм) – высоту подъема нужно уменьшить, чтобы платформа не вылетела с винта, попутно сломав «антивоблинг» - верхнего концевика нет!

G4 P0 ; Ожидание окончания выполнения предыдущей команды BOX
M18 ; Отключение моторов
;< Completed > ; сообщение, что печать закончена.

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

Скриншоты программы:
Вкладка для настройки G-кодов:
9b7942cc5282c098fb8ce0a07ea81d55.jpg
Вкладка для задания времени, скорости, высоты, толщины, и т.п.:
PREVIEW
Вкладка с пользовательскими командами:
4a5cab0c23639d36dc527efbec6e0fe6.jpg
На этом пока все!
Удачной печати и разумных идей по модификации G-кодов.
Подписаться на 3Dtoday
11
Комментарии к статье

Комментарии

17.01.19 в 12:49
1
Низкий поклон за расшифровку кодов!!! Спасибо большое!
17.01.19 в 12:58
1
Подскажите, как в настройках занизить мощность засветки диода?
17.01.19 в 13:11
1
Если правильно понимаю команды, то в команде "M106 S255" параметр Sxxx задаёт яркость светодиода. 0 - выключен, 255 - максимальная яркость.

Это при условии, что драйвер светодиода поддерживает ШИМ управление.
17.01.19 в 13:13
1
Да, но не в каждой же строчке менять. В строй версии в настройках была команда засветки, где можно было поменять один раз по умолчанию для всех слоёв. А в новой версии команды переписаны.
17.01.19 в 13:18
3
Все верно...
Просто есть одна хитрость - из воркшопа не поменять (по крайней мере на моей машине).
Надо менять в текстовом файле с профилем машины.
Ниже описал где и как
17.01.19 в 13:16
3
Заходите в папку, где у вас воркшоп - обычно это "CWX-1.2.3".
Находите в ней папку "mashines" - там лежат файлы с профилями машин, расширение .machine
Выбираете тот файл, который у вас установлен - например "WanhaoD7-D7Box.machine".
Открываете блокнотом, находите (почти в самом конце) сточки
< UserParameters >
< cmdOpenShutter type="String" default="M106 S255" / >
< cmdCloseShutter type="String" default="M106 S0" / >

Меняете S255 (полна засветка) на другое число, например S122 (50% мощности), или S200 (примерно 79% мощности) _ т.юе. должно получиться так:
< UserParameters >
< cmdOpenShutter type="String" default="M106 S200" / >
< cmdCloseShutter type="String" default="M106 S0" / >
и сохраняете файл профиля (можно под другим именем).
Потом запускаете воркшоп - и все (если сохранили с прежним именем), или выбираете новый файл профиля машины (если сохранили с новым именем).
17.01.19 в 13:34
2
В качестве варианта - заходите во вкладки G-кодов, находите вкладку Layer

;********** Layer %d$CURSLICE ********
;< Slice > %d$CURSLICE ;
@cmdOpenShutter ; UV on ;
;{$CURSLICE < $NumFirstLayers? < Delay > %d$FirstLayerTime: < Delay > %d$LayerTime} ;
@cmdCloseShutter ; UV off ;
;< Slice > Blank ;
;< Delay > %d$BlankTime ;

и меняете @cmdOpenShutter ; UV on ; на M106 S200 или еще что.
Потом сохраняете G-код.
Разница - в случае редактирования профиля машины мощность засветки будет изменена для всех профилей полимеров, а в случае редактирования непосредственно G-кода - только в профиле данного конкретного полимера.
Иногда может быть полезно - когда разные полимеры требуют разной мощности засветки.
17.01.19 в 14:38
1
Ещё раз спасибо за подробный разбор и советы! Статья в избранном! Максимально актуальная и полезная информация.
17.01.19 в 13:26
1
Спасибо Роман за ещё раз разжёванную раскладку кодов, всё таки добавлю эту статью в избранные т.к. в голове не держу их.
Временные задержки на время подъема-опускания платформы рассчитываются автоматически.

Вы ни чего не попутали? У нас наверное разные версии CW 1.2.3
У меня вот так выглядит
52e505dddf2b72d0df25ddb25f0dfd64.jpg
17.01.19 в 13:37
1
Все верно.
Временные задержки рассчитываются автоматически в момент генерации G-кода, нигде ничего ни вводить, не нажимать не надо:
Код подъема-опускания платформы:
;********** Lift Sequence %d$CURSLICE ********; В G-код запишется комментарий с номером слоя
G1 Z($ZLiftDist * $ZDir) F{$CURSLICE < $NumFirstLayers?$ZBottomLiftRate:$ZLiftRate} ; подъем платформы, условный оператор задает две скорости – для первых и последующих слоев.
;< Takes > {$CURSLICE < $NumFirstLayers?%d($ZLiftDist*1000*60/$ZBottomLiftRate):%d($ZLiftDist*1000*60/$ZLiftRate)} ; автоматически вычисляется время задержки – время подъема платформы, с учетом двух скоростей. Для управления с компа. При работе с BOX не нужна.
G4 P0 ; BOX не воспринимает команду < Takes >, но по команде G4 будет ожидать конца подъема.
;< Delay > %d$TopTime ; задержка платформы в верхнем положении
G1 Z(($LayerThickness-$ZLiftDist) * $ZDir) F$ZRetractRate ;опускание платформы
;< Takes > %d(($ZLiftDist*1000-$LayerThickness*1000)*60/$ZRetractRate) ; автоматически вычисляется время задержки – время опускания платформы.

Жирным выделил формулы расчета временных задержек на подъем и опускание платформы.
В 54-й и 75-й версиях - надо было нажимать кнопку "автокалк" для расчета. Здесь - все автоматически.

Для написания комментариев, пожалуйста, авторизуйтесь.

Читайте в блогах

Снижаем цены на популярные модели Wanhao!

Неприступный замок: UrbanAlps печатает на 3D-принтерах малоуязвимые замки и ключи

Алхимия фотополимерных смол – подводим итоги.

Компания FELIXprinters анонсировала FDM 3D-принтеры Pro L и Pro XL

Fusion360 для чайников.

MMRU (Multi Material Russian Upgrade) Remix on MMU2 (Часть 5: Когда почти работает - ничего не дает)