Страница 1 из 5
Веб-интерфейс для LinuxCNC / Machinekit
Добавлено: 25 июн 2016, 20:36
MX_Master
Как веб-мастеру, мне бы хотелось иметь удалённый интерфейс в виде обычной 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 до полного отвращения
Re: Веб интерфейс для LinuxCNC
Добавлено: 19 июл 2016, 17:27
MX_Master
Немного разобрался в исходниках
LCNC и нашёл еще один полезный компонент -
halrmt. Работает он схоже c
linuxcncrsh и является сетевым проводником для
halcmd. Т.е. у нас есть полноценный доступ к
HAL, откуда я, кстати, и беру кол-во активных настроенных осей.
JOG панелька справа тоже смотрит какие оси активны и загружает нужный вид пульта. Интерфейс мультиязычный, пока что на 2 языка -
EN/RU.
И небольшое видео в продолжение темы. Управляется сие по
Wi-Fi.
https://youtu.be/piXI3bjmcow
Re: Веб интерфейс для LinuxCNC
Добавлено: 12 апр 2017, 18:10
LexaK
А можно поподробнее, как повторить такое?
Re: Веб интерфейс для LinuxCNC
Добавлено: 12 апр 2017, 19:43
MX_Master
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 
Они весьма сухие, со строгими запретами на порядок действий, местами просто не хватает разнообразия. Поэтому я придумал свой неизменный интерфейс, который мне удобно использовать на любом удалённом устройстве.
Re: Веб интерфейс для LinuxCNC
Добавлено: 12 апр 2017, 21:57
LexaK
Морда подключается через halrmt или linuxcncrsh?
Re: Веб интерфейс для LinuxCNC
Добавлено: 12 апр 2017, 23:08
MX_Master
Используются оба
Если есть интерес, могу снять пару свежих скринов и видео по функционалу на текущий момент
Re: Веб интерфейс для LinuxCNC
Добавлено: 15 апр 2017, 18:21
MX_Master
На текущий момент веб-морда выглядит так
https://www.youtube.com/watch?v=dM7nd-h83HE
слайды
Re: Веб интерфейс для LinuxCNC
Добавлено: 15 апр 2017, 18:28
PKM
Очень круто! Только просмотра не хватает, но вряд ли его получится сделать в веб версии?
Еще неплохо бы прикрутить вкладку для вебкамеры.
Re: Веб интерфейс для LinuxCNC
Добавлено: 15 апр 2017, 18:46
MX_Master
PKM писал(а):Очень круто! Только просмотра не хватает, но вряд ли его получится сделать в веб версии?
Еще неплохо бы прикрутить вкладку для вебкамеры.
3Д визуализация в вебе это обычное дело, немного трудоёмкое и ресурсоёмкое, но сделать можно. Например -
http://a360.co/2hSFwq6. С веб-камерами дел пока не имел, но раз уж она ВЕБ камера, значит, поток можно транслировать прямо на одной из вкладок.
Re: Веб интерфейс для LinuxCNC
Добавлено: 15 апр 2017, 20:19
PKM
Да, с веб-камерой сложностей возникнуть не должно.
А вот визуализация вряд ли будет, простой, да и не так уж она нужна...
Закинь это в лист рассылки EMC2, желательно с инструкцией по настройке, думаю примут на ура

А то сейчас только Machinekit хвастается удаленным управлением.
Re: Веб интерфейс для LinuxCNC
Добавлено: 15 апр 2017, 20:31
MX_Master
PKM писал(а):А то сейчас только Machinekit хвастается удаленным управлением.
Эта веб-морда и под Machinekit работать должна
Re: Веб интерфейс для LinuxCNC
Добавлено: 15 апр 2017, 20:46
PKM
Просто Machinekit меня не устраивает, хотя бы из-за отсутствия joints_axes. Зато они наворотили удаленных интерфейсов...
MX_Master писал(а):собрал из исходников веб-сервер lighttpd с поддержкой вебсокетов и PHP.
Как это сделать? Собрать из исходников я умею, а вот для вебсокетов и РНР что делать надо?
Re: Веб интерфейс для LinuxCNC
Добавлено: 15 апр 2017, 21:11
MX_Master
PKM писал(а):Собрать из исходников я умею, а вот для вебсокетов и РНР что делать надо?
по lighttpd и модулю веб-сокетов:
https://github.com/nori0428/mod_websocket
https://github.com/nori0428/mod_websock ... er/INSTALL
PHP прикручивается по любой инструкции с поиска
По идее надо было сразу выбрать лёгкий веб-сервер с поддержкой веб-сокетов, чтобы не заниматься сборками/разборками. Но я хорошо знал только lighttpd, поэтому и образовались такие тёрки со сборкой чужого модуля веб-сокетов с основным кодом сервера. Надо на днях посмотреть другие лёгкие сервера с поддержкой веб-сокетов из коробки..
Re: Веб интерфейс для LinuxCNC
Добавлено: 15 апр 2017, 21:19
PKM
MX_Master писал(а):Надо на днях посмотреть другие лёгкие сервера с поддержкой веб-сокетов из коробки..
Поддерживаю!
...и пожалуй подожду результатов

Re: Веб интерфейс для LinuxCNC
Добавлено: 16 апр 2017, 07:31
MX_Master
Попробуем nginx..
Re: Веб интерфейс для LinuxCNC
Добавлено: 16 апр 2017, 22:31
LexaK
У меня пока не получилось поставить этот плагин

Re: Веб интерфейс для LinuxCNC
Добавлено: 16 апр 2017, 22:52
MX_Master
Работаю над заменой lighttpd на nginx, чтоб не занимать юзера сборками. По ходу дела пишу короткую инструкцию. На неделе будет результат.
Re: Веб интерфейс для LinuxCNC
Добавлено: 17 апр 2017, 22:31
MX_Master
nginx оказался не из той оперы, куда стоит выдвигаться. Зато приятным бонусом поиска решений под
nginx, стали другие проекты, которые отлично подходят для удаленного управления
LinuxCNC
http://websocketd.com/ - превращает любую консольную программку в вебсокет сервер
http://www.tornadoweb.org/ - веб сервер на питоне с поддержкой вебсокетов (и не только)
Re: Веб интерфейс для LinuxCNC
Добавлено: 17 апр 2017, 22:32
PKM
Ждем, ждем

Re: Веб интерфейс для LinuxCNC
Добавлено: 22 апр 2017, 21:19
MX_Master
Сделал я своё домашнее задание на тему "как удаленно управлять 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")
Остаётся только связать
python скрипты в системе с вебсокетами, которые используются в веб разработке. Связным в этом деле выступает
http://websocketd.com/.
websocketd подымает в системе вебсокет сервер на указанном порту и через
stdin/stdout наш
python сприпт общается с
javascript в браузере. Пример
(python + bash - в системе, javascript - в браузере)
А по совместительству,
websocketd сыграет роль простого веб-сервера, который будет нам отдавать HTML страницу с веб интерфейсом
(и прочие статичные файлы из папки LinuxCNC) через браузер.
Лично для меня сложность будет только в изучении питона с нуля

А про
PHP в веб-интерфейсе надо забыть. Что, в общем-то, и правильно. Диск системы будет меньше загружен и, например, сэкономит место встраиваемым системам вроде
Beaglebone Black.
На следующей неделе соберу в кучу небольшой веб примерчик, доступный каждому желающему. Попробуем поуправлять работающим
LinuxCNC удалённо через браузер. Если способ окажется годным, переделаю под него текущий веб интерфейс.