Управляємо автоматом на Groovy/Java. Як ЧПУ верстата в домашній майстерні не перетворитися в мульт героїв "двоє зі скриньки"

Поговоримо на теми праці і роботи, верстатів, автоматизації на java/groovy до прогнозів про майбутнє людства.

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


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

Зміст
  1. Передмова
  2. Верстати з ЧПУ
  3. Від моделі до G-code
  4. Програмне управління
  5. Управляємо автоматом з java і groovy
  6. Прекрасне далеко...
  7. Висновки
За мотивами мого міні-доповіді на конференції «Розробка ПЗ» (SECR-2016). А також досвіду як апаратної, так і програмної частини.

Відеозапис доповіді...Величезне дякую Стасу Фоміну belonesox за професійну відеозапис і оперативний монтаж!!!


Передмова
Звернення до слухачів.Доброго ранку, шановні слухачі. Всім дякую що прокинулися і прийшли вранці вихідного дня. Я радий вас бачити в залі! На доповідь у нас з вами не так багато часу, тому секції запитань-відповідей в залі не буде, але можете підійти і задати питання після доповіді. На останньому слайді є адреса електронної пошти з яким я також відповім.

Мені дуже важлива ваша думка про доповіді. Найближчим часом планую провести митап, де практично можна буде спробувати зробити те, про що я зараз буду розповідати теоретично і покерувати ЧПУ. Це буде відкрите/безкоштовне захід і хто буде в Москві, може приєднатися. Я сподіваюся найближчим часом знайду приміщення, підготую приклади і на 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.5 D рельєф з допомогою 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 автоматів на їх виробництві скоротили робочі місця на підприємстві. Більшу частину деталей автоматів вони роблять своїми силами, як і керуючу електроніку.

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

Яким же саме буде майбутнє?

Пороботят або знищать роботи людей?



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



Все це залежить від нас сьогодні!!!

Висновки
Багато речей які ми робимо вручну і таку повторювану роботу часто можна автоматизувати. У цьому випадку починати треба зі створення моделі. Наступний крок — це перетворення цієї моделі в керуючу програму для автомата. Ці команди буде виконувати певний механізм з ЧПУ і все у процесі виробництва є сенс автоматизувати потрібно автоматизувати. Використовуючи в тому числі технології машинного зору і датчики зворотного зв'язку. Точно не варто бігати з флешкою між комп'ютером і верстатом, потрібно передавати команди по мережі. Всю роботу нехай робить автомат. Але щоб ЧПУ не перетворитися у двох із скриньки, вам все одно доведеться вчитися технологіям і розбиратися в деталях процесу. Інакше прийдеться ділитися ресурсами з тим хто розуміє і отримувати в результаті не завжди те що хотіли спочатку.

Посилання

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.