Как стать автором
Обновить

Комментарии 68

Интересная тематика, совершенно не освещенная на Хабре. Давайте еще!
А я вижу аналогии между ассемблером и С++. Что делать?
Видеть аналогию с BASIC? ;-)
Скорее аналогия с макро-ассемблером.
НЛО прилетело и опубликовало эту надпись здесь

Ну G-code круто, но под данный заголовок лучше бы подошёл APT language. Из которого до сих пор постпроцессорами получается G-code.

Всю статью ждал примеры кода, особенно сложные ветвления или приведение типов :)
Так сказать, реальный код, а не из учебников

«Приведение типов» (кроме как через округление и обрезание дробной части) делается, как я уже сказал, самим контроллером, весьма странным образом.
Сложные ветвления, на самом деле, не особенно и практикуются — с точки зрения производственного процесса, многое удобнее делать линейно. Максимум — с подпрограммами. А код, написанный вручную — чаще всего, небольшие, но важные вкрапления. Единственное, где мне реально встречалось «настоящее» программирование — это подпрограммы управления щупами, измеряющими детали. Но это проприетарщина, которую я показывать не могу, к большому сожалению.

Конечно жаль, что нельзя посмотреть исходники, но зато можно задать вопросы напрямую)
Случалось ли такое, что вам не хватало языковых возможностей? И как вы обходили это?

Обычно, недостаточно не возможностей языка, а документации, потому что производители не очень торопятся делиться всеми деталями или боятся, что производственники что-то испортят. Например, пришлось заниматься легким «хакерством» и искать численные адреса некоторых переменных, чтобы читать оттуда, потому что производитель решил, что туда можно только писать (по буквенному адресу). Итог — удалось дописать в программу проверку состояния станка, которую производитель не предусмотрел и из-за отсутствия которой автоматическое сопло для охлаждения инструмента сжатым воздухом оказывалось выдвинуто во время рестарта программы с произвольного места, что вело к поломке сопла устройством смены инструмента. До этого, сопло ломалось где-то три раза в год, что приносило убыток в $450 каждый раз. Станок — старый, производитель на запросы инженеров отвечал «will not fix», «покупайте новый контроллер» ($15k).
В принципе, ровно как и любой низкоуровневый язык, G-code позволяет делать «всё», что может железо, на котором он исполняется. Но с растущей сложностью кода, растет сложность его поддержки — подавляющее большинство программистов на предприятиях — это операторы CAD/CAM, за автоматизацию вообще часто отвечает аутсорс — application engineer-ы дилера, интегратора или производителя машины. И действительно, если я напишу что-нибудь вроде «взять из таблицы расширенного менеджера инструментов диаметр текущего инструмента, округлить до целых, умножить на десять, положить в переменную, вызвать подпрограмму по численному идентификатору, равному значению этой переменной» — ни оператор станка, ни оператор CAM (который тоже называется «программист») не поймут, что вообще происходит с программой и почему. Хотя вот когда я, наконец, соберу собственный станок дома и начну на нем что-то делать, там уж развернусь по полной.
НЛО прилетело и опубликовало эту надпись здесь
Ох уж этот Siemens, все не как у людей. Напомните, что делают конструкции @....
НЛО прилетело и опубликовало эту надпись здесь
Не только с Fanuc, но и вообще с ISO, похоже.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Требования эффективности обработки даже очень простых деталей исключают ручное программирование, потому что, например «классическое» фрезерование убивает инструмент в каждом внутреннем радиусе, а чтобы этого избежать «динамическим» фрезерованием, уже нужна система CAM. Геометрию вручную программируют либо динозавры, либо когда речь о сравнительно простых токарных деталях (потому что там многопроходность всякая может быть зашита в контроллер). Вручную — либо логика автоматизации, либо параметрически заданные программы.
НЛО прилетело и опубликовало эту надпись здесь
Самое приятное, на опыте узнать, что станок не все команды воспринимает как следует.
Есть старый немец, тот по желанию левой пятки делал фрезеровку по дуге с «запасом», если координата была не целым числом (лишний виток большим радиусом).
Мог не поднять шпиндель, если в строке есть две команды, одна из которых М. Как оказалось сам САПР генерировал ошибочный код. Для нового ПК софта и современных ЧПУ не ошибка, автоматически корректировали, а вот старички на чистой логике не обрабатывали такое.
Пришлось завести для операторов табличку корректировок, что нужно менять в программах перед отправкой на станок.
НЛО прилетело и опубликовало эту надпись здесь

