Узнаете про персональное автоматизированное производство в домашней мастерской, как идея творца превращается в готовое изделие. Рассмотрим подход по отправке G-code инструкций из JVM и groovy/java на исполнение ЧПУ станку для автоматизации того, чего нет в системе «из коробки».
Надеюсь, эта публикация будет познавательна программистам работающих с JVM, тем кто интересуется темой IoT, кому не чуждо мастерить, кто думает о покупке 3D принтера, кто делал прототип какой-либо системы и запускал ПО на Raspberry PI/Beagleboard Black. То про что расскажу, можно повторить используя open source software и open hardware.
Содержание
- Предисловие
- Станки с ЧПУ
- От модели до G-code
- Программное управление
- Управляем автоматом из java и groovy
- Прекрасное далеко...
- Выводы
По мотивам моего мини-доклада на конференции «Разработка ПО» (SECR-2016). А также опыта как в аппаратной, так и в программной части.
Предисловие
Мне очень важно ваше мнение о докладе. В ближайшее время планирую провести митап, где практически можно будет попробовать сделать то о чем я сейчас буду рассказывать теоретически и поуправлять ЧПУ. Это будет открытое/бесплатное мероприятие и кто будет в Москве, может присоединиться. Я надеюсь в ближайшее время найду помещение, подготовлю примеры и на meetup.com размещу информацию о месте проведения. Кому интересно, можете написать на адрес электронной почты и я вам вышлю оповещение о событии. Примечание к статье: конечно же опубликую результаты этой встречи для читателей habrahabr и вы можете поучаствовать в ней.
Начнем доклад на тему «Как ЧПУ станку в домашней мастерской не превратиться в мульт героев “двое из ларца”». Кто смотрел и помнит о чем этот мультфильм?
Голоса из зала: «Все смотрели»
Отлично, значит вы приблизительно знаете о чем я буду рассказывать. А в в конце доклада попробуем программно управлять автоматом на Java и Groovy.
Еще вопрос залу. Кто постоянно использует станки с ЧПУ, кто работает инженером, конструктором, технологом производства? Слышу отрицательные ответы из зала. Значит мне будет гораздо проще и не потроллите. Людям которые каждый день используют эти технологии в промышленности может стать смешно от стоимости инструментария, глубины погружения в тему и моего стиля изложения.
Станки с ЧПУ
Что мы знаем с вами о работе? Работа и труд человека всегда происходил двумя способами.
Либо вы управляете тем кто работает, либо впрягаетесь и делаете работу вместе со всеми — вместе тянете одну «лямку».
На этой картинке не учли, что появились более удобные инструменты благодаря изобретателям и инженерам.
Технологии которые упрощают труд, делают жизнь гораздо приятнее и позволяют заниматься людям интеллектуальными вещами, а работу оставить для машин.
Все наверное помнят, как мальчик из мультфильма «Вовка в Тридевятом царстве» хотел чтобы его желания исполнялись, но при этом ничего не хотел делать сам и не хотел ничему учиться.
В тридевятом царстве попал он к двоим из ларца, одинаковых с лица. Они были исполнительными и делали за него все, но совсем не так как ему было нужно.
Также вы наверное помните вот этих двоих.
Гриф звал страуса с собой туда, где много вкусного. Когда страус побежал, гриф остановил его и сказал фразу «Лучше день потерять, потом за пять минут долететь». Делая часто повторяющуюся работу нужно подумать не проще ли потерять «день» на ее автоматизацию.
Технологии, про которые мы сейчас будем говорить — семядисятых годов XX века. Это станки, которые управляются с помощью программ, которые хранятся в памяти. Раньше это были перфокарты, в последнее время это флеш накопители. На производстве автоматы бывают самых разных размеров, различных кинематических схем и могут быть оборудованны различными инструментами, которые выполняют обработку материала.
В домашней мастерской все более прозаично. В основном станки — ассортимент с AliExpress либо наших импортеров «производителей» ребрендинга из поднебесной. Можно приобрести все что угодно, а можно собрать самостоятельно купив запчасти.
Если вам жалко время и деньги, нет опыта и доступа к станкам для изготовления рамы и портала, то проще купить готовый. С другой стороны собрать самому — очень интересный опыт. Есть еще проекты Shapeoko, MechMate CNC Router, Zenbot CNC и т.п.
Что можно делать на ЧПУ станке и зачем он может быть нужен в мастерской? Можно выполнять работы по дереву, изготовить декоративные панели для ремонта. Или у вас возникла творческая мысль и ее результат не продается в готовом виде. Еще можно сделать деталь для ремонта какой-либо бытовой аппаратуры. Например, запчасть для чайника или отпаривателя из цветных металлов и запчастей для ремонта нет в продаже и сервис центрах. Можно делать на одном станке запчасти для другого ЧПУ как и в случае 3D принтера, но не ограничиваясь пластиком, как материалом для изготовления деталей.
С программной точки зрения почти нет разницы между ЧПУ, 3D принтером или плоттером. Отличается рабочий инструмент, но при этом многие 3D принтеры управляются, как и большие промышленные станки тем же самым языком комманд.
Вспоминая мультфильм, где страус бегал и не мог взлететь. Гриф говорит что крылья лучше, страус говорит что ноги. В конце мультфильма появляется ящерица и говорит что главное — это хвост. Её хвост спас ей жизнь в начале. Прошу вас, когда работаете с ЧПУ помнить об опасности жизни и здоровью и соблюдать технику безопасности! ЧПУ содержат режущий инструмент, массивные перемещающиеся и вращающиеся части.
Электрический привод таит в себе опасность при контакте с корпусом, если нарушена изоляция. Даже не пытайтесь тушить работающий электропривод водой не обесточив его.
От модели до G-code
Почти каждый ЧПУ станок управляется с помощью G-code. Это текстовый формат комманд и данных, который принят как международный стандарт. Но конкретные реализации для автоматов разных производителей содержат расширения, которые могут сделать управляющие программы не переносимыми на другой автомат.
Управляющая программа на этом слайде фрезерует треугольник на плоскости.
G21 говорит что единицы измерения в программе будут в миллиметрах.
M3 Включает шпиндель c заданной скоростью вращения S.
G0 перемещает рабочий инструмент на холостом ходу с линейной интерполяцией от текущей координаты к указанным в команде.
G1 также использует линейную интерполяцию, но это режим обработки, где F указывает скорость подачи.
М5 останавливает шпиндель.
M2 завершает программу
Ничего сложного в этом примере нет, но G-code на практике редко пишут вручную. Обычно создается модель в каком-либо виде и на ее основе создается управляющая программа.
Можно создать контуры в векторном редакторе, например в Inkskape, и с помощью opensource ПО GCodeTools превратить ее в g-code программу для станка. Этот подход удобен для дизайнеров.
Для тех кто привык работать в Blender, можно превратить 3D модель в 2.5D рельеф с помощью opensource BlenderCAM.
Для хобийного использования не доступны промышленные САПР системы, стоимостью десятки и сотни тысяч долларов. Но можно использовать opensource ПО FreeCAD.
Пока он не сравним по удобству и функциональным возможностям с дорогими CAD/CAM пакетами, но в несложных задачах его вполне может оказаться достаточно для проектирования.
Его форк HeeksCAD более проработан в части CAM и позволяет на основе модели/чертежа создавать управляющие программы.
Программное управление
Что непосредственно управляет координатным столом, фрезером, либо другим инструментом станка?
Это специализированные DSP контроллеры ЧПУ к которым можно подключить usb flash накопитель и станок. Либо это платы расширения к одноплатному компьютеру (Raspberry PI, BeagleBoard) для управления электроприводом и шпинделем. Либо это обычный персональный компьютер с портом LPT или платой расширения PCI/PCIe для сопряжения с электроникой станка.
Герой для этого доклада — это персональный компьютер. Потому что управлять станком, интерпретировать g-code можно с помощью opensource программы LinuxCNC.
ПО работает на real-time ядре linux. Для одноплатных компьютеров Raspberry PI, BeagleBoard Black используется его форк Machinekit для ARM в виде готового iso образа. Существует сборка Machinekit для одноплатного C.H.I.P. за 9$.
LinuxCNC — это конструктор и на основе его конфигурации можно собрать почти любую конфигурацию. Эта программа управляет и хобийными станками и огромными производственными ЧПУ. Его применяют как при модернизации электроники промышленных ЧПУ, так и во вновь проектируемых станках.
Часть его компонентов работают в real-time процессе, менее критичная часть работает в окружении с непрогнозируемыми задержками. Расширять внутреннюю логику реакции на события в LinuxCNC можно с помощью LD диаграмм и даже шелл скриптов или консольных программ.
Управляем автоматом из java и groovy
Мы попробуем вместо его GUI компонента управлять ЧПУ и передавать комманды интерпретатору через внешний API с помощью привычных нам технологий разработки ПО. Для всех кому интересена эта идея, вы можете найти PoC Apache Camel компонент и библиотеку для JVM camel-gcode на github.
Существует множество решений для «интернет вещей» которые основаны на java, часто это серверы для шлюзов IoT. Теперь есть возможность интегрировать управление автоматом на LinuxCNC в сложные «облачные» сценарии автоматизации с доступом к Internet. Используя Eclipse Kura, Apache Camel и собрать с помощью этого конструктора рабочее решение из сотни готовых компонент не составит большого труда. Можно интегрировать библиотеки машинного зрения и добавить компоненты распознавания, как и есть средства для захвата изображений с камеры или по сети.
Начнем с небольшого примера на java, используя API, который позволяет посылать команды для управления станком. Под капотом библиотека отправлет команды telnet процессу linuxcncrsh из LinuxCNC/Machinekit.
?//maven dependency com.github.igor-suhorukov:camel-gcode:0.1
import com.github.igorsuhorukov.gcode.GCodeClient;
public class Gcode {
public static void main(String[] args) throws Exception {
String hostname = "beaglebone.local";
int port = 5007;
try (GCodeClient gCodeClient = new GCodeClient(hostname, port)) {
System.out.println(gCodeClient.login("EMC", "JVM", "1.0"));
gCodeClient.sendCommand("set mode manual");
gCodeClient.sendCommand("set estop off");
gCodeClient.sendCommand("set machine on");
for (int axis = 0; axis < 4; axis++)
gCodeClient.sendCommand("set home " + axis);
System.out.println(gCodeClient.sendCommand("get abs_act_pos"));
gCodeClient.sendCommand("set mode mdi");
gCodeClient.sendCommand("set mdi g0 x3 y4");
gCodeClient.sendCommand("set mdi g0 x5 y2");
}
}
}
Этот пример перемещает портал станка с максимальной скоростью на холостом ходу сначала в координаты (3;4), а затем в (5;2).
Следующий пример программы на Groovy на основе фреймворка Apache Camel и компонента для отправки команд станку com.github.igor-suhorukov:camel-gcode
@Grab('com.github.igor-suhorukov:camel-gcode:0.1')
@Grab('org.apache.camel:camel-groovy:2.18.0')
@Grab('org.apache.camel:camel-core:2.18.0')
@Grab('org.apache.camel:camel-jetty:2.18.0')
@Grab('org.slf4j:slf4j-simple:1.6.6')
import org.apache.camel.builder.RouteBuilder
import org.apache.camel.impl.DefaultCamelContext
import com.github.igorsuhorukov.smreed.dropship.MavenClassLoader
def camelContext = new DefaultCamelContext()
camelContext.setName("I'll be back")
camelContext.addRoutes(new RouteBuilder() {
def void configure() {
from('jetty:http://0.0.0.0:9090/moveTo').routeId('CamelCNC')
.process{ it.in.body =
("set mdi g0 x${Math.round(Math.random()*10)} y${Math.round(Math.random()*10)} z1") }
.to('gcode:?host=beaglebone.local&port=5007&autoHomeAxisCount=4')
}
})
addShutdownHook{ camelContext.stop() }
camelContext.start()
def HawtIo = MavenClassLoader.usingCentralRepo()
.forMavenCoordinates('io.hawt:hawtio-app:2.0.0').loadClass('io.hawt.app.App')
Thread.currentThread().setContextClassLoader(HawtIo.getClassLoader())
HawtIo.main('--port','10090')
Запустить пример можно с помощью java -jar groovy-grape-aether-2.4.5.4.jar CamelCNC.groovy
В этом примере приложение на Groovy подключает компоненты jetty, gcode, формирует маршрут на groovy DSL camel и загружает и запускает веб консоль для мониторинга HawtIo. При каждом запросе по http на HOST:9090/moveTo создается новая команда с перемещением в случайные координаты по осям X и Y и отправляется на исполнение LinuxCNC и станку и сгенерированная команда возвращается клиенту как http response. Веб консоль слушает по адресу HOST:10090/hawtio
Достаточно сложные вещи легко сделать за счет магии Apache Camel, Groovy и HawtIo.
Прекрасное далеко...
Можем погадать о будущем.
Прослеживается тренд, что все что можно автоматизировать и экономически целесообразно так делать, автоматизируют. На днях была новость про Foxconn в Китае и 40000 автоматов на их производстве сократившие рабочие места на предприятии. Большую часть деталей автоматов они делают своими силами, как и управляющую электронику.
Хоть я и не Нострадамус, но сейчас становится понятно что из-за автоматизации в будущем исчезнут рабочие места. Также ясно что потребность в автоматизации производства будет только увеличиваться со временем. И люди, которые разбираются в этих технологиях, будут еще больше востребованы на рынке труда, но до определеного момента… А персональное производство на ЧПУ проникнет в каждую мастерскую.
Каким же именно будет будущее?
Пороботят или уничтожат роботы людей?
Или люди также будут контролировать роботов.
Все это зависит от нас сегодня!!!
Выводы
Многие вещи которые мы делаем вручную и такую повторяющуюся работу часто можно автоматизировать. В этом случае начинать надо с создания модели. Следующий шаг — это превращение этой модели в управляющую программу для автомата. Эти команды будет выполнять некий механизм с ЧПУ и все в процессе производства что есть смысл автоматизировать нужно автоматизировать. Используя в том числе технологии машинного зрения и датчики обратной связи. Точно не стоит бегать с флешкой между компьютером и станком, нужно передавать команды по сети. Всю работу пусть делает автомат. Но чтобы ЧПУ не превратиться в двоих из ларца, вам все равно прийдется учиться технологиям и разбираться в деталях процесса. Иначе прийдется делиться ресурсами с тем кто понимает и получать в результате не всегда то что хотели изначально.
- LinuxCNC
- Machinekit
- FreeCAD
- HeeksCAD
- GCodeTools
- LinuxCNC telnet протокол
- G-code в LinuxCNC
- camel-gcode на github
- Apache Camel
- camel-gcode пример на Groovy
Кому не принципиально является ли CAD open source продуктом, лишь бы ПО можно было законно использовать бесплатно, почитайте публикацию и видеокурсы авторством DIHALT
Комментарии (36)
vershinin
08.11.2016 23:13У меня была идея полностью автоматизировать резку из фанеры. То есть, пользователь заказывает надпись на сайте, и CNC станок автоматически вырезает надпись без участия человека.
Однако, после консультации со специалистом оказалось что я не учел массу проблем.
Во-первых фреза может сломаться, все зависит от качества материала.
Во-вторых, фреза может намотать на себя стружку и вырвать заготовку.
В-третьих, намотанная стружка крутится со скоростью 10000 оборотов в минуту, трётся о заготовку и может загореться.
По-этому, обязательно должен быть человек, который присматривает за станком, и желательно знает техпроцесс.igor_suhorukov
08.11.2016 23:16На этот случай есть станки с автосменой инструмента. Сломалась 1 фреза, можно достать вторую такую же из магазина инструмента.
При деревообработке нужна аспирация и удаление стружки из зоны реза. Так как взвесь древесной пыли в воздухе взрывоопаснаvershinin
09.11.2016 00:18+1Ну, там пылесос был. Но бывает так, что стружку нельзя аспирировать, потому что она одном концом все ещё прикреплена к заготовке.
Конечно, это больше связано с особенностями такого материала как фанера, а вот на твердой древесине такой проблемы нет.
А вообще, да, коммунизм всё ближе.igor_suhorukov
09.11.2016 13:58Да ладно, можно подобрать режимы обработки чтобы без огня. Так же как и снабдить все датчиками и т.п.
vershinin
09.11.2016 18:58Ну, тут мы опять возвращаемся к экономической эффективности.
igor_suhorukov
09.11.2016 19:13И к улучшению безопасности. Что может с лихвой покрыть все издержки автоматизации.
igor_suhorukov
08.11.2016 23:18Часто ищут компромисс между ценой автоматизации и ручным трудом… Если же цена не ограничение, то многие производства микропроцессоров — почти полностью автоматизированные
Flux
08.11.2016 23:31+1Не почти, а полностью.
igor_suhorukov
08.11.2016 23:32Класс! Я слышал такое про чистые помещения и Intel, включая машинное зрение для контроля пластин
roller
09.11.2016 03:32Ваша идея не нова, полностью автоматический завод делали (пытались сделать) еще в ссср. Правда из видео непонятно выпускалось ли там что-то реальное или это просто PoC
Einherjar
09.11.2016 20:36Какая еще стружка? Там в пыль все перемалывается, ничего никуда не намотается.
vershinin
09.11.2016 21:33Всё не всё, зависит от качества материала. В нем попадаются даже камни!
Einherjar
09.11.2016 22:26Так не надо пользоваться некачественным материалом. А так, с первого взгляда, эта идея имхо упирается не столько в сам процесс фрезерования сколько в окупаемость. Без участия человека это же означает автоматическую подачу материала, автоматическую смену оснастки и.т.п., т.е. это решение уже далеко не на базе китайского станка с алиэкспресс за двести долларов. А много ли заказов с фанерой будет? Это же не точные металлические изделия, и дорого за них вряд ли заплатят. Просто интересно, зачем вообще фрезеровать надписи в фанере? Большинство известных мне применений фанеры, особенно низкого качества со всяким мусором внутри, требуют максимум циркулярной пилы для раскроя, но никак не чпу-фрезеровки.
igor_suhorukov
09.11.2016 12:17Теперь не только модельки из пластика печатают в подмосковье на 3D принтере, но и жилой дом. Я бы в таком не рискнул жить!
Видео укладки цемента. А гудрон - в ручную
grey_rat
Самое плохое в автоматизации — это быстрая смена технологий и сознательная несовместимость со старыми технологиями. По причине:
1. Дешевизны продукции сделанной роботами
2. Запланированное устаревание
3. Капитализм
То есть, цель автоматизации сейчас — это не облегчение труда человека, а именно замена человека машиной в целях извлечения большей прибыли.
igor_suhorukov
При нынешнем обществе да. Но меняются технологии, меняется и общество…
Flux
igor_suhorukov
Начнем опять с мультфильма… кто-то переориентирует технологии для помощи кому-то?
Можно не ждать сказки, а начинать самому и сегодня
vershinin
Тут сложный процесс, конечно. Но развитие технологий приводит к смене производственных отношений, а они в свою очередь создают противоречия в уже имеющемся укладе общества. В результате добровольно или не очень меняется общественная формация. Разве не так?
igor_suhorukov
можете привести примеры?
grey_rat
Компьютерные игры с заявленной минимальной поддержкой DirectX 11, но взломанные пиратами с возможностью запуска на железе DX10 или DX9.
Установка запрограммированных микросхем (микроконтроллеров) в не сложную бытовую технику (чайники, пылесосы и пр.), когда выход из строя самой микросхемы или её программы ставит крест на ремонте самого устройства. Опять же закрытый код самих станков ЧПУ и закрытый код электроники самих изделий.
Тут даже банально винты под отвёртку «вилочка» вместо обычной плоской в копеечных китайских чайниках и прочем таком же барахле.
igor_suhorukov
Так можно не покупать такие продукты и голосовать рублем даже сейчас ) Такая несовместимость оправдана, если она дает ощутимые выгоды на основе прогресса, а не ухудшения жизни пользователя.
DX10/9 вряд ли поддерживают аппаратно тесселяцию
grey_rat
Есть игры, где разработчики сознательно в файлах конфигурации прописывали ограничение DX11, хотя эта же взломанная игра шла и на DX10/9. Речь не про поддержку конкретных графических технологий в игре, а про то, что возможно производитель графических адаптеров предлагал свои услуги в замен на определённые возможности/ограничения в релизной версии игры. Логично предположить, что разработчику и издателю игры важно количество проданных копий, а производителям графических адаптеров/процессоров выручка от проданной выпускаемой ими электроники.
igor_suhorukov
Так пираты же в данном конкретном случае решили все проблемы) У их партии даже победы в Исландии.
webkumo
А что насчёт графики? Возможно создатели игры сознательно ограничили, чтобы дать пользователю максимум от картинки?
kibizoidus
И снова во всем виноват капитализм. Конечно же. Как же оно все развилось-то до текущего уровня? Как же у вас в руках айфон-то? Как, если в условиях капитализма это такой ужас?
grey_rat
Капитализм бывает разный. Но играют по правилам честной конкуренции лишь до момента когда дела становятся либо слишком плохи, либо наоборот слишком хороши и появляется шанс стать монополистом. Кстати, наш бывший СССР после развала так и поимели другие страны, предложив нам поиграть в конкуренцию, зная, что по очень многим направлениям (в том числе и автоматизации) мы конкретно отстаём от них.
Признаки одичавшего капитализма — это отсутствие конкретных высоких целей у цивилизации. То есть, всё пущено на самотёк с надеждой, что к чему-нибудь это в конечном итоге приведёт.
kibizoidus
Я даже комментировать не буду. Вздыхайте о вашем СССР дальше.
igor_suhorukov
Почему именно эта идеология и реализация? Может для решения текущих проблем и потребностей общества и индивидуумов в условиях реальных ограничений будет другой более подходящий, как бы его там не назвали.
vershinin
Развилось-то оно развилось, однако неэффективность этого развития просто поражает.
Apple чтобы отчитаться перед своими инвесторами каждый год выпускает новый айфон, некоторые (не буду показывать пальцем) успевают выпустить два флагмана за один календарный год.
На эту, так называемую, конкуренцию тратятся совершенно безумные количества природных ресурсов.
Каждый капиталист тянет одеяло на себя, что в конце концов разорит всю планету.
kibizoidus
Кого и чем она поражает? Людям нужные новые телефоны. Как, для чего, и кто их в этом убеждает — дело третье. Но они сами делают свой выбор и никто им не указывает, что именно им нужен этот смарт, разве не так? Пожалуйста, хватит везде развивать эти дряхлые коммунистические идеи. Они не работают, как бы вам не хотелось. Уже тысячи раз примерами доказывали и показывали, что нет, невозможно это в силу человческих факторов и психологии — но нет же, вы все в ту же степь.
ilyinovk
Про необходимость новых телефонов — право дело, смешно, особенно про «свой выбор». Фразой «неработающие идеи» можно охарактеризовать не только «дряхлые коммунистические» идеи — просто вы в силу своего ограниченного жизненного опыта не имели возможность в этом убедиться. Вы парень неглупый судя по всему, все со временем сформируется в более-менее цельную картину мира, и тогда можно будет поговорить более предметно. А до тех пор — не следует излишне категорично рассуждать
vershinin
Ээх, вы все напутали. Под нуждой подразумевается потребность. Потребность — штука объективная, в отличие от субъективных хотелок. Людям нужны не новые телефоны, а удовлетворение потребности в средствах связи, например. А новые телефоны сами по себе потребностью не являются. На эту тему недавно смотрел хороший «разведопрос», рекомендую глянуть для расширения кругозора. https://youtu.be/N3gg_LfI-2A
Что касается дряхлых коммунистических идей, то если протереть глаза, то станет видно, что мы живем при господстве еще более дряхлых капиталистических идей.
Причем, самое забавное то, что не актуальны уже с XIX века, с того момента как экономика стала глобальной (и монополистической). Да-да, те самые руки рынков, свободные конкуренции и так далее, уже давным давно на кладбище истории.
А как же стартапы, огромные возможности и т.д.? На это я отвечу, что даже в такой молодой области как ИТ, основная цель стартапа продаться как можно дороже большому мешку. В фармацевтике все давным давно уже поделено. В энергетике тоже. Нет ни одной области, где работала бы свободная конкуренция.
Против «большого бабла» у мелких фирмочек нет шансов.
telobezumnoe
цель автоматизации увеличить производительность труда. это выгодно всем, но для этого необходимо постоянно повышать планку образования людей, чтоб они могли выполнять высококвалифицированную работу. а вот это как раз не вписывается в современную концепцию потребительской экономики.
igor_suhorukov
Зато интернет помогает самообразованию. Другой вопрос мотивации людей учиться вместо того чтобы смотреть сериалы все свободное время, покупать каждый новый девайс или работать сверхурочно «механическим» способом для того чтобы соответствовать чьим-то взглядам на жизнь и рабочей культуре. Книги и учебные курсы устаревают очень быстро.
Незыблема классика математического анализа и физики.