Pull to refresh

Comments 68

Интересная тематика, совершенно не освещенная на Хабре. Давайте еще!
А я вижу аналогии между ассемблером и С++. Что делать?
UFO landed and left these words here

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

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

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

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

Обычно, недостаточно не возможностей языка, а документации, потому что производители не очень торопятся делиться всеми деталями или боятся, что производственники что-то испортят. Например, пришлось заниматься легким «хакерством» и искать численные адреса некоторых переменных, чтобы читать оттуда, потому что производитель решил, что туда можно только писать (по буквенному адресу). Итог — удалось дописать в программу проверку состояния станка, которую производитель не предусмотрел и из-за отсутствия которой автоматическое сопло для охлаждения инструмента сжатым воздухом оказывалось выдвинуто во время рестарта программы с произвольного места, что вело к поломке сопла устройством смены инструмента. До этого, сопло ломалось где-то три раза в год, что приносило убыток в $450 каждый раз. Станок — старый, производитель на запросы инженеров отвечал «will not fix», «покупайте новый контроллер» ($15k).
В принципе, ровно как и любой низкоуровневый язык, G-code позволяет делать «всё», что может железо, на котором он исполняется. Но с растущей сложностью кода, растет сложность его поддержки — подавляющее большинство программистов на предприятиях — это операторы CAD/CAM, за автоматизацию вообще часто отвечает аутсорс — application engineer-ы дилера, интегратора или производителя машины. И действительно, если я напишу что-нибудь вроде «взять из таблицы расширенного менеджера инструментов диаметр текущего инструмента, округлить до целых, умножить на десять, положить в переменную, вызвать подпрограмму по численному идентификатору, равному значению этой переменной» — ни оператор станка, ни оператор CAM (который тоже называется «программист») не поймут, что вообще происходит с программой и почему. Хотя вот когда я, наконец, соберу собственный станок дома и начну на нем что-то делать, там уж развернусь по полной.
UFO landed and left these words here
Ох уж этот Siemens, все не как у людей. Напомните, что делают конструкции @....
UFO landed and left these words here
Не только с Fanuc, но и вообще с ISO, похоже.
UFO landed and left these words here
подавляющее большинство программистов на предприятиях — это операторы CAD/CAM

Это кстати еще одно сходство G-code и Assembler — G-code в реальном «продакшене» сейчас тоже движется в сторону, когда останется только в редких и узких нишах типа поддержки старого/экзотического железа или когда требуются низкоуровневые хаки.
А так постпроцессоры есть уже примерно для всего, да и часто сложность обработки (тех же пресс-форм для литья пластиков например) исключает возможность программирования сразу в кодах
Требования эффективности обработки даже очень простых деталей исключают ручное программирование, потому что, например «классическое» фрезерование убивает инструмент в каждом внутреннем радиусе, а чтобы этого избежать «динамическим» фрезерованием, уже нужна система CAM. Геометрию вручную программируют либо динозавры, либо когда речь о сравнительно простых токарных деталях (потому что там многопроходность всякая может быть зашита в контроллер). Вручную — либо логика автоматизации, либо параметрически заданные программы.
Самое приятное, на опыте узнать, что станок не все команды воспринимает как следует.
Есть старый немец, тот по желанию левой пятки делал фрезеровку по дуге с «запасом», если координата была не целым числом (лишний виток большим радиусом).
Мог не поднять шпиндель, если в строке есть две команды, одна из которых М. Как оказалось сам САПР генерировал ошибочный код. Для нового ПК софта и современных ЧПУ не ошибка, автоматически корректировали, а вот старички на чистой логике не обрабатывали такое.
Пришлось завести для операторов табличку корректировок, что нужно менять в программах перед отправкой на станок.
Пришлось завести для операторов табличку корректировок

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

Современное оборудование для серийного производства печатных плат выглядитнесколько несколько иначе — функцию фото-плоттера выполняет компьютер, который в памяти симулирует все перемещения инструментов и выдает на выходе готовый битмап высокого разрешения, который печатается на специальном принтере (пленке) и далее используется как фото-шаблон для экспозиции всей заготовки разом по аналогии с классической фотографией.
Gerber можно преобразовать в G-code например для фрезера, если предполагается мехобработка платы.
А вобще Gerber — тоже по сути программа, только для ЧПУ-рисователя шаблонов плат. И вроде бы там даже есть свои аналоги G/M кодов
Только не «преобразовать», а на основе геометрии, которая в нем описана, создать программу для обработки платы. Потому что из слова «преобразовать» автор вопроса, скорее всего, вообразит себе некий «конвертер», как для преобразования GIF в PNG.
Ну для конечного пользователя оно так и будет в виде конвертера gif2png.exe pcb2gcode.exe )
И там не тупо геометрия, там именно программа по факту (с командами управления инструментом и проч.). В отличие от того же DXF например
Эх, жаль этой статьи не было, когда я еще в универе учился. Очень бы пригодилась на парочке лаб!
Потому, для полной переносимости и независимости от настроек, десятичная точка должна быть в цифровых значениях координат абсолютно всегда.

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

Часто так и делают. Пишут «пост-постпроцессор» для каких-то своих целей.
Но часто просто открывают в «блокноте» и делают несколько раз «найти-заменить» ). Задачи и размеры производства у всех разные, а «обычного программиста» под рукой может и не быть. Гаражные инструменталки с древними станками все еще встречаются.
Об обучении


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

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

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

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

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

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

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

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


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

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

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


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

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


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


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


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

У станков «с обучением» была другая задача — изготовление деталей для крупных серий изделий, где изменения происходили не чаще, чем раз в неделю.
UFO landed and left these words here
То, что вы называете станками с обучением — тоже ЧПУ


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

На самом деле машины которые программируются оператором с помощью физического перемещения инструмента существуют и очень даже популярны в автомобилестроении, только называются они уже не ЧПУ, а универсальные роботы (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". Это именно то, как программы разрабатываются сейчас. Ручное программирование — задача узкоспециальная.

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

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

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

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

UFO landed and left these words here
В 1993 работал немножко с этой штукой на GF-9 (сверлильно-фрезерный). Потребовалось сделать несколько деталей для весов на рынок моему приятелю, выпускнику соседнего факультета, подавшемуся в торговлю ещё до выпуска). Может быть, с этого начался мой путь в профессиональную разработку ПО. Помню, что тогда именно я ощутил какое-то подобие вкуса к программированию.
Only those users with full accounts are able to leave comments. Log in, please.