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

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.

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

Сообщение MX_Master » 25 июн 2016, 20:36

Решил создать новый топик в продолжение темы про "панель оператора на удалённом компе" и своего поста.


ЗАДАЧА
---------------------------------
Как веб-мастеру, мне бы хотелось иметь удалённый интерфейс в виде обычной HTML страницы для полноценного управления LinuxCNC. И чтоб открыть страницу можно было с любого современного браузера на любом устройстве. Технологии это вполне позволяют. К тому же похожие проекты уже когда-то создавались. Делается это, стессна, для удаленного управления, например с ноута по Win и смартфона под android.


ТЕСТИРОВАНИЕ
--------------------------------
Для тестов взят стандартный LinuxCNC под Debian с LiveCD. Для управления LCNC по сети используется интерфейс linuxcncrsh. Для визуальной проверки - tklinuxcnc. Чтобы наш браузер прямо с HTML страницы мог общаться c linuxcncrsh воспользуемся веб-сокетами. Однако, напрямую с веб-сокетами linuxcncrsh не работает, поэтому нужен небольшой посредник с функцией веб-сервера. Для этих целей взят websockify, написанный на питоне. В его составе есть HTML telnet клиент, которым можно быстро проверить соедиенение. И немного пообщаться с LCNC, что я и сделал:

Веб интерфейс для LinuxCNC 2016-06-25_221204.png

На скрине справа - удаленный рабочий стол под Win8, который показывает нам tklinuxcnc. Слева открыт браузер Opera со вкладкой нашего HTML telnet клиента. Эту HTML страницу нам одтал веб-сервер websockify, т.е. она скачана с ПК, где работает LCNC. В клиенте мы вводим приветствие и шлём команду get rel_act_pos (добыть текущие относительные координаты). И соответственно LCNC нам отвечает.

Далее планирую вместо html telnet клиента поставить мой, едва начатый, веб интерфейс от Smoothieware. И покрутить оси в режимах JOG, MDI.

Если кого-то заинтересовал сей эксперимент, пишите. А я пока продолжу тестирование непосредственно на станке.
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 1686
Зарегистрирован: 27 июн 2015, 19:45
Откуда: недалеко от Aftaev City
Репутация: 761
Медальки:
Настоящее имя: Михаил

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

Сообщение MX_Master » 19 июл 2016, 17:27

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

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

https://youtu.be/piXI3bjmcow
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 1686
Зарегистрирован: 27 июн 2015, 19:45
Откуда: недалеко от Aftaev City
Репутация: 761
Медальки:
Настоящее имя: Михаил

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

Сообщение LexaK » 12 апр 2017, 18:10

А можно поподробнее, как повторить такое?
LexaK
Опытный
 
Сообщения: 112
Зарегистрирован: 30 ноя 2013, 15:38
Откуда: Новороссийск
Репутация: 60
Медальки:
Настоящее имя: Алексей

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

Сообщение MX_Master » 12 апр 2017, 19:43

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: Они весьма сухие, со строгими запретами на порядок действий, местами просто не хватает разнообразия. Поэтому я придумал свой неизменный интерфейс, который мне удобно использовать на любом удалённом устройстве.
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 1686
Зарегистрирован: 27 июн 2015, 19:45
Откуда: недалеко от Aftaev City
Репутация: 761
Медальки:
Настоящее имя: Михаил

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

Сообщение LexaK » 12 апр 2017, 21:57

Морда подключается через halrmt или linuxcncrsh?
LexaK
Опытный
 
Сообщения: 112
Зарегистрирован: 30 ноя 2013, 15:38
Откуда: Новороссийск
Репутация: 60
Медальки:
Настоящее имя: Алексей

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

Сообщение MX_Master » 12 апр 2017, 23:08

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

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

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

Сообщение MX_Master » 15 апр 2017, 18:21

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

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

слайды

