UNI Форум
G-Code для очень начинающих
G-Code для очень начинающих
Сообщение demonlibra » 07 апр 2020, 21:29
В искусственный интеллект и восстание машин верят только те кто ни разу не писал ручками программы на g-code`е и не программировал для Arduino. Код прошивок Marlin и Lerdge похож, но некоторые команды и синтаксис всё-таки отличаются. Помнить все команды дело бесполезное, главное знать где подсмотреть. Ссылка на on-line документ с описанием G-кодов,
эта же ссылка присутствует в верхнем меню ⇨ Firmware / Прошивки.
Разберем простой пример:
Re: G-Code для очень начинающих
Сообщение demonlibra » 07 апр 2020, 21:43
Re: G-Code для очень начинающих
Сообщение demonlibra » 08 апр 2020, 11:56
Re: G-Code для очень начинающих
Сообщение demonlibra » 08 апр 2020, 22:53
Re: G-Code для очень начинающих
Сообщение demonlibra » 09 апр 2020, 10:17
Если Вы пользуетесь слайсером CURA, то он автоматический добавит команды нагрева стола и HOTEND`а перед стартовым кодом. Вы можете добавить их самостоятельно непосредственно в стартовый код.
Т.е. если в стартовом коде будет строка: M190 S
а в профиле печати будет задано следующее:
В конечном файле с g-кодом Вы получите строку: M190 S85
Добавим команду нагрева стола с ожиданием в начало, так как это довольная долгая стадия.
Результат
Инструкция по использованию G-code для 3D-печати: создание, редактирование, конвертация
Аддитивные технологии на современном уровне развития дают возможность пользователю создавать сложнейшие объекты, практически не вникая в суть техпроцесса. Тем не менее, пользователи 3D-принтеров часто интересуются тем, как работает G-code и как его наиболее эффективно использовать — это помогает глубже погрузиться в процесс и понять все тонкости.
Читайте нашу подробную инструкцию о командах G-code, чтобы узнать — что такое G-code для 3D-принтера и как с ним работать.
Содержание
Что такое G-code?
G-code — условное наименование языка программирования устройств с числовым программным управлением (ЧПУ) и написанного на этом языке кода. Был создан компанией Electronic Industries Alliance в начале 1960-х. Программа, написанная с использованием G-code, имеет жесткую и последовательную структуру. В отличие от других языков программирования, в G-code нет циклов, функций и логических команд, т.е. оборудование выполняет ровно то, что подготовила программа, либо пользователь ручным набором.
Основные команды языка
Основные команды языка начинаются с буквы G (отсюда и его название), это например:
— перемещение рабочих органов оборудования с заданной скоростью (линейное и круговое,
— выполнение типовых команд (таких, как запуск вентиляторов, нагревателей и т.д.),
— управление параметрами, системами координат ( абсолютное или относительное исчисление).
Также существует большое количество команд, что начинаются с букв M и T, они относятся к вспомогательным и используются в фрезерных станках и фрезерных обрабатывающих центрах.
Каждая строка G-code содержит в себе конкретную команду и набор параметров, характеризующий само действие оборудования. Так, обычное перемещение во время печати может характеризоваться рядом параметров, таких как направление, время работы приводов, для перемещения на заданное расстояние, количество выдавленного пластика, скорость и ускорение.
Если раньше программировать действия станков приходилось вручную, то в наше время существует большое многообразие программ, что могут преобразовать загруженный 3D-объект в код управления, необходимый станку для создания этого объекта.
Для 3D-принтеров применяются программы, называющиеся слайсерами.
Такие слайсеры, как Cura, Simplify3D и множество подобных, помогают автоматизировать процесс написания кода управления, пользователю остается лишь использовать полученный с их помощью код. Возможная ручная корректировка сводится к коррекции одного или двух параметров, или поиску лишней команды. Теперь не требуется писать 100-200 строк кода, достаточно лишь сгенерировать код в слайсере и, если требуется, внести небольшие правки.
Для ручного внесения правок в G-code рекомендуем использовать бесплатную программу NotePad++. С её помощью можно найти вредоносную команду, пометить все её повторения в коде и удалить их.
Подробнее о командах читайте далее, в разделе “Популярные команды G-code”.
На какие принтеры можно загружать G-code?
Большинство популярных принтеров работает на G-code. Поскольку этот код можно генерировать в любых доступных слайсерах, таких как как Simplify3D, Cura, Chitubox, CreatWare, Slic3er, и легко редактировать в обычном блокноте или NotePad++, то пользователи самых доступных 3D-принтеров Anet A8, профессиональных 3D-принтеров Wanhao Duplicator 6 Plus и 3D-принтеров с двумя экструдерами Hercules Strong DUO могут перенастроить работу аппаратов для достижения оптимального результата.
Но бывают случаи, когда оборудование работает на зашифрованном G-code. Как пример — это Zortrax и их Слайсер Z-suite, что генерирует файл в расширении Z-code. Увы, такие файлы уже не открыть блокнотом и NotePad++, а сторонний слайсер с этим принтером использовать нельзя.
Принцип кодировки команд для 3D-принтера
Каждая строка G-кода — это команда, которую выполняет 3D-принтер. Если ваш принтер “делает что-то не так”, а механика его при этом исправна и настроена правильно, скорее всего дело в коде, где-то в него закралась неверная или находящаяся не на своем месте команда.
Рассмотрим типичную команду:
G1 X-9.2 Y-5.42 Z0.5 E0.0377
В этой кодировке содержится следующая информация:
G1 — перемещаться по прямой;
Координата Z — 0,5 мм;
Экструзия — 0,0377 мм.
Как видно на примере, кодировка G-code имеет простой синтаксис. Разобраться в командах может любой пользователь и помнить их все не обязательно — достаточно иметь под рукой список.
Рекомендуем заглянуть в “Энциклопедию Тридэшника” Там можно найти описание и параметры большинства команд.
В каких случаях использовать G-code?
В абсолютном большинстве случаев слайсеры составляют корректный G-code, который обеспечит отличный результат в процессе печати, но существует несколько сценариев, когда оправдана ручная правка G-code.
Случаи, когда целесообразно переписать G-код:
Точечные правки — если уже подготовлен для печати файл крупной сложной модели, но имеется ошибка в настройке слайсера и пользователь не может в этом разобраться. Иногда нужно вручную найти лишнюю команду и исправить её.
Специальные настройки — выполнение 3D-принтером определенных действий, таких как изменение температуры экструдера в конкретные моменты времени, при печати деликатных/тонких или просто важных областей модели, если слайсер не имеет такого функционала.
Решение проблемы — при печати крупной сложной детали могут возникнуть сложности на определенном этапе. Для устранения проблемы можно добавить специальную команду, например — включение или выключение обдува или добавление ряда своих команд.
Популярные команды G-code
G28 — вернуться в исходное положение
Эта команда сообщает 3D-принтеру о необходимости вернуться в нулевую точку. С этой команды начинается работа 3D-принтера, а также этой командой заканчивается печать. Печатающая головка перемещается в дальний угол печатной камеры, чтобы пользователь мог легко извлечь деталь.
G1 — линейное движение
С этой команды начинается около 95% строк в файле для печати. Команда G1 задает и направление перемещения печатающей головки. В этой же строке может содержаться команда E, которая указывает, сколько филамента (в миллиметрах) необходимо протолкнуть в сопло. Также в строке можно указать команду F, которая задает скорость движения в миллиметрах в минуту.
Пример: G1 X30 E10 F1800 — протолкнуть 10 мм филамента в экструдер, пока печатающая головка перемещается на 30 мм по координате X со скоростью 1800 мм/мин.
G92 — установить текущее положение
Команда задает текущее положение осей. Одно из наиболее распространенных применений команды — это ось E (положение филамента). Если переопределить текущее положение нити, то все будущие команды будут определяться по новому значению. Обычно это делается в начале каждого слоя.
Пример: G92 E0 — установить текущее положение нити в качестве нулевого.
M104 и M109 — температура экструдера
Команды M104 и M109 задают температурные значения в градусах Цельсия (S) для экструдера (экструдеров). При использовании команды M104 3D-принтер может производить другие действия в процессе нагрева. Команда M109 указывает принтеру не предпринимать других действий, пока не будет достигнута заданная температура. При использовании 3D-принтера с двумя экструдерами используются команды T0 для установления температуры правого экструдера и T1 — для левого.
Пример: M104 S190 T0 — начать разогревать правый экструдер до температуры 190 °C.
M140 и M190 — температура рабочего стола
Эти команды указывают на необходимость нагреть рабочий стол до заданной температуры в градусах Цельсия (S). Аналогично примеру выше, команда M140 будет выполняться 3D-принтером одновременно с другими процессами, а команда M190 указывает на необходимость ожидания, пока рабочий стол не будет нагрет до заданной температуры.
Пример: M140 S50 — разогревать рабочий стол до 50 °C.
M106 — скорость вращения кулера
Эта команда задает скорость вращения кулера, который охлаждает изделие. Скорость вращения (S) устанавливается в диапазоне значений от 0 (выключен) до 255 (максимальная скорость).
Пример: M106 S128 — включить кулер на скорости 50%.
Как отредактировать G-code?
Для редактирования G-code можно использовать различные оффлайн- и онлайн-программы. Рассмотрим основные инструменты.
Notepad++
Бесплатная программа, в которой можно настроить выделение синтаксиса G-code. ПО доступно для ОС Windows.
gCodeViewer
Облачное приложение, которое оптимизировано для создания команд для 3D-принтеров. Среди специфических функций — послойный просмотр изделия в 2D-режиме.
Simplify3D
Популярный слайсер, имеет собственный редактор G-code. Пользователю доступно создание автоматических сценариев, например — стандартное выполнение 3D-принтером определенных действий в начале и в конце процесса печати.
Итоги
Использование языка программирования G-code не только насущно необходимо, но и способствует пониманию 3D-печати. Пользователь не обязан следовать рекомендациям производителей филамента или 3D-принтера, чтобы получить идеально напечатанный объект. Экспериментируя с настройками слайсеров и возможностью ручного редактирования команд G-кода, пользователь может получить любой результат, опираясь на собственный опыт работы с различными материалами и свою фантазию.
Купите Simplify3D — слайсер с редактором G-code, для максимально удобного и понятного взаимодействия с кодом 3D-моделей, а значит и более простой, беспроблемной печати. Покупая ПО в Top 3D Shop вы приобретаете лицензионный программный продукт у официального поставщика на территории России, вся необходимая для отчетности документация предоставляется по требованию.
Печатаем без Home : немного G-code в начале печати
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Всем привет. В G-code я не эксперт, но для своих нужд понемногу разбираюсь.
Возникла потребность, чтобы принтер не возвращал голову домой перед печатью.
Схема работы такая: вручную подгоняется голова к месту начала работы. Причем ось Z тоже начнет печатать именно с того места, в котором ее установили.
Я пользуюсь слайсером Cura. Но и в других все делается аналогично.
Для начала я поставил ; в начале всех строк в разделе ‘Начало G-code’.
Таким образом я закомментировал образцы кода, чтобы потом легче было восстановить эти настройки, просто удалив символ ;
Затем я проделал следующее:
G91 ; перевод принтера в относительную систему координат
G1 X3 Y3 ;Сдвигаем голову на 3 мм по осям от точки начала печати
Дело в том, что я обычно прогреваю голову и стол перед пуском. На стекле может образоваться наплыв материала в месте парковки. Просто отодвигаемся чуть-чуть, чтобы ничто не мешало печати.
G90 ;Обязательно надо перевести принтер в Абсолютную систему координат. Ради эксперимента попробуйте закомментировать эту строку 😉
G92 X0 Y0 Z0 E0 ; Обнуление позиции по осям. Теперь это точка отсчета.
На этом стартовый код оканчивается. Принтер начнет печатать с того места, в котором стоит голова.
Обратите внимание, что при размещении модели в слайсере перед нарезкой необходимо расположить ее как можно ближе к началу координат
Вот и все. Критика и подсказки приветствуются.
Для расширения кругозора по G-code читайте этот материал
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
G-code, потерявшийся брат Assembler-а
Про язык управления промышленными CNC-станками и всевозможными любительскими устройствами вроде 3D-принтеров написано очень много статей, но почитать о том, какова идеология этого языка и как она связана с аппаратной реализацией — почти негде. Поскольку моя работа связана непосредственно с программированием станков и автоматизацией производства, я попробую заполнить этот пробел, а также объяснить, почему выбрал такой странный заголовок.
Пару слов о себе, и почему я вообще решил написать об этом. Мои рабочие обязанности заключаются, в том числе, в том, чтобы заставить любой имеющийся в компании станок с ЧПУ делать всё, что он вообще может физически. Компания — небольшая (единицы сотен сотрудников), но в арсенале — вертикальные фрезерные автоматы Haas трех разных поколений, горизонтальные фрезерные автоматы DMG Mori нескольких типов, лазерный резак Mitsubishi, токарные автоматы Citizen Cincom и куча всего еще. И весь этот зоопарк управляется программами на G-code. Изучая разные реализации этого языка, я понял, что то, что пишут в учебниках и книгах по нему — не всегда является правдой. В то же время, мне стали понятны многие аналогии между этим языком и Assembler-ом, который я изучал когда-то в институте, и на котором практически ничего серьезного никогда не написал.
Предупреждая возможные возражения, сразу скажу, что статья не предполагается как руководство по программированию, это обзор особенностей и странностей языка, а также среды в которой он выполняется.
Базовый синтаксис
Если вы хоть раз видели программу на G-code, то знаете, что это последовательность строк, которые состоят из буквенных кодов, за которыми следуют некие числа. Эти буквенные коды называются «адрес». Причина такого термина очень проста: в первых контроллерах станков программа выполнялась путем записи значений в ячейки памяти, которым были даны буквенные имена. Исполнительные устройства, в свою очередь, читали значения по этим адресам и делали то, что от них требуется. Когда мне приходится обучать операторов, я объясняю им, что контроллер, на самом деле, можно условно поделить на две части: ту, что отвечает за интерфейс с пользователем, и ту, что отвечает за работу механизмов. Они часто и физически разнесены по разным платам. А общение между ними происходит все еще через ограниченный набор этих самых ячеек памяти. Другой вопрос, что со временем, к именованным адресам, которые обозначаются буквами латинского алфавита, добавились еще численные адреса (начинающиеся с символа #), через которые осуществляется доступ к портам ввода-вывода, настройкам, специальным возможностям, и так далее.
Традиционно, когда описывают синтаксис G-code, говорят, что любая команда в программе начинается с буквы G для «подготовительных» кодов и M — для дополнительных, что номер строки начинается с буквы N, а номер программы или подпрограммы — с буквы O. Это, в принципе, правда, но не вся и не всегда.
Ветвление и циклы
Подпрограммы
Указатели, переменные, регистры
Хотя G- и M-коды контроллеров — довольно большая тема, переменные — еще более обширная и сложная история. Дело в том, что «железо» станков управляется огромным количеством переменных, напоминающих по принципу их работы регистры процессоров. Доступ к этим регистрам в каких-то случаях возможен по предопределенным буквенным именам, в каких-то — по номерам, в каких-то — по назначенным буквенно-цифровым именам. При этом, свойства, назначение и поведение этих переменных могут быть совершенно разными.
Если вы хоть раз видели программу на G-code для промышленного станка, вы, возможно, заметили, что в начале самой программы, а иногда — в начале каждого фрагмента или подпрограммы, отвечающей за один инструмент или один элемент детали, есть длинная строка кодов, которые вроде бы ничего не делают. Это так называемая safe line. Она нужна, потому что станок помнит свое состояние. Например, содержимое какого-то регистра может сохраняться даже после выключения и включения станка, потому абсолютно всегда имеет смысл в явном виде устанавливать желаемое состояние перед совершением каких-то операций. Это напоминает то, как в web-разработке используются Reset.css и Normalize.css. Иначе, это правило для программистов звучит как «никогда не предполагай, что станок находится в определенном состоянии, если ты его в это состояние не привел». Пренебрежение этим может стоить дорого, включая капитальный ремонт станка. При этом, наиболее надежной практикой считается именно приведение станка в искомое состояние, а не проверка, находится ли он в нем. Почему? Потому что приведение, как правило, делается одной безусловной командой, а проверка требует условного ветвления.
Причина, почему я упомянул переменные и регистры вместе — то, что многие контроллеры станков имеют одно общее «пространство адресации» ячеек памяти, которые не только выполняют разную функцию, но и «живут» в совершенно разных аппаратных частях контроллера. В одно и то же пространство отображаются такие разные группы ячеек, как действующая страница стека локальных переменных, глобальные общедоступные переменные, глобальные общедоступные энергонезависимые переменные, выделенные регистры хранения координат перемещения, значения датчиков, порты управления состоянием реле внешнего оборудования, порты ввода состояния внешнего оборудования, состояние аварийной остановки, порты выделенного назначения для устройства смены оснастки, переменные калибровочных данных устройств автоматического измерения длины инструмента и положения/размера деталей, положение рабочих систем координат относительно глобальной системы координат станка, типы, геометрия и время жизни (в секундах или циклах) инструмента. Соответственно, множество разных действий могут выполняться простой записью в ту или иную переменную.
Приведение типов
Об обучении
Программированию станков с ЧПУ учат очень разными путями и с разными задачами. В одном случае, речь просто о том, чтобы научить пользоваться CAD/CAM, чтобы программист был в состоянии превратить модель (чертёж) в код, исполняемый на том или ином станке, изготавливающий деталь по модели. Это напоминает процесс обучения программированию «общего назначения» в ВУЗе, где вопросы исполнения кода, аппаратной архитектуры и написания кода на Ассемблере рассматриваются очень поверхностно. В других, заметно более редких случаях, процесс более всего напоминает обучение системному программированию, а примеры исполнения кода на конкретной архитектуре входят в него, как неотъемлемая часть. Поскольку я когда-то учился цифровой электронике, и программирование железа на низком уровне было частью этого, пусть и в довольно скромном объеме, второй вариант лично мне как-то ближе, и именно так я старался преподавать это сам, когда у меня была такая возможность.
Я вполне допускаю, что некоторые аналогии в статье могут показаться кому-то натянутыми, но я и не претендую на их точность. Речь, скорее, о сходстве «духа» упомянутых выше языков, о том, что опыт «ассемблерного мышления» может довольно сильно способствовать глубокому пониманию G-code, тогда как опыт программирования только на языках высокого уровня, отделенных от аппаратной реализации, может вызвать недоумение и даже некоторую неприязнь у того, у кого вдруг возникнет необходимость писать вручную для станков с ЧПУ.
Скрипты для помощи в калибровке стола. Изучаем G Code на практике для начинающих и не только выпуск № 1
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Статья относится к принтерам:
Всем привет всем доброго времени суток и приятного чтения.
Давно уже собирался познакомится поближе с G-кодом, но как-то не приходило в голову для чего это мне нужно, а изучение ради изучения не интересовало. Нужна была какая-нибудь практическая задача решение которой облегчает жизнь. Вместе с тем, очень не нравится во время калибровки стола перемещаться по осям вручную. И как-то с утра потребовалось калибровать принтер и тут сложилось одно с другим и тогда решил попробовать написать скрипт для перемещения печатной головы в 4 угла стола. Сначала думал написать один скрипт для всех точек с небольшими задержками по времени в каждой. Однако исходя из личного опыта и способа калибровки решил перемещение в каждую точку сделать отдельным скриптом. Запускаю скрипты с микро-SD карты через меню принтера «печатать с SD карты». Можно конечно отправлять команды с консоли, но у меня это дольше получается, чем через меню принтера, кроме того были проблемы «подружить» компьютер и принтер и этот способ применения сильно выручал.
Знаком с программированием и многие вещи для меня очевидны, поэтому могу упускать какие-то нужные подробности, будут вопросы задавайте в комментариях.
Первое моё знакомство с G-кодом было здесь: https://3dtoday.ru/blogs/steamgun/g-code-po-russki-dlya-3d-pechati-mini-spravochnik и здесь: https://youtu.be/1cD7a_iRJPk. Пересказывать своими словами хорошее изложение материала не вижу смысла, изучите сами, не маленькие уже)))). Здесь приведу лишь краткое описание тех команд, которые использовал для написания скриптов калибровки.
G90 ; переход в абсолютную систему координат, обычно установлена по умолчанию после включения питания принтера. Для полной определенности, лучше добавить команды в свой скрипт.
G28 ; автоматическая парковка всех осей
G1; перемещение имеет аргументы
Переместить печатную голову в координату Х=10 мм со скоростью 600 мм / минуту
Если надо совершить движение по двум осям одновременно, то запишем:
Движение по оси Z также можно включать в координированное движение, однако движение по оси Z происходит гораздо медленнее, чем по другим осям, поэтому рекомендуется движение по оси Z отдельной командой, например,
G1 Z0.2 F300 ; Переместить печатную голову по оси Z на 0,2мм со скоростью 300мм/мин
В зависимости от состояния стола перед калибровкой, например, вы его для чего-то снимали, может возникнуть ситуация, когда сопло сильно упрется в стол. Если на печатном столе стекло и принтер соплом в него упрется, ничего страшного не должно произойти, а если поверхность мягкая, то такая поверхность может быть повреждена, тогда в каждый скрипт надо добавить подъем головы по оси Z перед началом перемещения, скажем, на 5-10 мм и по окончании перемещения её возврат в нулевое положение. По той же причине сначала калибровку рекомендую проводить при холодном сопле и столе и только после, того как убедились, что сопло нигде не задевает стол и не проплавит поверхность, можно включать нагрев сопла и стола и проводить уже более точную калибровку. Все варианты скриптов и ссылки на готовые файлы смотрите ниже. Кроме вышеуказанного подъем оси Z удобен, что бы не сносить зажимы и прочие выступающие над поверхностью стола предметы.
Для создания первого своего скрипта взял первый попавшийся файл модели, переименовал его в point1_X10_Y10.gcode, открыл его при помощи блокнота из стандартных программ Винды. Выделил всё через Ctrl-A и заменил выделенный диапазон скриптом на G-код:
G1 X10 Y10 F5000.0 ;переползаем в первую точку
Затем этот файл переименовал в point2_X200_Y220.gcode
И написал свой второй cкрипт:
G1 X200 Y220 F5000.0 ;переползаем во вторую точку
Переименовал файл в point3_X200_Y10.gcode
G1 X200 Y10 F5000.0 ; переползаем в третью точку
Так же поступил и для четвертой точки: point4_X10_Y220.gcode
G1 X10 Y220 F5000.0 ;переползаем в четвертую точку
«Продвинутые» варианты скриптов
G28 ; Home для забывчивых
G90 ; включить абсолютную систему координат, на всякий случай
G1 Z10 F300 ; подъем головы на 10 мм над столом
G1 X10 Y10 F5000.0 ;переползаем в первую точку
G1 Z0 ; опускаем голову в нулевую координату
G1 Z10 F300 ; подъем головы на 10 мм над столом
G1 X200 Y220 F5000.0 ;переползаем во вторую точку
G1 Z0 ; опускаем голову в нулевую координату
G1 Z10 F300 ; подъем головы на 10 мм над столом
G1 X200 Y10 F5000.0 ; переползаем в третью точку
G1 Z0 ; опускаем голову в нулевую координату
G1 Z10 F300 ; подъем головы на 10 мм над столом
G1 X10 Y220 F5000.0 ;переползаем в четвертую точку
G1 Z0 ; опускаем голову в нулевую координату
Ссылка на скачивание рабочих скриптов: https://yadi.sk/d/8oni1vYE_ZavBQ
З.Ы. Регулярность подобных выпусков не обещаю, буду публикации по мере решения собственных задач.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.