Как связаны G-code и Gerber файлы?

Речь об этом Gerber? Если да, то никак не связаны.
Очень даже связаны и имеют одну историю происхождения. По сути, Gerber файл это программа в G-кодах для управления фото-плоттером, который представляет собой ЧПУ машину со сменными инструментами — фотошаблонами разного калибра и формы. Фото-плоттер исполняя программу, последовательно перемещает инструмент и засвечивает определенные программой участки фотопленки или фоточувствительного материала на заготовке печатной платы. Далее, заготовка отправляется в проявку и травление. В общем, все тоже самое как у обрабатывающих ЧПУ, различия в диалекте.

Современное оборудование для серийного производства печатных плат выглядитнесколько несколько иначе — функцию фото-плоттера выполняет компьютер, который в памяти симулирует все перемещения инструментов и выдает на выходе готовый битмап высокого разрешения, который печатается на специальном принтере (пленке) и далее используется как фото-шаблон для экспозиции всей заготовки разом по аналогии с классической фотографией.
НЛО прилетело и опубликовало эту надпись здесь
Только не «преобразовать», а на основе геометрии, которая в нем описана, создать программу для обработки платы. Потому что из слова «преобразовать» автор вопроса, скорее всего, вообразит себе некий «конвертер», как для преобразования GIF в PNG.
НЛО прилетело и опубликовало эту надпись здесь

Спасибо.

Эх, жаль этой статьи не было, когда я еще в универе учился. Очень бы пригодилась на парочке лаб!
Потому, для полной переносимости и независимости от настроек, десятичная точка должна быть в цифровых значениях координат абсолютно всегда.

Я может не в том мире живу, но в моём мире давно бы уже была сделана прослойка постпроцессора, которая бы такие вещи учитывала.
Банально просто брала GCode и заменяла все координаты на числа с точкой.
Понятно почему нет универсального языка чуть более высокого уровня — он глобально не нужен.
Но у вас то на производстве нужда в таком языке очевидна.
Реализовать набор практик и просто проводить пост процесс G-кода исправляя известные проблемы(типа флоатов в координатах, с показом ворнинга или сброса всех регистров первой строчкой)
Не нужен никакой постпроцессор, потому что такая проблема не стоит. Потому что никто вручную код для геометрии не пишет.
НЛО прилетело и опубликовало эту надпись здесь
Об обучении


Уже во времена станков с ЧПУ использовалась и совершенно другая технология программирования.
Я не занимался ей, но видел ее работу «в натуре».
Станок снабжался приводами, управляемыми программно и особым блоком управления (к сожалению, точных обозначений я уже не помню)

Весь процесс программирования сводился к следующему:
Опытный рабочий включал запись действий и обрабатывал деталь на станке управляя им вручную.
Блок управления запоминал всю его последовательность действий и был способен, управляя приводами станка — полностью повторить их.
На этом процесс программирования завершался.

(да, макросы не были придуманы с нуля, это гораздо более старый метод, чем кажется :)

Преимуществом метода обучения была очень высокая скорость перенастройки оборудования, недостатком — требовался квалифицированный рабочий (с твердыми, уверенными руками :) — хотя бы один на весь участок.

Начальство, оценив работу первой пары дооборудованных станков, дало указание оборудовать подобными системами все токарные станки в цеху (станки и приводы были наши, блоки управления — импортные и стоило доп оборудование почти смешные деньги, в сравнении со стоимостью нового станка с ЧПУ).

Но на том момент политика партии была совсем другая — предприятия должны были внедрять станки с ЧПУ, не взирая на их стоимость, глючность и сложность внедрения (например, для того, чтобы получить новый токарный станок производства завода «Красный пролетарий» — вынужденно покупался станок с ЧПУ того же производителя. После установке такого станка в цеху — на нем работали как на обычном токарном, а все доп оборудование стояло рядом для отчетности).

Поэтому «метод обучения» не взлетел.

