что такое модальные g коды
Домашний ЧПУ-фрезер как альтернатива 3D принтеру, часть третья, ПО и G-code
В этой статье хотелось бы рассказать о необходимом в работе ПО, а заодно дать маленькую вводную по g-коду. Опять прошу простить непрофессионала, могу что-то упустить, а в чем-то быть неточным. С другой стороны, все описанное в моих статьях — исключительно личный опыт, и он точно работает в приближенных к офисно-гаражно-домашним условиях на простых китайских фрезерах с ЧПУ.
ПО для работы можно разделить по уровню абстракции снизу вверх: прошивка драйверов двигателей, «стойка ПУ» или замещающий ее программно-аппаратный комплекс на базе ПК или МК, CAM — ПО, строящее траекторию движения инструмента и преобразующее ее в G-код, и CAD.
Наиболее низкоуровневое ПО — прошивка драйверов двигателей, которая преобразует сигналы шага и направления (step/dir) для шаговых двигателей либо скорость/направление для серводвигателей в значения напряжения и тока, подаваемые на обмотки двигателей; его мы не выбираем и не модифицируем, по крайней мере в обсуждаемом случае.
Следующий уровень — «стойка» — программно-аппаратный комплекс, преобразующий строки кода в сигналы для драйверов. Тут уже интересней, по крайней мере на этапе выбора станка (или выбора компонентов для самостроя) мы можем остановиться как на промышленных стойках начального уровня (GSK, Washing, бэушные старые сименсы и фануки), так и на сочетании интерфейсных плат (от банального LPT и опторазвязанной китайской красной платы до MESA) с ПО — LinuxCNC, Mach3, NCStudio и прочих. Лично у меня большой положительный опыт с LinuxCNC и NCStudio; несмотря на простоту и того и другого, с обработкой по готовому простому G-коду нотации ISO-7bit они справляются на ура. У промышленных стоек есть преимущество в гибкости настройки приводов и возможности подключения большого количества периферии, а так же возможность работать по расширенным G-кодам (циклам) и макропрограммам, но при нынешней доступности КАМ-систем и штучном производстве это не нужно.
Уровнем выше идут CAM (computer aided manufacture) программы — ПО для создания траекторий, описывающих прохождение инструмента в заготовке. И вот тут у нас начинается полный разброд и шатание. С одной стороны, бесплатного или условно-бесплатного CAMа мало. Чтобы не сказать вообще нет пристойного. Да, есть плагин для Inkscape, есть какие-то нестабильные чудеса пятилетней давности, есть триальный фьюжн, есть плагины для CADов… Кстати, по поводу совсем простых, на раскроечный роутер мы долго прикручивали G-CodeTools для Inkscape, но так и не смогли достичь приемлимых скоростей связки оператор-плагин. В результате купили CamBam+ за смешные по меркам рынка 150 долларов и наслаждаемся. А так — все из дешевого или бесплатного либо под совсем простые обработки, либо глюк на глюке и глюком погоняет. Мы перепробовали кучу всего в демках и ломаных версиях, в результате провели переговоры с жабой и финдиректором, и купили PowerMill — по отзывам и пережитым в процессе перебора эмоциям, пожалуй, оптимальным для небольшого производства инструменте. Уже позже на нас вышли замечательные товарищи из SprutCAM, дали демку, и мы с ужасом обнаружили, что переплатили примерно в 20 раз — почти все наши потребности закрываются вполне демократичным SprutCAM Mach3. Купили, конечно (типа про запас по подарочной цене), но потом нашли пару недостатков, так что используем исключительно ПМ.
Чуть не забыл: промежуточным этапом между g-code и CAM выступает постпроцессор — когда-то отдельная программа, а ныне встроенный модуль всякого пристойного CAMа. Это та самая штука, которая преобразует траекторию CAM в код конкретного станка. О постпроцессоре стоит знать только что он есть, и что у него есть описание, привязанное к конкретной нотации кода, воспринимаемой станком. Условно, некоторые станки просят нумерацию строк, некоторые — «;» в конце каждой строки, некоторые вообще русскими буквами команды принимают, ну и так далее. Для рассматриваемых станков (домашние фрезеры) вне зависимости от того, MACH3, LinuxCNC или NCStudio пойдет стандартный постпроцессор fanuc0i 3axis.
Ну и самый высокий уровень — CAD, он уже совсем далек от станка. Тут выбор почти бесконечен, и даже посвободней, чем в 3D-принтерах, благо фрезеровка идет до поверхности, и на входе CAM может быть не твердотельная модель, а граничная поверхность. Нормальные CAMы почти всеядны и с одинаковым удовольствием втягивают модели из чего попало — от 3DMAX до SolidWorks.
Несколько раз начинал я писать про g-code, но каждый раз забрасывал. С одной стороны, полный g-code неоднозначен, по крайней мере в части циклов: даже разные серии станков одного производителя могут трактовать g-коды разным образом, а в основных кодах все и так понятно. С другой — современная CAM-система позволяет оператору вообще не знать g-кода как класса, обходясь дерганьем мышкой по окошечкам компа. Но когда один из наших операторов (хороший кстати, ВО, опыт и все такое) не справился с задачей «сделать тестовую прогу, которая 1000 раз прогонит шпиндель вверх-вниз на 30 мм», я понял, что хотя бы общее понимание быть должно. Даже если не писать простые программки, то хотя бы чтобы разобрать и отдебажить что там нам постпроцессор написал.
Во-первых, стоит знать, что g-code идет кадрами, каждая строка — кадр. Код
даст переход по линии, соединяющей текущее местоположение и точку x10y20, а код
даст переход по ломаной — сначала в точку (текущее положение, x10), а потом уже в точку x10y20.
Кстати, на втором примере мы можем увидеть свойство модальности: мы можем не писать G1 в начале второй строки, ибо G1 — модален и стойка поймет кадр без кода как дублирующий код предыдущего. Если бы мы пытались пройти по дуге (G2/G3) и так же вторую часть перенесли бы на следующую строку — стойка бы интерпретировала эту строчку как новый кадр G1.
Итак, первая группа кодов, которые стоит знать — установочные. Сюда входят коды установки системы координат, системы единиц, установка коррекции длины и радиуса инструмента. Для хобббийного ЧПУшника достаточно из всего этого знать строку безопасности, которая ставится в начале каждой программы:
И расшифровка: G17 (работаем в плоскости XY) G21 (единицы — миллиметры) G40 (отмена компенсации длины инструмента) G49 (отмена компенсации радиуса инструмента) G54 (работа в первой системе координат) G80 (отмена ранее запущенных постоянных циклов) G90 (работа в абсолютной системе координат). После такой лошадиной дозы команд любой станок очищается от всех возможных грехов, оставшихся с предыдущих обработок, и готов к работе над вашим проектом. Даже если ваш станок не знает ничего про коррекции, не стесняйтесь — на фоне тела программы эти несколько байт сильно размера программе не добавят, станок чужеродные коды просто проигнорирует, зато точно все будет хорошо.
В общем, пожалуй, тут больше и знать-то нечего для работы на обсуждаемых станках.
Разве что G54 — обозначение работы в первой системе координат. Дело в том, что почти любая стойка по умолчанию поддерживает машинную систему координат (с нулем на концевых датчиках, обычно в углу рабочего стола), и до 6 дополнительных систем координат, задаваемых пользователем. Зачем? Когда Вы работаете в CAM, Вы задаете произвольную нулевую точку — в верхнем левом ближнем углу (так правильней) или в центре заготовки, и вся траектория описывается от этой точки. Если бы станок умел работать только в машинной СК, приходилось бы либо ставить заготовку углом в машинный ноль, либо в CAM задавать ноль в неясной точке, вымерянной относительно реального расположения детали. Зачем целых 6 систем координат? Ну тоже все просто, хотя и реже используется: если стол позволяет установить несколько заготовок, имеет смысл объединить обработки: сначала пройти все заготовки одной фрезой, потом поменять фрезу и снова пройти по всем, ну т.д. Тут и приходит на помощь разные СК: вместо того, чтобы сращивать модели в CAM, можно обозначить разные СК для заготовок и в начале каждой обработки прописать, в какой СК работаем.
Теоретически при ручном написании программы еще может помочь команда G90/G91: выбор абсолютной или относительной системы координат. Тут все тоже боль-мень просто: в G90 станок переходит по заданным в строке координатам, а в G91 — по добавленным к текущим координатам. Так что станок, стоящий в точке X10Y10 на строку G90 G1 x20 перейдет в точку X20, а на строку G91 G1 X20 — в точку X30.
Следующая группа — коды перемещений. Тут все просто, по крайней мере на обсуждаемых станках:
G0 — холостые перемещения, выполняются на максимальной установленной в стойке скорости. Стоит учитывать, что G0 не всегда дает линейное движение, в некоторых стойках при команде G0 X200 Y300 при нахождении в точке X0Y0 рабочий инструмент сначала уходит под 45 градусов в точку X200Y200, и потом по прямой — в Y300. Имеет смысл проверить, как это происходит на Вашем станке, не зная этой тонкости можно случайно врезаться в крепеж или заготовку.
G1 — линейная интерполяция. Тут еще проще, станок движется всегда по прямой между текущей точкой и точкой, обозначенной в коде. Команда предполагает синтаксис G1 X20Y30Z10 F1000, где F — скорость движения в единицах станка (чаще — миллиметры в минуту, но иногда и мм/сек или еще что-нибудь экзотическое). Скорость — модальна, т.е. если Вы указали скорость один раз, она будет действительна для всех последующих строк G1/G2/G3, даже если они разделены, например, G0 или другими кодами.
G2/G3 — круговая интерполяция по часовой или против часовой стрелке. Допустимы два варианта определения: при нахождении станка в точке X0Y0 формат G2 X10Y10R20 построит дугу между текущей точкой и точкой X10Y10 с радиусом 20, формат G2 X35Y25 I20J-5 построит дугу между текущей точкой и X35 Y25 с центром в точке X(текущая точка)+20 Y(текущая точка)-5.
Теоретически, в продвинутых стойках встречается масса других интерполяций — от синуса до гиперболы, но в наших станках и при наличии CAMа это неактуально.
Ну и еще несколько кодов, которые входят в систему ISO 7bit, но не являются g-кодами. Это M03 (включение шпинделя) с аргументом S (скорость вращения), M05 — остановка шпинделя, M07/09 — подача и отключение СОЖ, и M30 — окончание программы.
Фух. Как-то сумбурно и затянуто получилось, но это действительно может оказаться полезным. На этом прощаюсь, в следующей серии я напишу немножко по материалам для домашнего ЧПУ-фрезера и опишу процесс построения обработки в PowerMill.
Модальные и немодальные коды
Все станочные коды можно условно разделить на два класса в зависимости от их способности сохраняться в памяти СЧПУ. Немодальные коды действуют только в том кадре, в котором они находятся. Модальные коды, напротив, могут действовать бесконечно долго, пока их не отменят другим кодом.
Выделяют несколько групп кодов в зависимости от функции, которую они выполняют (табл. 5.2). Два модальных кода из одной группы не могут быть активными в одно и то же время. Например, G02 и G03 находятся в группе кодов осевых перемещений, и вы не можете применять оба этих кода сразу. Один из этих кодов обязательно отменит действие другого. Это как попытаться ехать на автомобиле одновременно и вправо, и влево. Однако вы можете одновременно использовать коды из разных функциональных групп. Например, в одном кадре можно написать G02 и G90.
Таблица 5.2. Коды по группам
Функциональная группа | Коды |
---|---|
Перемещения | G00, G01, G02, G03 |
Тип координатной системы | G90, G91 |
Единицы ввода данных G20, G21 | |
Постоянные циклы | G80, G81, G82, G83, G84, G85… |
Рабочая система координат | G54, G55, G56, G57, G58… |
Компенсация длины инструмента | G43, G44, G49 |
Коррекция на радиус инструмента | G40, G41, G42 |
Возврат в постоянных циклах | G98, G99 |
Активная плоскость обработки | G17, G18, G19 |
Особенностью модальных кодов является то, что не нужно вводить активный код в последующие кадры. Например, код G01 используется для перемещения инструмента по прямой линии. Если нам необходимо совершить множество прямых перемещений, то не обязательно в каждом последующем кадре писать G01. Для отмены кода G01 следует применить один из кодов той же самой функциональной группы (G00, G02 или G03). Большинство из G-кодов являются модальными. Программист должен знать, к какой группе и к какому классу принадлежит тот или иной код.
Хотя М-коды обычно не делят на модальные и немодальные, однако этот термин все же можно применить и к ним. Например, можно выделить группу М-кодов, отвечающих за подачу охлаждающей жидкости (М07, М08, М09) или за вращение шпинделя (М03, М04, М05). Тем не менее большинство М-кодов нужно рассматривать как немодальные. Некоторые стойки ЧПУ допускают программирование только одного М-кода в кадре.
§ 11. Модальность. Группы кодов
На фрагменте ниже программируется ускоренное перемещение (G0) в точку на безопасной плоскости, после чего происходит переключение на режим рабочего движения фрезы (кадр N30).
.
N10 G0 X0 Y0
N20 Z10
N30 G1 Z5 F100
N40 X10 Y5.5
.
В кадрах N20 и N40 движение происходит на режимах заданных кадром выше. Соответственно по принципу модальности вывод G0 и G1 в этих кадрах не нужен. В кадре N30 также задается скорость перемещения фрезы 100 мм/мин. Она будет действовать пока не встрится новое значение с адресом F или изменен режим движения.
Код, действующий в пределах одного кадра программы называется немодальным. Его действие прекращается уже в следующем кадре.
Группы кодов вспомогательных функций:
Группы кодов подготовительных функций:
G90 и G91 G-Code: абсолютные и относительные системы координат
В чем разница между G90 и G91, абсолютной и относительной системой координат?
Начнем с определения G90 и G91. Абсолютные координаты отсчитываются от нуля программы, от начала. Относительные ходы отсчитываются от текущей позиции. Мы только что рассмотрели движения по круговой дуге с использованием G02 и G03. Координаты центра дуги, выраженные I и J, являются относительными координатами.
А теперь более практический пример. Предположим, вы находитесь в продуктовом магазине и спрашиваете продавца, в каком проходе находится печенье. Если он отвечает: «Иди в ряд 14 за печеньем», это абсолютная координата относительно первого прохода — «нулевой части» продуктового магазина.
Если вместо этого он ответит: «Это три прохода в ту сторону», это будет инкрементная координата. Мы привыкли к обоим видам в повседневной жизни, и оба могут быть полезны в зависимости от ситуации.
Обратите внимание, что то, что мы могли бы назвать «относительными координатами», часто называют «локальной системой координат» в руководствах по программированию контроллера ЧПУ. Это просто еще один способ сказать то же самое.
Переключение между относительными и абсолютными координатами
Как мы можем переключаться между относительными и абсолютными координатами? Обычный способ — использовать G90 для использования абсолютных координат и G91 для использования относительных координат. Например:
G90 (переход к абсолютным координатам)
G0 X0Y0Z0 (перейти к исходной точке программы в 0, 0, 0)
G91 (переход в относительные координаты)
G0 X1Y1 (Переместите одну единицу вправо по X и одну единицу вправо по Y)
G90 (вернуться к абсолютным координатам)
Предыдущая программа включает в себя как абсолютное перемещение к X0Y0Z0, так и относительное перемещение. Как видите, G90 и G91 являются модальными.
Какой режим мой контроллер использует по умолчанию?
Интересно, что большинство элементов управления запускаются в относительном / локальном режиме (G91). Это сделано потому, что считается более безопасным, если режим не соответствует вашим ожиданиям. Обязательно убедитесь, что первое, что вы сделаете в своей программе, — это установите для нее значение G90 или G91, чтобы она работала так, как вы ожидаете!
Использование кодов UVW для относительных координат
Некоторые контроллеры позволяют активировать оба стиля одновременно с помощью UVW. Мы могли бы написать предыдущую программу так:
G90 (переход к абсолютным координатам)
G0 X0Y0Z0 (перейти к исходной точке программы в 0, 0, 0)
G0 U1V1 (Переместите одну единицу вправо по X и одну единицу вправо по Y)
Этот формат UVW удобен и немного короче. Мы уже упоминали контроллеры, в которых I и J являются относительными, что аналогично UVW, хотя и предназначено для определения центра дуги.
G91 G90 Почему я должен использовать локальные и абсолютные ходы?
Рассмотрим пару случаев.
Во-первых, все дело в том, как вы хотите решить свою задачу. Как удобнее вам в данный момент — думать о том, что происходит относительно некоторой абсолютной центральной точки или относительно вашего текущего местоположения? Контроллеру ЧПУ все равно, так что делайте то, что вам легко.
Во-вторых, предположим, что вы просто читаете распечатку и вводите G-code. Может быть проще использовать относительные координаты для некоторых точек, так как у вас может не быть абсолютных координат. На чертежах обычно предоставлены размеры относительно соседних элементов, а не относительно некоторого абсолютного нуля детали.
Последний пример — написание подпрограмм. Предположим, у вас есть функция, которая повторяется более одного раза в вашей программе g-кода. Возможно, вы просверлите отверстие, снимете фаску, а затем, например, нарезать резьбу метчиком. Эти отверстия расположены по всей пластине, которую вы обрабатываете. Самый простой способ запрограммировать такую вещь — создать подпрограмму (о подпрограммах мы поговорим подробно чуть позже, а пока используйте свое воображение), которая предполагает, что она расположена над центром отверстия и может просто продолжить. выполнять всю работу с использованием относительных координат. Теперь вы можете просто сделать абсолютный ход, а затем вызвать подпрограмму для каждого отверстия, и вам нужно будет написать код только один раз. Какая экономия времени.
Упражнения
1. Напишите программу G-кода, которая подает фрезу вокруг прямоугольника размером 10 на 10 мм с центром в 10, 10. Используйте абсолютные координаты.
2. Преобразуйте программу, которую вы написали в №1, чтобы использовать относительные координаты. Вы можете использовать абсолютные координаты, чтобы добраться до центра прямоугольника при начальном перемещении G00.
3. Определите, позволяет ли ваш элемент управления перемещаться UVW, и если да, перепишите # 2, чтобы использовать их, не вызывая G91 для переключения на относительные координаты.
G- и M-коды для станков с ЧПУ – просто о сложном
Станочные комплексы с CNC используют для работы множество ПО. Однако руководить оборудованием можно с помощью одного и того же управляющего кода. Это буквенно-цифровой язык ISO 7-bit. Основывается на международных стандартах ISO и EIA.
Что такое G- и M-функции для CNC?
Большинство изготовителей систем ЧПУ описывают основные параметры с помощью стандартов ISO, но часто в своем оборудовании отступают от правил, чтобы расширить возможности систем.
Японские компании в своих системах ЧПУ FANUC широко раскрывают потенциал использования G- и М-кодов. Их оборудование одним из первых заработало на языке ISO 7-bit. Сейчас это самые распространенные пульты в мире.
G-коды настраивают СЧПУ на определенное действие. М-коды – вспомогательные, управляют режимами работы оборудования. Чтобы инструмент двигался по прямой траектории, вносится команда G01. А если необходимо заменить рабочий орган, используется код М06.
G- и M-коды для программирования станков с ЧПУ – что это?
Настройки оборудования с CNC пишутся на различных языках, но набора основных G- и М-команд достаточно, чтобы создать УП.
G-code (NC-код)
G-функция – язык программирования, осуществляет подготовительные функции для работы станка по управлению осевым перемещением инструмента.
«ИСО 7-бит» создан компанией EIA в 60-х гг. прошлого столетия, а доработан спустя 20 лет. G-код утвержден как стандарт ISO 6983-1:2009, в СССР – как ГОСТ 20999-83. Код записывает информацию на восьмидорожечной перфоленте и кодирует 128 символов.
Справка: многие производители дорабатывают код по-своему, и отличия от базового можно посмотреть в инструкции к конкретной системе управления.
В программе, написанной на языке ISO 7-bit, все команды формируют кадры – совокупности из одной или нескольких команд. Первый кадр состоит из единственного знака – «%». Иногда такой символ стоит и в последнем кадре. Так программа отделяет кадры друг от друга. Остальным присваиваются номера, а оканчиваются они знаком CR/LF – перевод строки. Чтобы завершить программу, вводится команда M02 или M30.
Комментарии пишутся в круглых скобках и несут конкретную информацию:
Примечание: СЧПУ не считывает текст в круглых скобках.
Чаще всего список кодов в кадре начинается с подготовительных. Затем вписываются команды перемещения, выбирается режим работы и технологические коды.
Модальные и немодальные G-коды.
Независимые части основного ПО описываются в промежутке обозначений M02–M30. Сначала идет номер, в конце прописывается M17.
М-code
М-функции — дополнительные коды, на разных станках CNC могут немного отличаться. Эти команды управляют рабочими органами и режимами оборудования с ЧПУ.
Вспомогательные команды используются одиночно или вместе с другими кодами. Когда кадр устанавливает рабочий орган в шпиндель, это выглядит так:
Здесь команда M6 на пульте подразумевает некоторый набор действий, чтобы заменить рабочий орган:
Если М- код включает какое-либо устройство, то обязательно существует его пара, которая выключает:
M8 – M9 – включить/выключить систему охлаждения;
M3 – M5 – включить/выключить обороты шпинделя.
В кадре разрешается использовать несколько М-функций. Для станков с внушительным набором сменных устройств задействуется больше М-кодов в управлении.
Примечание: М-код может вписываться самостоятельно или в кадре с G-кодами.
Вспомогательные команды делятся:
Важно: на разных станках одни и те же команды могут настраиваться на управление другими устройствами.
Таблица G-кодов ЧПУ с расшифровкой
Таблица представляет неполный перечень команд для управления станком, только важные:
Таблица M-кодов ЧПУ с расшифровкой
Вспомогательные команды программного кода маркируются буквой М и выполняют такие действия:
G-функции для станков ЧПУ
Код | Описание кода |
---|---|
Осевое движение | |
G00 | Ускоренный или холостой ход – перемещение на очень высокой скорости в указанную точку. Не используется для выполнения обработки. |
G01 | Линейная интерполяция – смещение по прямой траектории с заданной скоростью подачи. Рабочий ход |
G02 | Круговая интерполяция – перемещение по дуге вправо с запрограммированной скоростью подачи |
G03 | Круговая интерполяция – смещение по кривой влево с заданной скоростью подачи |
Наладка | |
G20 | Ввод дюймовых показателей |
G21 | Ввод метрической информации |
G90 | Абсолютное позиционирование – отсчет всех координат от постоянной нулевой точки |
G91 | Относительное позиционирование – все координаты рассчитываются от предыдущей позиции |
Работа с отверстиями | |
G81 | Фаза сверления |
G82 | Цикл сверления с задержкой на дне отверстия |
G83 | Прерывистый период сверления |
G85 | Режим растачивания отверстия |
До 4 кодов в кадре.
G-code окружности с координатами центра.
G-code для сверления отверстий.
Дополнительные обозначения при программировании станков CNC
Координаты точек движения инструмента в декартовых плоскостях– X, Y, Z.
Смещение вокруг осей X, Y, Z – А, В, С.
Круговая интерполяция параллельно осям координат X, Y, Z – I, J, К.
R – радиус, в повторяющихся периодах – положение плоскости отвода, в команде вращения – угол поворота системы координат.
D – параметр коррекции на радиус рабочего органа.
Н – показатель компенсации длины инструмента.
F – настройка подачи.
S – параметр основного перемещения.
Т – показатель номера инструмента, который требуется поставить на замену поворотом патрона.
N – номерное значение кадров управляющей программы.
/ – пропуск кадра, который не нужно выполнять, ставиться перед кадром.
Семиразрядный код ISO 7-bit – основной для современных отечественных станков CNC. Правила кодирования для станка с конкретным устройством ЧПУ определяются используемым общим кодом, инструкцией по эксплуатации оборудования и руководством по программированию систем ЧПУ.
- как узнать сколько памяти на видеокарте windows 10
- неправильная секция установки службы в этом inf файле windows server 2019 wifi