В этой статье хотелось бы рассказать о необходимом в работе ПО, а заодно дать маленькую вводную по 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-код


Несколько раз начинал я писать про g-code, но каждый раз забрасывал. С одной стороны, полный g-code неоднозначен, по крайней мере в части циклов: даже разные серии станков одного производителя могут трактовать g-коды разным образом, а в основных кодах все и так понятно. С другой — современная CAM-система позволяет оператору вообще не знать g-кода как класса, обходясь дерганьем мышкой по окошечкам компа. Но когда один из наших операторов (хороший кстати, ВО, опыт и все такое) не справился с задачей «сделать тестовую прогу, которая 1000 раз прогонит шпиндель вверх-вниз на 30 мм», я понял, что хотя бы общее понимание быть должно. Даже если не писать простые программки, то хотя бы чтобы разобрать и отдебажить что там нам постпроцессор написал.

Во-первых, стоит знать, что g-code идет кадрами, каждая строка — кадр. Код

G1 x10 y20

даст переход по линии, соединяющей текущее местоположение и точку x10y20, а код

G1 x10
y20

даст переход по ломаной — сначала в точку (текущее положение, x10), а потом уже в точку x10y20.

Кстати, на втором примере мы можем увидеть свойство модальности: мы можем не писать G1 в начале второй строки, ибо G1 — модален и стойка поймет кадр без кода как дублирующий код предыдущего. Если бы мы пытались пройти по дуге (G2/G3) и так же вторую часть перенесли бы на следующую строку — стойка бы интерпретировала эту строчку как новый кадр G1.

Итак, первая группа кодов, которые стоит знать — установочные. Сюда входят коды установки системы координат, системы единиц, установка коррекции длины и радиуса инструмента. Для хобббийного ЧПУшника достаточно из всего этого знать строку безопасности, которая ставится в начале каждой программы:

G17 G21 G40 G54 G80 G90

И расшифровка: 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.
Поделиться с друзьями
-->

Комментарии (15)


  1. sav13
    25.12.2016 11:48

    Подскажите, если ли простенькие программки, которые могут из DXF, PLT, создаваемых CorelDraw, DipTrace и пр. генерить G-Cod?

    Пока работаю с StepCAM, но результат получается только из формата PLT от SprintPayrs и CorelDraw. Во втором проблема с установкой начала координат.



    1. donvictorio
      25.12.2016 20:54

      SheetCam. прост до безобразия и тем не менее вполне себе проф инструмент.


  1. melchermax
    25.12.2016 16:26

    Вроде, Slic3r имеет опцию создания gcode для фрезера


    1. vbifkol
      25.12.2016 16:48

      Да, имеет. Но функционал очень беден, до того же CamBam+ не дотягивает.


  1. Andy_Big
    25.12.2016 18:41

    Скорость — модальна, т.е. если Вы указали скорость один раз, она будет действительна для всех последующих строк G1/G2/G3, даже если они разделены, например, G0 или другими кодами.

    Следует добавить, что и коды G00/G01/G02/G03 тоже модальные. То есть программы:
    G01 X20.54 Y16.48 F1200
    X22.70 Y17.18
    X21.12 Y16.79

    и
    G01 X20.54 Y16.48 F1200
    G01 X22.70 Y17.18 F1200
    G01 X21.12 Y16.79 F1200

    равнозначны.


    1. Andy_Big
      25.12.2016 18:50

      Упс, прошу прощения за невнимательность, об этом, оказывается, в статье упомянуто :) По крайней мере про G01. И как-то непонятно про G02/G03 :)


      1. vbifkol
        25.12.2016 20:24

        Ага, это почти сознательно. В MDI или при написании простой программы G2/G3 довольно редко используется последовательно, стыкуя линию для получения сплайна — чаще это скругление углов или редуцированная окружность. Лично я лучше лишний раз напишу G2/G3, в таком виде программа более читаемая.


        1. danyaShep
          26.12.2016 00:26

          что значит «напишу»? Есть случаи, когда весь G-код пишется руками?


          1. vbifkol
            26.12.2016 03:57

            Да, конечно. На токарных в основном все руками и пишется, на фрезерах — иногда надо сделать какие-то простые операции (типа вырезать прямоугольник с скругленными углами), тоже быстрей руками написать, чем модель рисовать, КАМ запускать и т.д.


          1. Andy_Big
            26.12.2016 16:52

            Конечно есть :) Часто бывают случаи, когда руками написать код гораздо быстрее, чем создавать в CAD модель, потом в CAM задавать все параметры и режимы.
            Например, с помощью 4-й оси сделать диагональные торцевые пропилы по окружности диска. Руками с помощью циклов это можно сделать в несколько раз быстрее, чем с помощью программ. Программа получится буквально в несколько десятков строк.


  1. tzlom
    26.12.2016 01:15

    Поправки по существу:
    LinuxCNC умеет циклы, функции и все остальное что для счастья надо.
    Попробуйте Fusion360 — CAD+CAM решение халявное для хоббийщиков и мелкого производства.
    Ставить G54 по «правильному» — неправильно, начало логично ставить туда, откуда вы входите в координаты


    1. vbifkol
      26.12.2016 04:09

      Я циклы использую только на токарном, токарные циклы LinuxCNC не дотягивают до стандартных фануковских. Для фрезера все идет через КАМ, так что циклы не нужны.

      Фьюжн попробую, спасибо.

      Не очень понял что значит «откуда вы входите в координаты». Я ставлю на раскрое нижний левый ближний угол заготовки, при 3Д — верхний ближний левый, при 3Д в круглой заготовке — по центру.


      1. tzlom
        26.12.2016 12:27

        За токарные циклы ничего не скажу, но статья была о фрезере :)
        Про вход в координаты, например — работаем в тисках с переворотом — входим в ближний левый угол, но после переворота этот угол перейдёт в другую точку, вместо того, чтобы обеспечивать базирующие поверхности и целиться снова в ближний левый рациональнее входить в тот же угол, хоть это и менее удобно.
        При работе в soft jaws рациональнее входить в угол неподвижной губки.
        Если в заготовке уже есть проточки, сверловки или другая подготовка, то стоит входить именно в них чтобы выдержать соосность.
        Понятное дело всегда можно посидеть с калькулятором и штангелем пересчитать координаты, но лучше этого не делать.


        1. vbifkol
          26.12.2016 15:18

          Про циклы — посмотрел, оценил. Действительно почти полный набор, был неправ. Одно извинение мне — что действительно этим не пользуемся.

          Про работу с переворотом, думаю, вкусовщина. Мне проще в КАДе перевернуть деталь и сместить СК, а потом забазироваться от уголка вырезанного суппорта. Хотя я, как уже говорил, не настоящий сварщик — просто каску нашел, возможно, Ваш способ правильней.