GCODE: Основы
GCODE: Плюшки от ПавлушкиПосле написания предыдущей статьи ко мне стали поступать вопросы на поводу G-CODE.
Решил написать пост об основах G-CODE.
И так приступим …
Не для кого не секрет, что наш с Вами 3D принтер является простым ЧПУ станком (CNC), который просто выполняет команды оператора.
Чтобы мы с принтером понимали друг друга, умными людьми в начале 1960 годов был придуман специальный язык под названием «G-CODE» (G-код).
Программа, написанная с использованием G-кода, имеет жесткое строение.
Все команды управления объединяются в кадры - состоящие из одной или более команд.
Кадр завершается символом перевода строки (CR/LF).
Порядок команд в кадре строго не оговаривается, но традиционно предполагается, что первыми указываются подготовительные команды, затем команды перемещения, затем выбора режимов обработки и технологические команды.
Если говорить коротко, то наш ПК через USB, просто посылают команды на порт принтера (микроконтроллера), а принтер без прикословно их выполняет.
Немного забегая вперед скажу, что G-код для принтера местами отличается от привычного G-кода. Какие-то команды были переделаны под нужды принтера, какие-то были удалены, какие-то вообще не используются, но в целом все очень похоже.
Описание команд будет производится для прошивки MARLIN, возможно будет работать и на других прошивках.
Будут рассмотрены самые только самые основные команды (рабочий минимум), в поисках экзотики, можно пройти по ссылке.
Сами команды делятся на группы:
G - Подготовительные (основные) команды;
М - Вспомогательные (технологические) команды.
Эти команды имеют параметры.
X - Координата точки траектории по оси X [G0 X100 Y0 Z0]
Y - Координата точки траектории по оси Y [G0 X0 Y100 Z0]
Z - Координата точки траектории по оси Z [G0 X0 Y0 Z100]
E - Координата точки выдавливания пластика [G1 E100 F100]
P - Параметр команды [M300 S5000 P280]
S - Параметр команды [G04 S15]
F - Параметр команды, подача (скорость) [G1 Y10 X10 F1000]
G - команды
G0 - Холостой ход, без работы инструмента [G 0 X 10]
G1 - Координированное движение по осям X Y Z E [G 1 X 10]
G4 - Пауза в секундах [G4 S15]
G28 - Команда Home - паркуем головку [G28 Y0 X0 Z0]
G90 - Использовать абсолютные координаты [G90]
G91 - Использовать относительные координаты [G91]
G92 - Установить текущую заданную позицию [G92]
Пояснение:
Относительные координаты - это координаты относительно текущего положения головки.
На пример, если головка находиться в положении X10 Y10, то при подаче команды G91
G1 X10 F1000, произойдет смещение головы на 10 мм по оси Х на скорости 1000.
Эту команду можно делать много раз, до достижения «софтового» ограничение в прошивке.
Абсолютные координаты - это координаты, строго привязанные к рабочей области.
При выполнении команды G90 G1 X10 F1000 - головка сместиться в координату X10 на скорости 1000.
Команда выполниться только один раз.
Обычные команды
M0 - Сделать паузу и ожидать нажатия кнопки на LCD дисплеи (работает если в прошивку установлен параметр ULTRA_LCD) [G0 X10 Y10 Z10 M0]
M17 - Подать ток на двигатели (двигатели руками не вращаются)
M18 - Убрать ток с двигателей (двигатели можно вращать руками, аналог M84)
M42 - Управление контактами ARDUINO MEGA 2560 [M42 P4 S255]
M80 - Включить питание, только для ATX - блок питания
M81 - Выключить питания, только для ATX - блок питания
M84 - Выключение всех осей (моторов после простоя) [M84 S10]
М112 - Экстренная остановка
M114 - Получить текущие координаты
M115 - Получить версию прошивки
M117 - Написать сообщение на экране [M117 Hello World]
M119 - Получить статус концевиков
M300 - Проиграть звук [M300 S5000 P280]
Команды SD карты
M20 - Прочитать SD карту (прочитать список файлов)
M21 - Инициализировать SD карту
M22 - Использовать SD карту
M23 - Выбрать файл с SD карты [M23 filename.gcode]
M24 - Начать/возобновить печать с SD карты
M25 - Пауза печати с SD карты
M26 - Установить позицию SD карты в байтах [M 26 S 12345]
M27 - Узнать статус печати с SD карты
M28 - Записать файл на SD карту [M 28 filename . gcode]
M29 - Закончить записать файла на SD карте
M30 - Удалить файл с SD карты [M 30 filename . gcode]
M31 - Получить значение, сколько прошло времени с последнего M109
M32 - Выбрать файл с SD карты и начать печатать [M 32 / path / filename #]
M928 - Логирование на SD карту [M 928 filename . gcode]
Экструдер
M82 - Установить экструдер в абсолютную систему координат
M83 - Установить экструдер в относительную систему координат
M104 - Ожидание нагрева экструдера до определенной температуры [M104 S190]
M105 - Получить текущую температуру экструдера [M105 S2]
M106 - Включение вентилятора обдува детали [M106 S127] - мощность 50%
M107 - Выключение вентилятора обдува детали [M 107]
M109 - Нагреть экструдер и удерживать температуру [M109 S215]
Стол
M140 - Установить температуру стола [M140 S65]
M190 - Нагреть стол и удерживать температуру [M190 S60]
PID M301 - Записать PID параметры в EEPROM [M301 H1 P1 I2 D3]
где: H0 – стол, H1 – экструдер
M302 - Разрешить холодное выдавливание [M302 P1].
M303 - Запустить процесс PID калибровки [M303 E-1 C8 S110]
где: E-1 – стол, E0 – хотэнд, C8 – количество попыток, S – температура.
M304 – Задать PID параметры для стола [M304 P1 I2 D3]
EEPROM – внутренняя память микроконтроллера (не обнуляется при выключении)
M500 - Сохранить параметры в EEPROM
M501 - Прочитать параметры из EEPROM
M502 - Сброс параметров EEPROM
Филамент
M200 - Задать диаметр филамента [M200 D1.128]
M600 – Замена филамента.
Данные команды можно подавать в консоли из таких программ как Pronterface или Universal-G-Code-Sender.
В Pronterface можно включить режим ответа в меню Settings / Debug communications, программа будет писать все ответы от принтера.Можно дописать в слайсерах (Slic3r и Cura) в начале и в конце G-код файла.Или открыть файл с G-кодом в блокноте и написать все руками. =)
Чтобы не быть голословным предлагаю Вам разобрать пример G-кода программы:
M190 S60 - включаем нагрев стола и ждём, пока он не нагреется до температуры 60 градусов
M109 S210 - включаем нагрев сопла и ждём, пока оно не нагреется до температуры 210 градусов
G21 - устанавливает метрическую систему координат
G90 - устанавливает абсолютную систему координат
M82 - устанавливает абсолютную систему координат для экструдера
M107 - выключаем обдув детали
M300 S5000 P280 – звуковой сигнал
G28 X0 Y0 - команда Home X Y
G28 Z0 - команда Home Z
G1 X100 Y100 Z5 F1000 - центруем сопло относительно стола
G92 E0 - обнуляет количество выдавленного пластика
G1 F300 E4 - выдавливаем 4 мм пластика со скоростью 300 мм
M117 Printing - выводит сообщение на экран
M106 S125 - включаем обдув детали со скоростью 50%
G1 Z0 - опускаем сопло на 0 мм
G1 X96.11 Y110.92 E87.55 - ездим по координатам и выдавливаем пластик
G1 Z0.2 - поднимаем сопло на 0.2 мм
G1 X96.11 Y111.00 E89.60 - ездим по координатам и выдавливаем пластик
M140 S50 - изменяем температуру стола
.....
G1 Z4.8 - поднимаем сопло на 4.8 мм
G1 X96.11 Y110.92 E87.55 - ездим по координатам и выдавливаем пластик
G1 Z5 - поднимаем сопло на 5 мм
G1 X96.11 Y111.00 E89.60 - ездим по координатам и выдавливаем пластик
G91 - устанавливает относительную систему координат
G1 E-5 F200 - всасывание экструдером 5 мм прутка
M104 S0 - отключением нагрев экструдера
M140 S0 - отключением нагрев стола
M107 - выключаем обдув детали
M84 - выключаем шаговые двигатели
M300 S5000 P280 – звуковой сигнал
Благодарю Вас за внимание!
Еще больше интересных постов
Полуавтоматический спайщик прутка (филамента).
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Не так давно на данном ресурсе появился пост от пользователя...
Anycubic Predator (D) + SKR 1.4(TURBO) + Klipper + Raspberry Pi (Zero W) + 12864 RepRap LCD
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Настраиваем прошивку Marlin и заливаем её в 3D принтер
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Комментарии
Лучше читайте в оригинале (там вики ресурс, который может быть изменён)
http://reprap.org/wiki/G-code
Как всегда, хороший пост)
Xedos, Благодарствую !
Добавил в своё Избранное !
С Уважением,
Ski.
Спасибо! Самое нужное в одном месте, и искать не надо.
Тоже добавил в избранное ;)
P.S. я не графофаг, но, пожалуйста, прочитайте правила про ТСЯ и ТЬСЯ- аж глаз 'режет'.
Добрый день. А куда статья GCODE: Плюшки от Павлушки пропала?
спасибо,добавил в избранное !
у меня вот какая проблема...сейчас пытаюсь печатать Innofil на PICASO 250 через Kisslicer. не могу подобрать параметры и все...
нашел старую джикодину,которой раньше (давно) печатал иннфоилом,запустил ее-печатает отлично.
так вот,собственно ,вопрос ...как вычислить настройки ретракта,слоев,loops, и т.д. из старого g-code ?
может кто шарит и кто-то подсобит ?
Привет. Спасибо за статью.
Может кто подскажет, от чего инициализация карты не происходит?
Конкретно в симплифае в 'содружестве' с мегой/рампс.
Только посмотрев про команды понял, что что-то идёт не так.. И именно если использовать стандартную настройку симплифая, т.е. там прописаны М-команды как должно быть, однако, если использовать команду M21 , то карта становится не видной как через меню принтера так и в программе, а если 'передёрнуть' карту и нажать прочитать файлы карты, то читаются и видятся и даже на печать можно отправить. Как только снова использовать М21 - карта снова становится не видимой ( в статусе проходит 'ошибка инициализации карты'.
Надеюсь понятно написал...
Как понять цифры,например при обдуве- M106 S125-это 50 %
а как будет 100 %?
M106 Sxxx, где xxx - целое беззнаковое восьмибитное число, т.е., значение от 0 до 255. В слайсерах 'как бы для удобства' это пересчитывается в проценты.
Есть ещё интересная команда
M145 S90; Нагрев стола, без ожидания о остановок, до следующей команды для стола. Так можно включить одновременный нагрев стола и экструдера.(Точка с запятой - однострочный комментарий)8)
А нет случайно такой же команды для экструдера? ))
А зачем? Вы просто следом за этой командой ставите команду нагрева экструдера, как обычно. И принтер нагревая стол, будет одновременно нагревать и экструдер.
Во время процесса печати необходимо сменить температуру.
уже разобрался М104 SXXX команда, вместо 'ХХХ' число.
я правильно понял. а то ждать долго нагрева по очереди
M145 S90;
М104 S240
там ошибка в строчке G91 G1 X10 F1000, в разделе об абсолютных координатов.
Куда же без основ. Дело хорошее.
скажите, а как пользоваться командой G29, то есть я запускаю ее, принтер калибруется по столу и зависает над ним, а потом при печати откатывается сначала домой и печатает, так вот калибровка не скидывается?
По G коду, такой вопрос, допустим деталь имеет 70 слоев, высота слоя 0.2 , на слое 40вом мне нужна высота слоя 0,1, какие команды прописать в коде, где вставлять я по моему понял уже.
Благодарю за пост! добавил в избранное.
Спасибо большое ! пригодилась данная статья :)
Хорошая статья, но 'маловато будет'.
Почему в статье не описан код G29, для тех у кого автоуровень - знать про нее обязательно нужно.
Добрый день! Принтер Flashforge Dreamer. Команду М104 в г-коде не видит. G28 выполняет, М104 пропускает и бросается в бой с холодным экструдером. При этом температура поднимается, то есть М109 работает. Можете что-то подсказать? Спасибо.
Добрый день!
Пытаюсь вникнуть в GCODE не могу разобраться как изменяется объем выдавленного пластика.
Поясню - по команде G1 X96.11 Y111.00 E89.60 -
поехала голова и за время движения выдавила 89,6 мм пластика. Если в эту же команду вставить E189.60 - увеличится скорость подачи пластика или после остановки головы в заданных координатах будет продолжаться подача пластика?
Спасибо!
Добрый день.
Может быть кто-нибудь знает команду реверса экструдера? Очень нужно.
И как задать команду отключить охлаждение при достижении температуры ниже пороговой. Спасибо заранее.
G10: Откат пластика (Ретракт) [TABLE] [TR] [TH] Поддержка [/TH] [TH] FiveD [/TH] [TH] Teacup [/TH] [TH] Sprinter [/TH] [TH] Marlin [/TH] [TH] Repetier [/TH] [TH] Smoothie [/TH] [TH] RepRapFirmware [/TH] [TH] Machinekit [/TH] [TH] MakerBot [/TH] [TH] grbl [/TH] [TH] Redeem [/TH] [TH] MK4duo [/TH][/TR] [TR] [TD]Нет [/TD] [TD]Нет [/TD] [TD]Нет [/TD] [TD]Да [/TD] [TD]Да: 0.92 [/TD] [TD]Да [/TD] [TD]dc42,ch [/TD] [TD]Нет [/TD] [TD] ??? [/TD] [TD] ??? [/TD] [TD]Нет [/TD] [TD]Да [/TD][/TR][/TABLE] Параметры Snnn длинна отката (S1 = длинный откат, S0 = короткий откат = по умолчанию) (только RepetierFirmware) Пример G10
Откат нить в соответствии с настройками M207 (Marlin, RepRapFirmware) или в соответствии со значением S (Repetier).
RepRapFirmware распознает команду G10 в качестве команды, чтобы установить смещение инструмента и / или температуры, если параметр Р присутствует, и как команду отката, если данная переменная отсутствует.
Добрый день!
Подскажите как действовать.
Хочу, чтобы после окончания печати вентиляторы обдува экструдера выключались не сразу, а только когда температура сопла достигнет, скажем, 50 градусов. Каким образом будет выглядеть G-код?
M106 S255
M109 R50
M106 S0
Приветствую.
Не подскажет ли кто.
Настраиваю блятач.
Но ниже 0 по z никакими командами голова не опускается.
В прошивке(2.0 для Тево Торнадо) стоит ограничение в 0.
Вроде как есть комадна которая должна выключить ограничение.
Пробовал в прошивке ограничение ставить на -10.
После этого прошивка вообще себя ведет адово(если интересно опишу)
Настраиваю блятач.Только по блюпупу.
...
После этого прошивка вообще себя ведет адово(если интересно опишу)
Пиши исчо.
>> непонял
Жаль, это была эмоциональная шутка в ответ на использованные Вами термины.
Вот для Вас референс на юмореску:
P.S.1.
Совет (добрый):
если хотите действительно помощи, уберите слэнг и разместите лаконичный вопрос в соответствующем разделе нашего сайта.
P.S.2.
У это юморески есть и продолжение:
https://youtu.be/Oxk8hTgjGNQ
ИМХО: по-олбански правильно будет "Пеши исчо".
А то, коллега Вас неправильно поймёт...
>> А то, коллега Вас неправильно поймёт...
Вы правы.
Разьяснения уже дадены, равно как и добрый совет (см.выше).
всем добрый день, подскажите, такая проблема, почти на середине печати принтер зависает, пишет печать выполнена, но при этом на максимум нагревает стол и сопло
Добрый день. У меня такой вопрос: хочу чтобы вначале печати, при возврате экструдера в положение home, скорость была ниже чем установлено по умолчанию в прошивке (экструдер не хило ударяется в концевики, из-за инерции каретка не успевает остановится при срабатывании концевика). В общем для уменьшения износа хочу уменьшить скорость возврата. Можно-ли с командой G28 использовать команду F, и если да, то с какими параметрами? Заранее спасибо за ответ.
Это не инерция, это специально так сделано, каретка ударяется в концевики, затем отъезжает и медленно подходит к концевикам для точности позиционирования (см. ВИки)
как подобрать и сохранить начальную точку оси z? выполняю команды... g28 потом подбираю высоту z например g0z1.2 жму м500. но не сохраняется
Вы, скорее всего, уже нашли ответ, но для истории и других поисков отвечу:
M851 - команда выставления Z offset.
Порядок:
M851 Z0 - устанавливаем offset 0;
G28 - все домой и голова поднимется на 10мм в стандартной настройке;
Ручками опускаем голову на 10мм, подкладываем листок бумаги и начинаем медленно дальше опускать голову до прижатия листка. На экране будет указана высота по Z (в вашем случаи, я так понимаю, 1.2мм);
M851 Z1.2 - выставляем offset 1.2
M500 - все сохраняем
И все выставится.
Если же у вас окажется отрицательное значение (как выше по топику описано realchel) голова не захочет опускаться ниже 0, то нужно первым пунктом добавить команду
M211 S0 - так мы разрешим двигаться ниже нуля, ну и после всех процедур не забываем M211 S1
M190 S60 - включаем нагрев стола и ждём, пока он не нагреется до температуры 60 градусовА могу ли я найти то место в программе, где принтер уже напечатает несколько слоёв (пару миллиметров) и просто вставить такую строку
M109 S210 - включаем нагрев сопла и ждём, пока оно не нагреется до температуры 210 градусов
M190 S0А то, когда я печатаю большие детали, то они начинают отходить от стола и по углам подниматься (печатаю с постоянной температурой, выставленной в принтере)
Подскажите есть ли команда ожидания по времени.
К примеру после окончания печати не выключать нагрев экструдера 10 минут.
Есть такая команда G04 Sxx (хх - количество секунд)(смотри ВиКи). Вставляешь в конец кода перед командой отключения нагрева.
Вот с этим куском GRBL 1.1 не хочет выполнять УП. Стоить его удалить - все норм. За что он отвечает? Inkskape при генерации УП добавляет этот кусок.
G00 S1; endstops
G00 E0; no extrusion
G01 S1; endstops
G01 E0; no extrusion
G21; millimeters
G91 G0 F300.0 Z3.000; pen park !!Zsafe
G90; absolute
G28 X; home
G28 Y; home
G28 Z; home
Какой код мне прописать в Curu, что бы при завершении печати Y перемещался не в 0, а в противоположный конец оси? Я прописал сюда 200, но совсем ничего не происходит...
Для А8 неправильные параметры принтера указаны и 'головы'.
У меня такой вопрос, долго уже ищу ответ :)
Когда в Cura загружаем файл .gcode он пишет "Настройка печати отключена, невозможно изменить файл с G кодом"
"Print setup disabled G-code files cannot be modified"
Открыл я код в блокноте, но вот не найду этот запрет. Может кто подскажет, плз. Нужно поиграть с настройками, а не могу.
Подскажите пожалста код. Нужно после окончания печати отслеживать температуру стола, как только она достигнет 39 градусов - подать звуковой сигнал. Код сигнала я нашел, а как отслеживать (просто опрашивать) темп стола?
а как отслеживать (просто опрашивать) темп стола?
Откройте описание G-code к вашей прошивке, или Марлиновский. Там точно описано. Я как-то решал подобную заморочку. Если правильно помню, в команде управления нагревателем, вместо параметра "S" используется "R" с указанием целевой температуры.
Подскажите, пожалуйста, как в слайсере Repetier-Host после окончания печати переместить головку в начальные координаты, не меняя положения оси Z? Куда в настройках слайсера нужно добавить код один раз чтобы потом не добавлять его каждый раз?
Вот спасибо, добрый человек. Перекопал несколько статей, пока эта наиболее доходчиво написана.
А не подскажите как в начале g coda установить начальную скорость 25 мм.с, а то принтер начинает печатать со скоростью 100 мм.с. В слайсере Cura, в параметрах скорости устанавливаю но оно не работает. Интересно почему! Нужно в начале кода прописать скорость я так понимаю.
Где здесь можно установить начальную скорость печати.
; Default start code
G28; Home extruder
M420 S1
G1 Z10 F{Z_TRAVEL_SPEED}
M107 ; Turn off fan
G90 ; Absolute positioning
M82 ; Extruder in absolute mode
{IF_BED}M190 S{BED}
; Activate all used extruder
{IF_EXT0}M104 T0 S{TEMP0}
G92 E0 ; Reset extruder position
; Wait for all used extruders to reach temperature
{IF_EXT0}M109 T0 S{TEMP0}
Комментарии и вопросы
Нужно срочно иллюстрации делат...
Это в каком году было?
пофих на олбанский.....жду про...
Делаю шестерню для швейной маш...
Добрый день!Подскажите, пожалу...
Cura 4.4.0 видит принтер, гото...
Печать детали с большой площад...