Такой максрос-станок должен стоить дороже ЧПУ. Потому что он умеет всё что умеет ЧПУ + имеет датчики для считываний действий мастера.
Ценность не ясна.
Любой станок с ЧПУ (или конвертированный в ЧПУ) «имеет датчики» — без этого он не может работать самостоятельно. Проблема в том, что никакой мастер не может обработать деталь сложной формы с той же точностью и эффективностью, с какой это сделает программа, разработанная в CAM. Потому, такой подход — тупик и, в каком-то смысле, бред.
Что за датчики? Куча станков не имеет ничего кроме концевиков и умеют только положение контролировать только относительно старта.
Вы кавычки заметили? Речь идет, естественно, не о том, что любой станок имеет абсолютные энкодеры на всех осях, а о том, что для автоматической работы ему, как минимум, нужно всегда иметь возможность вычислить относительное положение инструмента и стола. Если это, конечно, не какой-нибудь плоскошлифовальный с механически перемещаемыми упорами для концевика, отвечающего за реверс продольной подачи. Соответственно, на нем есть или относительные энкодеры, или управление осями уже происходит не механическими ручками, а кнопками, управляющими приводами осей.
никакой мастер не может обработать деталь сложной формы с той же точностью и эффективностью, с какой это сделает программа, разработанная в CAM


Описанная система позволяла изготавливать детали с требуемой точностью.
Кстати, до нее все детали вытачивались вручную и брака было намного больше.

Ключевое слово — "сложной формы". Попробуйте вручную отфрезеровать по контуру, например, овал.

Ключевое слово — «сложной формы». Попробуйте вручную отфрезеровать по контуру, например, овал


А на этот случай были инженеры-конструкторы и технологи (т.е. мы :)
Нетехнологичную в производстве деталь нужно было еще хорошо обосновать.
Но гораздо чаще находили просто более технологичный вариант.

В случаях же, когда надо было реально сделать что-то сложное, например — сквозное отверстие в фильере толщиной сантиметров в 15, в виде снежинки с шириной канала в 3 мм — использовали более продвинутые (чем мехобработка) технологии — например, электрохимическое фрезерование.
Такой максрос-станок должен стоить дороже ЧПУ.


Нет, система была дешевле любого ЧПУ, так как устанавливалась на уже имеющиеся на предприятии станки.
И превращалась в ЧПУ станок.
ЧПУ был дешевле ЧПУ.
И превращалась в ЧПУ станок.


Нет, ЧПУ- это всего лишь один из элементов цепочки, включавшей в себя САПР как основу подготовки производственного процесса.
Проще говоря, «станки с обучением» не нуждались в программистах.
Сейчас есть станки с тем, что называется «диалоговый режим», то есть станок запоминает последовательность операций, выполняемых в полуручном режиме, когда оператор говорит «вот тут проточить прямоугольник», «вот тут — насверлить группу отверстий», и так далее. Но это, чаще всего, встречается в «гаражных» производствах, где вопрос о том, что станок должен использоваться по прямому назначению (делать детали) всё рабочее время, а не использоваться, как рабочая станция для создания программ, не стоит. Зато стоит — о том, чтобы не тратить деньги на CAM и зарплату отдельного программиста.
Вообще классная идея. Пожалуй я себе тоже такой режим в домашний станок прикручу.
НЛО прилетело и опубликовало эту надпись здесь
В те времена почти все токарные ЧПУ имели функцию обучения


У станков с ЧПУ идеология применения была другая.
Они как бы предназначались для изготовления единичных деталей или мелкосерийных партий деталей (сегодня делаем одно, завтра другое, послезавтра — опять первое и т.д.)

У станков «с обучением» была другая задача — изготовление деталей для крупных серий изделий, где изменения происходили не чаще, чем раз в неделю.
НЛО прилетело и опубликовало эту надпись здесь
То, что вы называете станками с обучением — тоже ЧПУ


Они никогда не проходили как станки ЧПУ.
Я выше писал, что была кампания по практически насильному внедрению ЧПУ в производство, и начальство, вне всякого сомнения — записало бы эти станки в ЧПУ при первой же возможности, так как это бы сильно улучшило отчетность.
Но не могло.
Предствяляете как будет выглядеть запись обрабоки, скажем, коленвала на таком станке? ;-)