Веб интерфейс для LinuxCNC 2017-04-15_203547.png
Веб интерфейс для LinuxCNC 2017-04-15_203709.png
Веб интерфейс для LinuxCNC 2017-04-15_203745.png
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 1686
Зарегистрирован: 27 июн 2015, 19:45
Откуда: недалеко от Aftaev City
Репутация: 761
Медальки:
Настоящее имя: Михаил

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

Сообщение PKM » 15 апр 2017, 18:28

Очень круто! Только просмотра не хватает, но вряд ли его получится сделать в веб версии?
Еще неплохо бы прикрутить вкладку для вебкамеры.
Аватара пользователя
PKM
Почётный участник
Почётный участник
 
Сообщения: 4022
Зарегистрирован: 31 мар 2011, 18:11
Откуда: Украина
Репутация: 582
Медальки:
Настоящее имя: Андрей

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

Сообщение MX_Master » 15 апр 2017, 18:46

PKM писал(а):Очень круто! Только просмотра не хватает, но вряд ли его получится сделать в веб версии?
Еще неплохо бы прикрутить вкладку для вебкамеры.

3Д визуализация в вебе это обычное дело, немного трудоёмкое и ресурсоёмкое, но сделать можно. Например - http://a360.co/2hSFwq6. С веб-камерами дел пока не имел, но раз уж она ВЕБ камера, значит, поток можно транслировать прямо на одной из вкладок.
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 1686
Зарегистрирован: 27 июн 2015, 19:45
Откуда: недалеко от Aftaev City
Репутация: 761
Медальки:
Настоящее имя: Михаил

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

Сообщение PKM » 15 апр 2017, 20:19

Да, с веб-камерой сложностей возникнуть не должно.
А вот визуализация вряд ли будет, простой, да и не так уж она нужна...
Закинь это в лист рассылки EMC2, желательно с инструкцией по настройке, думаю примут на ура :)
А то сейчас только Machinekit хвастается удаленным управлением.
Аватара пользователя
PKM
Почётный участник
Почётный участник
 
Сообщения: 4022
Зарегистрирован: 31 мар 2011, 18:11
Откуда: Украина
Репутация: 582
Медальки:
Настоящее имя: Андрей

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

Сообщение MX_Master » 15 апр 2017, 20:31

PKM писал(а):А то сейчас только Machinekit хвастается удаленным управлением.

Эта веб-морда и под Machinekit работать должна
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 1686
Зарегистрирован: 27 июн 2015, 19:45
Откуда: недалеко от Aftaev City
Репутация: 761
Медальки:
Настоящее имя: Михаил

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

Сообщение PKM » 15 апр 2017, 20:46

Просто Machinekit меня не устраивает, хотя бы из-за отсутствия joints_axes. Зато они наворотили удаленных интерфейсов...

MX_Master писал(а):собрал из исходников веб-сервер lighttpd с поддержкой вебсокетов и PHP.

Как это сделать? Собрать из исходников я умею, а вот для вебсокетов и РНР что делать надо?
Аватара пользователя
PKM
Почётный участник
Почётный участник
 
Сообщения: 4022
Зарегистрирован: 31 мар 2011, 18:11
Откуда: Украина
Репутация: 582
Медальки:
Настоящее имя: Андрей

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

Сообщение MX_Master » 15 апр 2017, 21:11

PKM писал(а):Собрать из исходников я умею, а вот для вебсокетов и РНР что делать надо?

по lighttpd и модулю веб-сокетов:
https://github.com/nori0428/mod_websocket
https://github.com/nori0428/mod_websock ... er/INSTALL

PHP прикручивается по любой инструкции с поиска

По идее надо было сразу выбрать лёгкий веб-сервер с поддержкой веб-сокетов, чтобы не заниматься сборками/разборками. Но я хорошо знал только lighttpd, поэтому и образовались такие тёрки со сборкой чужого модуля веб-сокетов с основным кодом сервера. Надо на днях посмотреть другие лёгкие сервера с поддержкой веб-сокетов из коробки..
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 1686
Зарегистрирован: 27 июн 2015, 19:45
Откуда: недалеко от Aftaev City
Репутация: 761
Медальки:
Настоящее имя: Михаил

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

