- PVSM.RU - https://www.pvsm.ru -

Управляем автоматом на Groovy-Java. Как ЧПУ станку в домашней мастерской не превратиться в мульт героев «двое из ларца»

Поговорим на темы от труда и работы, станков, автоматизации на java/groovy до прогнозов о будущем человечества.

Узнаете про персональное автоматизированное производство в домашней мастерской, как идея творца превращается в готовое изделие. Рассмотрим подход по отправке G-code инструкций из JVM и groovy/java на исполнение ЧПУ станку для автоматизации того, чего нет в системе «из коробки».

Управляем автоматом на Groovy-Java. Как ЧПУ станку в домашней мастерской не превратиться в мульт героев «двое из ларца» - 1

Надеюсь, эта публикация будет познавательна программистам работающих с JVM, тем кто интересуется темой IoT, кому не чуждо мастерить, кто думает о покупке 3D принтера, кто делал прототип какой-либо системы и запускал ПО на Raspberry PI/Beagleboard Black. То про что расскажу, можно повторить используя open source software и open hardware.

Содержание

  1. Предисловие [1]
  2. Станки с ЧПУ [2]
  3. От модели до G-code [3]
  4. Программное управление [4]
  5. Управляем автоматом из java и groovy [5]
  6. Прекрасное далеко... [6]
  7. Выводы [7]

По мотивам моего мини-доклада на конференции «Разработка ПО» (SECR-2016) [8]. А также опыта как в аппаратной, так и в программной части.

Видеозапись доклада...

Огромное спасибо Стасу Фомину belonesox [9] за профессиональную видеозапись и оперативный монтаж!!!

Предисловие

Обращение к слушателям.

Доброе утро, уважаемые слушатели. Всем спасибо что проснулись и пришли утром выходного дня. Я вас рад видеть в зале! На доклад у нас с вами не так много времени, поэтому секции вопросов-ответов в зале не будет, но можете подойти и задать вопросы после доклада. На последнем слайде есть адрес электронной почты по которому я также отвечу.

Мне очень важно ваше мнение о докладе. В ближайшее время планирую провести митап, где практически можно будет попробовать сделать то о чем я сейчас буду рассказывать теоретически и поуправлять ЧПУ. Это будет открытое/бесплатное мероприятие и кто будет в Москве, может присоединиться. Я надеюсь в ближайшее время найду помещение, подготовлю примеры и на meetup.com размещу информацию о месте проведения. Кому интересно, можете написать на адрес электронной почты и я вам вышлю оповещение о событии. Примечание к статье: конечно же опубликую результаты этой встречи для читателей habrahabr и вы можете поучаствовать в ней.

Начнем доклад на тему «Как ЧПУ станку в домашней мастерской не превратиться в мульт героев “двое из ларца”». Кто смотрел и помнит о чем этот мультфильм?

Голоса из зала: «Все смотрели»

Отлично, значит вы приблизительно знаете о чем я буду рассказывать. А в в конце доклада попробуем программно управлять автоматом на Java и Groovy.

Еще вопрос залу. Кто постоянно использует станки с ЧПУ, кто работает инженером, конструктором, технологом производства? Слышу отрицательные ответы из зала. Значит мне будет гораздо проще и не потроллите. Людям которые каждый день используют эти технологии в промышленности может стать смешно от стоимости инструментария, глубины погружения в тему и моего стиля изложения.

Станки с ЧПУ

Что мы знаем с вами о работе? Работа и труд человека всегда происходил двумя способами.

Управляем автоматом на Groovy-Java. Как ЧПУ станку в домашней мастерской не превратиться в мульт героев «двое из ларца» - 2

Либо вы управляете тем кто работает, либо впрягаетесь и делаете работу вместе со всеми — вместе тянете одну «лямку».

На этой картинке не учли, что появились более удобные инструменты благодаря изобретателям и инженерам.

Управляем автоматом на Groovy-Java. Как ЧПУ станку в домашней мастерской не превратиться в мульт героев «двое из ларца» - 3

Технологии которые упрощают труд, делают жизнь гораздо приятнее и позволяют заниматься людям интеллектуальными вещами, а работу оставить для машин.

Все наверное помнят, как мальчик из мультфильма «Вовка в Тридевятом царстве» хотел чтобы его желания исполнялись, но при этом ничего не хотел делать сам и не хотел ничему учиться.

Управляем автоматом на Groovy-Java. Как ЧПУ станку в домашней мастерской не превратиться в мульт героев «двое из ларца» - 4

В тридевятом царстве попал он к двоим из ларца, одинаковых с лица. Они были исполнительными и делали за него все, но совсем не так как ему было нужно.

Также вы наверное помните вот этих двоих.

Управляем автоматом на Groovy-Java. Как ЧПУ станку в домашней мастерской не превратиться в мульт героев «двое из ларца» - 5

