Веб-интерфейс для LinuxCNC / Machinekit
- MX_Master
- Мастер
- Сообщения: 7467
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3089
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Веб-интерфейс для LinuxCNC / Machinekit
Как веб-мастеру, мне бы хотелось иметь удалённый интерфейс в виде обычной HTML страницы для полноценного управления LinuxCNC. И чтоб открыть страницу можно было с любого современного браузера на любом устройстве. Технологии это вполне позволяют. К тому же похожие проекты уже когда-то создавались. Делается это, стессна, для удаленного управления, например с ноута под Win и смартфона под android.
Для тестов взят стандартный LinuxCNC под Debian с LiveCD. Для управления LCNC по сети используется интерфейс linuxcncrsh. Для визуальной проверки - tklinuxcnc . Чтобы наш браузер прямо с HTML страницы мог общаться c linuxcncrsh воспользуемся веб-сокетами. Однако, напрямую с веб-сокетами linuxcncrsh не работает, поэтому нужен небольшой посредник с функцией веб-сервера. Для этих целей взят websockify, написанный на питоне. В его составе есть HTML telnet клиент , которым можно быстро проверить соединение. И немного пообщаться с LCNC, что я и сделал:
На скрине справа - удаленный рабочий стол под Win8, который показывает нам tklinuxcnc. Слева открыт браузер Opera со вкладкой нашего HTML telnet клиента. Эту HTML страницу нам одтал веб-сервер websockify, т.е. она скачана с ПК, где работает LCNC. В клиенте мы вводим приветствие и шлём команду get rel_act_pos (добыть текущие относительные координаты). И соответственно LCNC нам отвечает.
Далее планирую вместо html telnet клиента поставить мой, едва начатый, веб интерфейс от Smoothieware . И покрутить оси в режимах JOG, MDI.
Если кого-то заинтересовал сей эксперимент, пишите. А я пока продолжу тестирование непосредственно на станке.
Исходники веб-морды - закрыты, автор наелся этим open-source до полного отвращения
Для тестов взят стандартный LinuxCNC под Debian с LiveCD. Для управления LCNC по сети используется интерфейс linuxcncrsh. Для визуальной проверки - tklinuxcnc . Чтобы наш браузер прямо с HTML страницы мог общаться c linuxcncrsh воспользуемся веб-сокетами. Однако, напрямую с веб-сокетами linuxcncrsh не работает, поэтому нужен небольшой посредник с функцией веб-сервера. Для этих целей взят websockify, написанный на питоне. В его составе есть HTML telnet клиент , которым можно быстро проверить соединение. И немного пообщаться с LCNC, что я и сделал:
На скрине справа - удаленный рабочий стол под Win8, который показывает нам tklinuxcnc. Слева открыт браузер Opera со вкладкой нашего HTML telnet клиента. Эту HTML страницу нам одтал веб-сервер websockify, т.е. она скачана с ПК, где работает LCNC. В клиенте мы вводим приветствие и шлём команду get rel_act_pos (добыть текущие относительные координаты). И соответственно LCNC нам отвечает.
Далее планирую вместо html telnet клиента поставить мой, едва начатый, веб интерфейс от Smoothieware . И покрутить оси в режимах JOG, MDI.
Если кого-то заинтересовал сей эксперимент, пишите. А я пока продолжу тестирование непосредственно на станке.
Исходники веб-морды - закрыты, автор наелся этим open-source до полного отвращения
Последний раз редактировалось MX_Master 07 апр 2020, 10:14, всего редактировалось 4 раза.
- MX_Master
- Мастер
- Сообщения: 7467
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3089
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Веб интерфейс для LinuxCNC
Немного разобрался в исходниках LCNC и нашёл еще один полезный компонент - halrmt. Работает он схоже c linuxcncrsh и является сетевым проводником для halcmd. Т.е. у нас есть полноценный доступ к HAL, откуда я, кстати, и беру кол-во активных настроенных осей. JOG панелька справа тоже смотрит какие оси активны и загружает нужный вид пульта. Интерфейс мультиязычный, пока что на 2 языка - EN/RU.
И небольшое видео в продолжение темы. Управляется сие по Wi-Fi.
https://youtu.be/piXI3bjmcow
И небольшое видео в продолжение темы. Управляется сие по Wi-Fi.
https://youtu.be/piXI3bjmcow
-
- Опытный
- Сообщения: 113
- Зарегистрирован: 30 ноя 2013, 15:38
- Репутация: 63
- Настоящее имя: Алексей
- Откуда: Новороссийск
- Контактная информация:
Re: Веб интерфейс для LinuxCNC
А можно поподробнее, как повторить такое?
- MX_Master
- Мастер
- Сообщения: 7467
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3089
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Веб интерфейс для LinuxCNC
Руки никак не дойдут довести проект хотя б до точки с запятой. Поэтому детального мануала по запуску проекта в жись сейчас и нет. С последнего поста уже много воды утекло. Поясню как дела на текущий момент..LexaK писал(а):А можно поподробнее, как повторить такое?
Исходники веб-морды - https://github.com/MX-Master/LinuxCNCWebFace
На ПК с LinuxCNC вместо веб-сервера на python'e (websockify), я собрал из исходников веб-сервер lighttpd с поддержкой вебсокетов и PHP. В качестве корневой папки веб-сервера указана основная папка LinuxCNC (/home/{имя_юзера}/linuxcnc). В ней лежат все настройки LCNC, файлы УП, а также наши файлы веб-морды (ссылка выше). Такое тесное соседство даёт возможность просматривать файлы УП и настройки LCNC прямо в браузере. А с помощью PHP скриптов - редактировать и загружать новые файлы УП.
Цель веб-морды в том, чтобы отобрать у ПК c LinuxCNC корпус, монитор, клаву и мышь, оставив только материнскую плату и диск. Плата и диск комфортно размещаются в электроящике станка, из которого будет торчать только Ethernet порт. Этот порт используем для связи и удаленного управления. К примеру, подключив сие к Wi-Fi роутеру. Помимо веб-морды в арсенале управления у нас будут SSH, FTP и любой сервер удаленного рабочего стола. В таком подходе меня больше всего радует возможность управления станком с любого смартфона/планшета/ноутбука/ПК вне зависимости от установленных на них ОС.
Казалось бы, чем удаленный рабочий стол меня не устроил. Как раз устроил, но только как дополнение. Меня не совсем устроили интерфейсы управления LinuxCNC Они весьма сухие, со строгими запретами на порядок действий, местами просто не хватает разнообразия. Поэтому я придумал свой неизменный интерфейс, который мне удобно использовать на любом удалённом устройстве.
-
- Опытный
- Сообщения: 113
- Зарегистрирован: 30 ноя 2013, 15:38
- Репутация: 63
- Настоящее имя: Алексей
- Откуда: Новороссийск
- Контактная информация:
Re: Веб интерфейс для LinuxCNC
Морда подключается через halrmt или linuxcncrsh?
- MX_Master
- Мастер
- Сообщения: 7467
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3089
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Веб интерфейс для LinuxCNC
Используются оба
Если есть интерес, могу снять пару свежих скринов и видео по функционалу на текущий момент
Если есть интерес, могу снять пару свежих скринов и видео по функционалу на текущий момент
- PKM
- Почётный участник
- Сообщения: 4263
- Зарегистрирован: 31 мар 2011, 18:11
- Репутация: 705
- Настоящее имя: Андрей
- Откуда: Украина
- Контактная информация:
Re: Веб интерфейс для LinuxCNC
Очень круто! Только просмотра не хватает, но вряд ли его получится сделать в веб версии?
Еще неплохо бы прикрутить вкладку для вебкамеры.
Еще неплохо бы прикрутить вкладку для вебкамеры.
- MX_Master
- Мастер
- Сообщения: 7467
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3089
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Веб интерфейс для LinuxCNC
3Д визуализация в вебе это обычное дело, немного трудоёмкое и ресурсоёмкое, но сделать можно. Например - http://a360.co/2hSFwq6. С веб-камерами дел пока не имел, но раз уж она ВЕБ камера, значит, поток можно транслировать прямо на одной из вкладок.PKM писал(а):Очень круто! Только просмотра не хватает, но вряд ли его получится сделать в веб версии?
Еще неплохо бы прикрутить вкладку для вебкамеры.
- PKM
- Почётный участник
- Сообщения: 4263
- Зарегистрирован: 31 мар 2011, 18:11
- Репутация: 705
- Настоящее имя: Андрей
- Откуда: Украина
- Контактная информация:
Re: Веб интерфейс для LinuxCNC
Да, с веб-камерой сложностей возникнуть не должно.
А вот визуализация вряд ли будет, простой, да и не так уж она нужна...
Закинь это в лист рассылки EMC2, желательно с инструкцией по настройке, думаю примут на ура
А то сейчас только Machinekit хвастается удаленным управлением.
А вот визуализация вряд ли будет, простой, да и не так уж она нужна...
Закинь это в лист рассылки EMC2, желательно с инструкцией по настройке, думаю примут на ура
А то сейчас только Machinekit хвастается удаленным управлением.
- MX_Master
- Мастер
- Сообщения: 7467
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3089
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Веб интерфейс для LinuxCNC
Эта веб-морда и под Machinekit работать должнаPKM писал(а):А то сейчас только Machinekit хвастается удаленным управлением.
- PKM
- Почётный участник
- Сообщения: 4263
- Зарегистрирован: 31 мар 2011, 18:11
- Репутация: 705
- Настоящее имя: Андрей
- Откуда: Украина
- Контактная информация:
Re: Веб интерфейс для LinuxCNC
Просто Machinekit меня не устраивает, хотя бы из-за отсутствия joints_axes. Зато они наворотили удаленных интерфейсов...
Как это сделать? Собрать из исходников я умею, а вот для вебсокетов и РНР что делать надо?MX_Master писал(а):собрал из исходников веб-сервер lighttpd с поддержкой вебсокетов и PHP.
- MX_Master
- Мастер
- Сообщения: 7467
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3089
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Веб интерфейс для LinuxCNC
по lighttpd и модулю веб-сокетов:PKM писал(а):Собрать из исходников я умею, а вот для вебсокетов и РНР что делать надо?
https://github.com/nori0428/mod_websocket
https://github.com/nori0428/mod_websock ... er/INSTALL
PHP прикручивается по любой инструкции с поиска
По идее надо было сразу выбрать лёгкий веб-сервер с поддержкой веб-сокетов, чтобы не заниматься сборками/разборками. Но я хорошо знал только lighttpd, поэтому и образовались такие тёрки со сборкой чужого модуля веб-сокетов с основным кодом сервера. Надо на днях посмотреть другие лёгкие сервера с поддержкой веб-сокетов из коробки..
- PKM
- Почётный участник
- Сообщения: 4263
- Зарегистрирован: 31 мар 2011, 18:11
- Репутация: 705
- Настоящее имя: Андрей
- Откуда: Украина
- Контактная информация:
Re: Веб интерфейс для LinuxCNC
Поддерживаю!MX_Master писал(а):Надо на днях посмотреть другие лёгкие сервера с поддержкой веб-сокетов из коробки..
...и пожалуй подожду результатов
- MX_Master
- Мастер
- Сообщения: 7467
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3089
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Веб интерфейс для LinuxCNC
Попробуем nginx..
-
- Опытный
- Сообщения: 113
- Зарегистрирован: 30 ноя 2013, 15:38
- Репутация: 63
- Настоящее имя: Алексей
- Откуда: Новороссийск
- Контактная информация:
Re: Веб интерфейс для LinuxCNC
У меня пока не получилось поставить этот плагинMX_Master писал(а):по lighttpd и модулю веб-сокетов:
https://github.com/nori0428/mod_websocket
https://github.com/nori0428/mod_websock ... er/INSTALL
- MX_Master
- Мастер
- Сообщения: 7467
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3089
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Веб интерфейс для LinuxCNC
Работаю над заменой lighttpd на nginx, чтоб не занимать юзера сборками. По ходу дела пишу короткую инструкцию. На неделе будет результат.
- MX_Master
- Мастер
- Сообщения: 7467
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3089
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Веб интерфейс для LinuxCNC
nginx оказался не из той оперы, куда стоит выдвигаться. Зато приятным бонусом поиска решений под nginx, стали другие проекты, которые отлично подходят для удаленного управления LinuxCNC
http://websocketd.com/ - превращает любую консольную программку в вебсокет сервер
http://www.tornadoweb.org/ - веб сервер на питоне с поддержкой вебсокетов (и не только)
http://websocketd.com/ - превращает любую консольную программку в вебсокет сервер
http://www.tornadoweb.org/ - веб сервер на питоне с поддержкой вебсокетов (и не только)
- PKM
- Почётный участник
- Сообщения: 4263
- Зарегистрирован: 31 мар 2011, 18:11
- Репутация: 705
- Настоящее имя: Андрей
- Откуда: Украина
- Контактная информация:
Re: Веб интерфейс для LinuxCNC
Ждем, ждем
- MX_Master
- Мастер
- Сообщения: 7467
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3089
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Веб интерфейс для LinuxCNC
Сделал я своё домашнее задание на тему "как удаленно управлять LinuxCNC через веб, не углубляясь в установку и настройку веб-серверов". Возможно, этот новый способ станет основой для дальнейшей разработки.. Рассказываю..
Как известно, в системе c LinuxCNC всегда на борту есть какой-ньть Python. А в самом LinuxCNC мы имеем Python Interface (HAL тоже есть), через который любые python скрипты могут управлять LinuxCNC. Пример (python)
Остаётся только связать python скрипты в системе с вебсокетами, которые используются в веб разработке. Связным в этом деле выступает http://websocketd.com/. websocketd подымает в системе вебсокет сервер на указанном порту и через stdin/stdout наш python сприпт общается с javascript в браузере. Пример (python + bash - в системе, javascript - в браузере)
А по совместительству, websocketd сыграет роль простого веб-сервера, который будет нам отдавать HTML страницу с веб интерфейсом (и прочие статичные файлы из папки LinuxCNC) через браузер.
Лично для меня сложность будет только в изучении питона с нуля А про PHP в веб-интерфейсе надо забыть. Что, в общем-то, и правильно. Диск системы будет меньше загружен и, например, сэкономит место встраиваемым системам вроде Beaglebone Black.
На следующей неделе соберу в кучу небольшой веб примерчик, доступный каждому желающему. Попробуем поуправлять работающим LinuxCNC удалённо через браузер. Если способ окажется годным, переделаю под него текущий веб интерфейс.
Как известно, в системе c LinuxCNC всегда на борту есть какой-ньть Python. А в самом LinuxCNC мы имеем Python Interface (HAL тоже есть), через который любые python скрипты могут управлять LinuxCNC. Пример (python)
Код: Выделить всё
#!/usr/bin/env python
import linuxcnc
s = linuxcnc.stat()
c = linuxcnc.command()
def ok_for_mdi():
s.poll()
return not s.estop and s.enabled and s.homed and (s.interp_state == linuxcnc.INTERP_IDLE)
if ok_for_mdi():
c.mode(linuxcnc.MODE_MDI)
c.wait_complete() # wait until mode switch executed
c.mdi("G0 X10 Y20 Z30")
А по совместительству, websocketd сыграет роль простого веб-сервера, который будет нам отдавать HTML страницу с веб интерфейсом (и прочие статичные файлы из папки LinuxCNC) через браузер.
Лично для меня сложность будет только в изучении питона с нуля А про PHP в веб-интерфейсе надо забыть. Что, в общем-то, и правильно. Диск системы будет меньше загружен и, например, сэкономит место встраиваемым системам вроде Beaglebone Black.
На следующей неделе соберу в кучу небольшой веб примерчик, доступный каждому желающему. Попробуем поуправлять работающим LinuxCNC удалённо через браузер. Если способ окажется годным, переделаю под него текущий веб интерфейс.