Сообщение PKM » 15 апр 2017, 21:19

MX_Master писал(а):Надо на днях посмотреть другие лёгкие сервера с поддержкой веб-сокетов из коробки..

Поддерживаю!
...и пожалуй подожду результатов :D
Аватара пользователя
PKM
Почётный участник
Почётный участник
 
Сообщения: 4022
Зарегистрирован: 31 мар 2011, 18:11
Откуда: Украина
Репутация: 582
Медальки:
Настоящее имя: Андрей

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

Сообщение MX_Master » 16 апр 2017, 07:31

Попробуем nginx..
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 1686
Зарегистрирован: 27 июн 2015, 19:45
Откуда: недалеко от Aftaev City
Репутация: 761
Медальки:
Настоящее имя: Михаил

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

Сообщение LexaK » 16 апр 2017, 22:31

MX_Master писал(а):по lighttpd и модулю веб-сокетов:
https://github.com/nori0428/mod_websocket
https://github.com/nori0428/mod_websock ... er/INSTALL

У меня пока не получилось поставить этот плагин :(
LexaK
Опытный
 
Сообщения: 112
Зарегистрирован: 30 ноя 2013, 15:38
Откуда: Новороссийск
Репутация: 60
Медальки:
Настоящее имя: Алексей

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

Сообщение MX_Master » 16 апр 2017, 22:52

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

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

Сообщение MX_Master » 17 апр 2017, 22:31

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

http://websocketd.com/ - превращает любую консольную программку в вебсокет сервер
http://www.tornadoweb.org/ - веб сервер на питоне с поддержкой вебсокетов (и не только)
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 1686
Зарегистрирован: 27 июн 2015, 19:45
Откуда: недалеко от Aftaev City
Репутация: 761
Медальки:
Настоящее имя: Михаил

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

Сообщение PKM » 17 апр 2017, 22:32

Ждем, ждем :)
Аватара пользователя
PKM
Почётный участник
Почётный участник
 
Сообщения: 4022
Зарегистрирован: 31 мар 2011, 18:11
Откуда: Украина
Репутация: 582
Медальки:
Настоящее имя: Андрей

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

Сообщение MX_Master » 22 апр 2017, 21:19

Сделал я своё домашнее задание на тему "как удаленно управлять 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 - в браузере)

Веб интерфейс для LinuxCNC 2017-04-22_235704.jpg

А по совместительству, websocketd сыграет роль простого веб-сервера, который будет нам отдавать HTML страницу с веб интерфейсом (и прочие статичные файлы из папки LinuxCNC) через браузер.

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

На следующей неделе соберу в кучу небольшой веб примерчик, доступный каждому желающему. Попробуем поуправлять работающим LinuxCNC удалённо через браузер. Если способ окажется годным, переделаю под него текущий веб интерфейс.
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 1686
Зарегистрирован: 27 июн 2015, 19:45
Откуда: недалеко от Aftaev City
Репутация: 761
Медальки:
Настоящее имя: Михаил

След.

Вернуться в LinuxCNC

Кто сейчас на конференции

Зарегистрированные пользователи: aftaev, alex1816, Alexey74, AlexKota19, Argon-11, artem44ik, Bing [Bot], bordyn, Darxton, Edifier, evgenyjp, frezeryga, frolyar, Google [Bot], Lafayette, Malyarka74, mikehv, Mr. Mass, nik1, NOKS, Nonstopich, Piligrym, pm_dev, PonyBlanco, Rezus666, sberbuh, skytronix, sn0wflake, systemvel, tronhejm, vadim76, verser, wenji, Yahoo [Bot], Yandex [bot], Карпуха, Краус

Поделиться

Reputation System ©'