Гриф звал страуса с собой туда, где много вкусного. Когда страус побежал, гриф остановил его и сказал фразу «Лучше день потерять, потом за пять минут долететь». Делая часто повторяющуюся работу нужно подумать не проще ли потерять «день» на ее автоматизацию.

Технологии, про которые мы сейчас будем говорить — семядисятых годов XX века. Это станки, которые управляются с помощью программ, которые хранятся в памяти. Раньше это были перфокарты, в последнее время это флеш накопители. На производстве автоматы бывают самых разных размеров, различных кинематических схем и могут быть оборудованны различными инструментами, которые выполняют обработку материала.

Управляем автоматом на Groovy-Java. Как ЧПУ станку в домашней мастерской не превратиться в мульт героев «двое из ларца» - 6

В домашней мастерской все более прозаично. В основном станки — ассортимент с AliExpress либо наших импортеров «производителей» ребрендинга из поднебесной. Можно приобрести все что угодно, а можно собрать самостоятельно купив запчасти.

Управляем автоматом на Groovy-Java. Как ЧПУ станку в домашней мастерской не превратиться в мульт героев «двое из ларца» - 7

Если вам жалко время и деньги, нет опыта и доступа к станкам для изготовления рамы и портала, то проще купить готовый. С другой стороны собрать самому — очень интересный опыт. Есть еще проекты Shapeoko, MechMate CNC Router, Zenbot CNC и т.п.

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

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

Вспоминая мультфильм, где страус бегал и не мог взлететь. Гриф говорит что крылья лучше, страус говорит что ноги. В конце мультфильма появляется ящерица и говорит что главное — это хвост. Её хвост спас ей жизнь в начале. Прошу вас, когда работаете с ЧПУ помнить об опасности жизни и здоровью и соблюдать технику безопасности! ЧПУ содержат режущий инструмент, массивные перемещающиеся и вращающиеся части.

Управляем автоматом на Groovy-Java. Как ЧПУ станку в домашней мастерской не превратиться в мульт героев «двое из ларца» - 8

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

Управляем автоматом на Groovy-Java. Как ЧПУ станку в домашней мастерской не превратиться в мульт героев «двое из ларца» - 9

От модели до G-code

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

Управляем автоматом на Groovy-Java. Как ЧПУ станку в домашней мастерской не превратиться в мульт героев «двое из ларца» - 10

Управляющая программа на этом слайде фрезерует треугольник на плоскости.

G21 говорит что единицы измерения в программе будут в миллиметрах.
M3 Включает шпиндель c заданной скоростью вращения S.
G0 перемещает рабочий инструмент на холостом ходу с линейной интерполяцией от текущей координаты к указанным в команде.
G1 также использует линейную интерполяцию, но это режим обработки, где F указывает скорость подачи.
М5 останавливает шпиндель.
M2 завершает программу

Ничего сложного в этом примере нет, но G-code на практике редко пишут вручную. Обычно создается модель в каком-либо виде и на ее основе создается управляющая программа.

Можно создать контуры в векторном редакторе, например в Inkskape, и с помощью opensource ПО GCodeTools превратить ее в g-code программу для станка. Этот подход удобен для дизайнеров.

Управляем автоматом на Groovy-Java. Как ЧПУ станку в домашней мастерской не превратиться в мульт героев «двое из ларца» - 11

Для тех кто привык работать в Blender, можно превратить 3D модель в 2.5D рельеф с помощью opensource BlenderCAM.
Управляем автоматом на Groovy-Java. Как ЧПУ станку в домашней мастерской не превратиться в мульт героев «двое из ларца» - 12

Для хобийного использования не доступны промышленные САПР системы, стоимостью десятки и сотни тысяч долларов. Но можно использовать opensource ПО FreeCAD.

Управляем автоматом на Groovy-Java. Как ЧПУ станку в домашней мастерской не превратиться в мульт героев «двое из ларца» - 13

Пока он не сравним по удобству и функциональным возможностям с дорогими CAD/CAM пакетами, но в несложных задачах его вполне может оказаться достаточно для проектирования.

Его форк HeeksCAD более проработан в части CAM и позволяет на основе модели/чертежа создавать управляющие программы.

Управляем автоматом на Groovy-Java. Как ЧПУ станку в домашней мастерской не превратиться в мульт героев «двое из ларца» - 14

Программное управление

Что непосредственно управляет координатным столом, фрезером, либо другим инструментом станка?

Управляем автоматом на Groovy-Java. Как ЧПУ станку в домашней мастерской не превратиться в мульт героев «двое из ларца» - 15

Это специализированные DSP контроллеры ЧПУ к которым можно подключить usb flash накопитель и станок. Либо это платы расширения к одноплатному компьютеру (Raspberry PI, BeagleBoard) для управления электроприводом и шпинделем. Либо это обычный персональный компьютер с портом LPT или платой расширения PCI/PCIe для сопряжения с электроникой станка.

Герой для этого доклада — это персональный компьютер. Потому что управлять станком, интерпретировать g-code можно с помощью opensource программы LinuxCNC.

