Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Web-интерфейс в железке
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Интерфейсы
Tanker
Здравствуйте, Большие Дядьки!

Прогаю я железки с Ethernet-ами. Сейчас я общаюсь с ними по TCP/IP, на порт 512 шлю пакеты с запросами в формате протокола MODBUS TCP/IP, получаю ответы, всё чётко обменивается, на нашем спец-софте вижу значения парметров в железках в виде осциллограмм и могу их менять. Железки на LPC2378 в качестве стека uIP.

Но хочется по-взрослому! открываю Браузер, вбиваю IP железки, и на странице в Браузере смотрю параметры/редактирую их.
Мне решение задачи видится так:
1) Из Железки по НТТР (порт 80) загружает страницу в Браузер (содержимое html страницы железку не интересует, она просто отрабатывает GET по HTTP)
2) После загрузки страницы в Браузер:
2.1) js со страницы шлёт железке понятные ей запросы по TCP/IP на заданный порт (пакеты MODBUS TCP/IP на которые железка уже умеет отвечать)
2.2) железки отвечает (опять в виде понятного ей формата MODBUS TCP/IP)
2.3) js на странице расшифровывает полученные пакеты их и раскладывает значения по контролам на странице
3) если из контрола я меняю какой либо параметр, то опять таки js отправляет MODBUS TCP/IP пакет в мою железку и в следующий цыкл обмена, значение в контроле обновляется

Я посмотрел пример HTTP из комплекта uIP, там подход другой и очень затратный, надо при ответе на GET выдавать страницу порциями и смотреть некие ключевые слова, при встрече которых, надо подставлять на их место значения параметров (которые хотим отразить на странице). Т.е. гоняется туда-сюда море текстовой информации, и требуется постоянный парсинг текста при ответе.

В общем, посвятите как пишутся серьёзные веб-интерфейсы для железок. У меня дома роутер Зухель, вот у него это сделано красиво... вот как они это делают? в плане программинга.
Огурцов
ajax
Tanker
Цитата(Огурцов @ Oct 1 2015, 12:31) *
ajax

если не затруднит, приведите пожалуйста, короткий пример, как отправить сформированный в массиве пакет (не обязательно текстовый) на заданный IP-адрес в заданный IP-порт
Эдди
Браузеры не умеют работать с бинарными массивами, надо использовать кодирование base64 (я так делал realtime видеотрансляцию на вебсокетах). А тоже поначалу обрадовался: думал, с вебсокетами можно будет работать в браузере точно так же, как в консольке с обычными сокетами...
В общем, либо передавать данные в текстовом виде, либо в base64, либо отказаться от использования браузера.

P.S. вот так у меня отправляются/принимаются команды для управления шаговиками через вебсокеты.
Огурцов
Код
function stat_httprequest_ready_handler()
    {
        if (m_stat_httprequest.readyState != 4)
            return;
        clearTimeout(m_timeout_timer_id);
        document.getElementById("stat").innerText = m_stat_httprequest.responseText;
        set_properties(m_stat_httprequest.responseText);
        setTimeout(start_notifier, 1000);
    }

    function start_notifier()
    {
        if (m_stat_httprequest == null)
            m_stat_httprequest = new_httprequest(stat_httprequest_ready_handler);
        m_stat_httprequest.open("GET", "/stat.cgi", true);
        m_stat_httprequest.send(null);
        m_timeout_timer_id = setTimeout(timeout_handler, 10000);
    }
Tanker
Цитата(Эдди @ Oct 1 2015, 12:47) *
Браузеры не умеют работать с бинарными массивами, надо использовать кодирование base64 (я так делал realtime видеотрансляцию на вебсокетах). А тоже поначалу обрадовался: думал, с вебсокетами можно будет работать в браузере точно так же, как в консольке с обычными сокетами...
В общем, либо передавать данные в текстовом виде, либо в base64, либо отказаться от использования браузера.

P.S. вот так у меня отправляются/принимаются команды для управления шаговиками через вебсокеты.

посмотрел буду разбираться.
Есть ещё работающие только в Chrome решения.

А если для отправки запроса на данные, отправлять с помощью PUT в железку файл а в файле уже бинарные данные (которые легко декодировать). А железка готовит ответ, потом я у неё делаю GET файла с ответом, и железка отвечает тоже файлом с бинарным содержимым, который уже распарсивает на контролы JS
?
(к сообщетсву)прошу понять, технологий много, не хотелось бы долго топтаться на месте пробую то одну то другую.
Эдди
Цитата(Tanker @ Oct 1 2015, 13:06) *
Есть ещё работающие только в Chrome решения.

Эта дрянь ничуть не лучше сдохшего флеша. Если уж хотите что-то делать, старайтесь стандартов придерживаться: безо всяких быдлофлешей, жокварей и прочих жабкоапплетов.
Цитата
А если для отправки запроса на данные, отправлять с помощью PUT в железку файл а в файле уже бинарные данные (которые легко декодировать).

Можно, но каждый раз придется жамкать "submit" (по соображениям безопасности)
Цитата
А железка готовит ответ, потом я у неё делаю GET файла с ответом, и железка отвечает тоже файлом с бинарным содержимым, который уже распарсивает на контролы JS

146%, что не взлетит.

Почему вам не хочется сериализовать данные? Все-таки, браузер нельзя научить работать с бинарными данными, иначе получится, что вы голой задницей во весь мир торчите!
AlexandrY
Цитата(Tanker @ Oct 1 2015, 13:06) *
(к сообщетсву)прошу понять, технологий много, не хотелось бы долго топтаться на месте пробую то одну то другую.


Попробуйте технологию websockets совместно с MQTT клиентом в броузере. Сейчас это самый модный тренд.
Кстати оба компонента есть в бесплатной RTOS MQX от Freescale.
arhiv6
Возможно вам поможет это (+ остальные статьи автора гляньте). Разумеется, т.к. оно для Arduino, использовать в серьёзном проекте не будете, но зато можно посмотреть, как там реализовано это:
Цитата
полноценный веб-сервер, динамически обновляющий контент без остановки сервера, поддерживающий в полном объёме HTML5, CSS3, JavaScript, Ajax, Processig, THREE.js, сторонние библиотеки и т.д.

Брать тут.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.