Веб-интерфейс для LinuxCNC / Machinekit

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
MX_Master
Мастер
Сообщения: 7465
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3088
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Веб-интерфейс для LinuxCNC / Machinekit

Сообщение 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 до полного отвращения
Последний раз редактировалось MX_Master 07 апр 2020, 10:14, всего редактировалось 4 раза.
Аватара пользователя
MX_Master
Мастер
Сообщения: 7465
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3088
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: Веб интерфейс для LinuxCNC

Сообщение MX_Master »

Немного разобрался в исходниках LCNC и нашёл еще один полезный компонент - halrmt. Работает он схоже c linuxcncrsh и является сетевым проводником для halcmd. Т.е. у нас есть полноценный доступ к HAL, откуда я, кстати, и беру кол-во активных настроенных осей. JOG панелька справа тоже смотрит какие оси активны и загружает нужный вид пульта. Интерфейс мультиязычный, пока что на 2 языка - EN/RU.

И небольшое видео в продолжение темы. Управляется сие по Wi-Fi.

https://youtu.be/piXI3bjmcow
LexaK
Опытный
Сообщения: 113
Зарегистрирован: 30 ноя 2013, 15:38
Репутация: 63
Настоящее имя: Алексей
Откуда: Новороссийск
Контактная информация:

Re: Веб интерфейс для LinuxCNC

Сообщение LexaK »

А можно поподробнее, как повторить такое?
Аватара пользователя
MX_Master
Мастер
Сообщения: 7465
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3088
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: Веб интерфейс для LinuxCNC

Сообщение 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 :hehehe: Они весьма сухие, со строгими запретами на порядок действий, местами просто не хватает разнообразия. Поэтому я придумал свой неизменный интерфейс, который мне удобно использовать на любом удалённом устройстве.
LexaK
Опытный
Сообщения: 113
Зарегистрирован: 30 ноя 2013, 15:38
Репутация: 63
Настоящее имя: Алексей
Откуда: Новороссийск
Контактная информация:

Re: Веб интерфейс для LinuxCNC

Сообщение LexaK »

Морда подключается через halrmt или linuxcncrsh?
Аватара пользователя
MX_Master
Мастер
Сообщения: 7465
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3088
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: Веб интерфейс для LinuxCNC

Сообщение MX_Master »

Используются оба

Если есть интерес, могу снять пару свежих скринов и видео по функционалу на текущий момент
Аватара пользователя
MX_Master
Мастер
Сообщения: 7465
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3088
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: Веб интерфейс для LinuxCNC

Сообщение MX_Master »

На текущий момент веб-морда выглядит так

https://www.youtube.com/watch?v=dM7nd-h83HE

слайды
2017-04-15_203547.png (9287 просмотров) <a class='original' href='./download/file.php?id=108960&sid=7282cb6bcb45f9d7517e9e7d414cb6a5&mode=view' target=_blank>Загрузить оригинал (89.33 КБ)</a>
2017-04-15_203709.png (9287 просмотров) <a class='original' href='./download/file.php?id=108961&sid=7282cb6bcb45f9d7517e9e7d414cb6a5&mode=view' target=_blank>Загрузить оригинал (84.78 КБ)</a>
2017-04-15_203745.png (9287 просмотров) <a class='original' href='./download/file.php?id=108962&sid=7282cb6bcb45f9d7517e9e7d414cb6a5&mode=view' target=_blank>Загрузить оригинал (56.26 КБ)</a>
Аватара пользователя
PKM
Почётный участник
Почётный участник
Сообщения: 4263
Зарегистрирован: 31 мар 2011, 18:11
Репутация: 705
Настоящее имя: Андрей
Откуда: Украина
Контактная информация:

Re: Веб интерфейс для LinuxCNC

Сообщение PKM »

Очень круто! Только просмотра не хватает, но вряд ли его получится сделать в веб версии?
Еще неплохо бы прикрутить вкладку для вебкамеры.
Аватара пользователя
MX_Master
Мастер
Сообщения: 7465
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3088
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: Веб интерфейс для LinuxCNC

Сообщение MX_Master »

PKM писал(а):Очень круто! Только просмотра не хватает, но вряд ли его получится сделать в веб версии?
Еще неплохо бы прикрутить вкладку для вебкамеры.
3Д визуализация в вебе это обычное дело, немного трудоёмкое и ресурсоёмкое, но сделать можно. Например - http://a360.co/2hSFwq6. С веб-камерами дел пока не имел, но раз уж она ВЕБ камера, значит, поток можно транслировать прямо на одной из вкладок.
Аватара пользователя
PKM
Почётный участник
Почётный участник
Сообщения: 4263
Зарегистрирован: 31 мар 2011, 18:11
Репутация: 705
Настоящее имя: Андрей
Откуда: Украина
Контактная информация:

Re: Веб интерфейс для LinuxCNC

Сообщение PKM »

Да, с веб-камерой сложностей возникнуть не должно.
А вот визуализация вряд ли будет, простой, да и не так уж она нужна...
Закинь это в лист рассылки EMC2, желательно с инструкцией по настройке, думаю примут на ура :)
А то сейчас только Machinekit хвастается удаленным управлением.
Аватара пользователя
MX_Master
Мастер
Сообщения: 7465
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3088
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: Веб интерфейс для LinuxCNC

Сообщение MX_Master »

PKM писал(а):А то сейчас только Machinekit хвастается удаленным управлением.
Эта веб-морда и под Machinekit работать должна
Аватара пользователя
PKM
Почётный участник
Почётный участник
Сообщения: 4263
Зарегистрирован: 31 мар 2011, 18:11
Репутация: 705
Настоящее имя: Андрей
Откуда: Украина
Контактная информация:

Re: Веб интерфейс для LinuxCNC

Сообщение PKM »

Просто Machinekit меня не устраивает, хотя бы из-за отсутствия joints_axes. Зато они наворотили удаленных интерфейсов...
MX_Master писал(а):собрал из исходников веб-сервер lighttpd с поддержкой вебсокетов и PHP.
Как это сделать? Собрать из исходников я умею, а вот для вебсокетов и РНР что делать надо?
Аватара пользователя
MX_Master
Мастер
Сообщения: 7465
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3088
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: Веб интерфейс для LinuxCNC

Сообщение MX_Master »

PKM писал(а):Собрать из исходников я умею, а вот для вебсокетов и РНР что делать надо?
по lighttpd и модулю веб-сокетов:
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

Сообщение PKM »

MX_Master писал(а):Надо на днях посмотреть другие лёгкие сервера с поддержкой веб-сокетов из коробки..
Поддерживаю!
...и пожалуй подожду результатов :D
Аватара пользователя
MX_Master
Мастер
Сообщения: 7465
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3088
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: Веб интерфейс для LinuxCNC

Сообщение MX_Master »

Попробуем nginx..
LexaK
Опытный
Сообщения: 113
Зарегистрирован: 30 ноя 2013, 15:38
Репутация: 63
Настоящее имя: Алексей
Откуда: Новороссийск
Контактная информация:

Re: Веб интерфейс для LinuxCNC

Сообщение LexaK »

MX_Master писал(а):по lighttpd и модулю веб-сокетов:
https://github.com/nori0428/mod_websocket
https://github.com/nori0428/mod_websock ... er/INSTALL
У меня пока не получилось поставить этот плагин :(
Аватара пользователя
MX_Master
Мастер
Сообщения: 7465
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3088
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: Веб интерфейс для LinuxCNC

Сообщение MX_Master »

Работаю над заменой lighttpd на nginx, чтоб не занимать юзера сборками. По ходу дела пишу короткую инструкцию. На неделе будет результат.
Аватара пользователя
MX_Master
Мастер
Сообщения: 7465
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3088
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: Веб интерфейс для LinuxCNC

Сообщение MX_Master »

nginx оказался не из той оперы, куда стоит выдвигаться. Зато приятным бонусом поиска решений под nginx, стали другие проекты, которые отлично подходят для удаленного управления LinuxCNC

http://websocketd.com/ - превращает любую консольную программку в вебсокет сервер
http://www.tornadoweb.org/ - веб сервер на питоне с поддержкой вебсокетов (и не только)
Аватара пользователя
PKM
Почётный участник
Почётный участник
Сообщения: 4263
Зарегистрирован: 31 мар 2011, 18:11
Репутация: 705
Настоящее имя: Андрей
Откуда: Украина
Контактная информация:

Re: Веб интерфейс для LinuxCNC

Сообщение PKM »

Ждем, ждем :)
Аватара пользователя
MX_Master
Мастер
Сообщения: 7465
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3088
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: Веб интерфейс для LinuxCNC

Сообщение 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 - в браузере)
2017-04-22_235704.jpg (9087 просмотров) <a class='original' href='./download/file.php?id=109587&sid=7282cb6bcb45f9d7517e9e7d414cb6a5&mode=view' target=_blank>Загрузить оригинал (97.28 КБ)</a>
А по совместительству, websocketd сыграет роль простого веб-сервера, который будет нам отдавать HTML страницу с веб интерфейсом (и прочие статичные файлы из папки LinuxCNC) через браузер.

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

На следующей неделе соберу в кучу небольшой веб примерчик, доступный каждому желающему. Попробуем поуправлять работающим LinuxCNC удалённо через браузер. Если способ окажется годным, переделаю под него текущий веб интерфейс.
Ответить

Вернуться в «LinuxCNC»