Управляем автоматом на Groovy-Java. Как ЧПУ станку в домашней мастерской не превратиться в мульт героев «двое из ларца» - 16

ПО работает на real-time ядре linux. Для одноплатных компьютеров Raspberry PI, BeagleBoard Black используется его форк Machinekit для ARM в виде готового iso образа. Существует сборка Machinekit для одноплатного C.H.I.P. за 9$.

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

Управляем автоматом на Groovy-Java. Как ЧПУ станку в домашней мастерской не превратиться в мульт героев «двое из ларца» - 17

Часть его компонентов работают в real-time процессе, менее критичная часть работает в окружении с непрогнозируемыми задержками. Расширять внутреннюю логику реакции на события в LinuxCNC можно с помощью LD диаграмм и даже шелл скриптов или консольных программ.

Управляем автоматом из java и groovy

Мы попробуем вместо его GUI компонента управлять ЧПУ и передавать комманды интерпретатору через внешний API с помощью привычных нам технологий разработки ПО. Для всех кому интересена эта идея, вы можете найти PoC Apache Camel компонент и библиотеку для JVM camel-gcode [10] на 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 [11] CamelCNC.groovy

Управляем автоматом на Groovy-Java. Как ЧПУ станку в домашней мастерской не превратиться в мульт героев «двое из ларца» - 18

Управляем автоматом на Groovy-Java. Как ЧПУ станку в домашней мастерской не превратиться в мульт героев «двое из ларца» - 19

В этом примере приложение на Groovy подключает компоненты jetty, gcode, формирует маршрут на groovy DSL camel и загружает и запускает веб консоль для мониторинга HawtIo. При каждом запросе по http на HOST:9090/moveTo создается новая команда с перемещением в случайные координаты по осям X и Y и отправляется на исполнение LinuxCNC и станку и сгенерированная команда возвращается клиенту как http response. Веб консоль слушает по адресу HOST [12]:10090/hawtio

Достаточно сложные вещи легко сделать за счет магии Apache Camel, Groovy и HawtIo.

Прекрасное далеко...

Можем погадать о будущем.
Прослеживается тренд, что все что можно автоматизировать и экономически целесообразно так делать, автоматизируют. На днях была новость про Foxconn в Китае и 40000 автоматов на их производстве сократившие рабочие места на предприятии. Большую часть деталей автоматов они делают своими силами, как и управляющую электронику.

Хоть я и не Нострадамус, но сейчас становится понятно что из-за автоматизации в будущем исчезнут рабочие места. Также ясно что потребность в автоматизации производства будет только увеличиваться со временем. И люди, которые разбираются в этих технологиях, будут еще больше востребованы на рынке труда, но до определеного момента… А персональное производство на ЧПУ проникнет в каждую мастерскую.

Каким же именно будет будущее?

Пороботят или уничтожат роботы людей?

Управляем автоматом на Groovy-Java. Как ЧПУ станку в домашней мастерской не превратиться в мульт героев «двое из ларца» - 20

Или люди также будут контролировать роботов.

Управляем автоматом на Groovy-Java. Как ЧПУ станку в домашней мастерской не превратиться в мульт героев «двое из ларца» - 21

Все это зависит от нас сегодня!!!

Выводы

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

Автор: igor_suhorukov

Источник [22]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/java/207708

Ссылки в тексте:

[1] Предисловие: #a1

[2] Станки с ЧПУ: #a2

[3] От модели до G-code: #a3

[4] Программное управление: #a4

[5] Управляем автоматом из java и groovy: #a5

[6] Прекрасное далеко...: #a6

[7] Выводы: #a7

[8] на конференции «Разработка ПО» (SECR-2016): http://2016.secr.ru/program/submitted-presentations/use-groovy-java-to-automate-cnc

[9] belonesox: https://habrahabr.ru/users/belonesox/

[10] camel-gcode: https://github.com/igor-suhorukov/camel-gcode

[11] groovy-grape-aether-2.4.5.4.jar: https://repo1.maven.org/maven2/com/github/igor-suhorukov/groovy-grape-aether/2.4.5.4/groovy-grape-aether-2.4.5.4.jar

[12] HOST: http://HOST

[13] LinuxCNC: http://linuxcnc.org

[14] Machinekit: http://www.machinekit.io

[15] FreeCAD: http://www.freecadweb.org

[16] HeeksCAD: http://heeks.net

[17] GCodeTools: https://github.com/cnc-club/gcodetools

[18] LinuxCNC telnet протокол: http://linuxcnc.org/docs/html/man/man1/linuxcncrsh.1.html

[19] G-code в LinuxCNC: http://linuxcnc.org/docs/2.7/html/gcode/g-code.html

[20] Apache Camel: http://camel.apache.org/

[21] camel-gcode пример на Groovy: https://github.com/igor-suhorukov/camel-gcode/blob/master/CamelCNC.groovy

[22] Источник: https://habrahabr.ru/post/314462/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best