На самом деле машины которые программируются оператором с помощью физического перемещения инструмента существуют и очень даже популярны в автомобилестроении, только называются они уже не ЧПУ, а универсальные роботы (KUKA, FANUC, UR). Программируются они в несколько этапов — сначала так, как вы описываете, путем записи перемещения рабочего инструмента. Потом, с помощью специализированного ПО описываются зоны в которые нелья заходить инструменту на холостых перемещениях. Далее выполняется оптимизация траекторий (очевидно, что человек двигает руками не оптимально) и симуляция на ПК. В конечном счете все это конвертируется в G-код для многокоординатных систем (обычно такие роботы имеют от 7-ми кооринат).

Используются такие роботы для покраски деталей автомобилей, их сварки, сборки готового изделия, автоматизации конвейерных операций.
Скорее, G-code можно сравнить с черепашкой LOGO. С ассемблером роднит то, что и для того, и для другого обычно не пишут вручную.
В 2004 году примерно тоже купили координатно-фрезерные станки с ЧПУ еще времён СССР. «Голова» на «центральном процессоре М2» от «Электроники-60», перфоленты и т.д.
Перфоленты заменили на коробочки с памятью, как в картриджах принтеров сейчас.
Для программирования перелопатил много программ (с Интернетом в те годы было не очень), самой подходящей оказалась EzCAM. в ней также была утилита для настройки постпроцессора, чтобы он выдавал G-код в нужном формате.
Процесс изготовления нестандартного оборудования на предприятии пошёл (можно сказать, полетел).
К станку, кстати, прилагалась брошюра с подробным описанием G-кодов именно для него.
После поменяли системы ЧПУ на Модмаш
К «голове» тоже была документация.
Так вот, что хочу сказать о программировании — эта штука позволяет создавать программы на языке типа Basic!

Купили ещё один станок, просто фрезерный 3-х координатный. Была задача сделать из него «шнекорезку», то есть, чтобы он мог изготавливать шнеки.
Добавили ещё одну ось — A, с приводом от шагового двигателя (мощного) через делительную головку.
Система позволяет рассчитывать 4 координаты в реальном времени, выводить их в систему ЧПУ. То есть, чтобы сразу сделать программу целиком для шнека, потребовалось создавать файл с G-кодами размером в десятки мегабайт. А здесь — нет, простенькая система на Pentium с небольшой памятью считает и выводит.
Более того, можно рассчитывать любые формы, например, лопатки для турбин или лопасти гребных винтов, да и всё, что угодно. Если для чего-то нет формул, всегда можно аппроксимировать сплайнами по нескольким контрольным точкам и рассчитать все промежуточные. Легко, арифметика Пупкина в картинках.

Я уже тут комментировал про шнек, вот ссылка на видео
У шнека имеется входной кусок с линейным постоянным шагом одной величины, выходной кусок с постоянным шагом другой величины, между ними часть, где один шаг плавно переходит в другой по параболической зависимости (кривая 2-го порядка). Всё это обрамлено кусками для захода и выхода фрезы. Для некруглых предметов берётся фреза маленького диаметра и делается несколько проходов с учетом формы.

Позже, где-то в 2016 году товарищ заказал спроектировать плоттер на бутылке, чтобы не изобретать велосипед, я взял контроллер GRBL на ATmega328, с механикой тоже всё банально.
Видео о плоттере
Подключение по воле заказчика было по Bluetooth, потом по USB, закончили на Wi-Fi через модуль ESP8266.
Для рисования и вывода в ЧПУ сделал примочку к редактору Inkscape. Пользователь рисует на экране, нажимает кнопку, и плоттер воплощает произведение в физическом мире.
Кто-то спрашивал, а почему G-коды? — Да потому, это — стандарт, но можно было сделать другой протокол, например, передавать: «иди по X на… точек».

Потом кто-то купил Line-us — маленький рисующий робот. Сделал для него расширение тоже.
Исходники — здесь

Главный вопрос в связи с ЧПУ — что на них делать?
Было время — делали детали, сейчас эти станки стоят, то есть, сказать, чтобы в стране не было станков и производства, нельзя. Проблема в том, что нужны заказы для загрузки этих производственных мощностей.

Кстати, тема ретрофита ЧПУ ныньче очень популярная. Народ приобретает старые (наверное даже — старинные) ЧПУ станки, выкидывает из них всю родную электронику, заменяет серво-приводы на современные, ставит RPi + LinuxCNC и получает вполне современный станок.

Мы недавно выполнии один такой ретрофит для отечественного плазмореза середины 90х готов выпуска. Вместе с китайскими серво-усилителями проект обошелся где-то в 200тыс руб. Все железо и механика остались преждними, пульт поменялся. Заказчик остался очень доволен.

Вопрос чем загрузить ЧПУ очень интересный и очень скользкий. К нам поступает очень много обращений на обработку сложных деталей в 5-ти координатах, но стоимость обработки (создание и отладка управляющей программы, стоимость металлорежущего инструмента, цена ошибок программиста) такова, что подавлющее число заказчиков уходят с отвисшей до пола челюстью.
один такой ретрофит для отечественного плазмореза середины 90х готов выпуска


Оригинального изготовителя плазмореза не помните?
Нет, но я могу выяснить. В оригинале, станком управлял 486й комп под MS-DOS, в котором стояла интерфейсная плата, к оной были подключены древние сервы пр-ва Mitsubishi, одна из которых сгорела и замены не сыскать. Как я уже упомянул, мы вытряхнули всю электронику оставив одну механическую часть, на которую были установлены современные и более мощные китайские серво-усилители, а так же модный пульт с сенсорным экраном :-). Для установки серв потребовалось выфрезеровать несколько переходных деталей. После ретрофита станок стал понимать обычный G-код, до этого УП к нему строились в какой-то эзотерической программе под DOS в неизвестном формате.
Нет, но я могу выяснить


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

Машина эта эксплуатировалась нещадно, и похоже ни разу не обслуживалась. Когда мы разобрали сдохшую серву, в надежде починить её, то обнаружили на печатных платах налет сажи (точнее, оксида железа) толщиной в 5 мм. То же самое было и внутри управляющего компа. Потребовалось не мало усилий, что бы отмыть платы и добраться до сгоревших деталей. Но уже в процессе чистки стало понятно, что «доктор прописал в морг». :)
Выяснил. Механика была спроектирована и собрана на С/З ПЕЛЛА, электроника — Кристалл (тоже Питерская).
Механика была спроектирована и собрана на С/З ПЕЛЛА


Тогда я не угадал.
Спасибо!

Даёшь следующую статью: PostScript, потерявшийся брат Forth!

Возможно глупый вопрос, но все же хочется поинтересоваться. Неужели до сих пор программы для станков с ЧПУ создаются по большей части на языке G-code? Нет чего-то более высокоуровневого с последующей конвертацией в G-code? Логично предположить, что должны существовать программные комплексы с 3D-моделированием процесса.

И в статье, и в комментариях, много раз упоминается термин "CAM". Это именно то, как программы разрабатываются сейчас. Ручное программирование — задача узкоспециальная.

НЛО прилетело и опубликовало эту надпись здесь
Более того, есть интерпретаторы G-кода, которые совместно с кинематической моделью станка могут просимулировать всю обработку и показать как будет выглядеть деталь, будут ли столкновения инструмента с оснасткой или зарезания в деталь (т.е. это некий «дисассемблер» для G-кода). В качестве примеру хочу привесте отчественную CAM систему SprutCAM — очень навороченая система мирового уровня, имеет 5х фрезерную обработку, симулятор и интерпретатор, не дорогая (относительно).

Программы можно спокойно создавать в CAM системах, дальше трансляция в G-код.

интересно интерпретаторы в 3д принтерах поддерживают условия и циклы итд?
например в прошивке marlin.

Есть же документация! Можно там как раз и посмотреть, что поддерживается.
Обычно в настольных поделках специфичные или слишком сложные функции не реализуют.
Например, на 3d-принтер даже с гигабайтной sd-картой можно не реализовывать циклы, полагаясь, что слайсер их все раскрутил. Прошивка в итоге проще, а памяти флешки не жалко.
В grbl, которая много лет умещалась на atmega328 не реализована команда, которая позволяет, например, вырезать квадрат с заданной стороной, имея фрезу с заданным диаметром (не помню точно, как она называется; суть что вы даёте настройку — "у меня фреза диаметром 1см. Режем влево 10, вверх 10, вправо 10, вниз 10" — и станок режет так, что получается квадрат 10х10; т.е. просчитывает траекторию, учитывая диаметр фрезы. Там уже требуется математика, которая в атмегу просто не влезла).

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории