реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Web-интерфейс в железке, How does it write in code?
Tanker
сообщение Oct 1 2015, 09:23
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 30-06-07
Пользователь №: 28 806



Здравствуйте, Большие Дядьки!

Прогаю я железки с 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 выдавать страницу порциями и смотреть некие ключевые слова, при встрече которых, надо подставлять на их место значения параметров (которые хотим отразить на странице). Т.е. гоняется туда-сюда море текстовой информации, и требуется постоянный парсинг текста при ответе.

В общем, посвятите как пишутся серьёзные веб-интерфейсы для железок. У меня дома роутер Зухель, вот у него это сделано красиво... вот как они это делают? в плане программинга.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Oct 1 2015, 09:31
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



ajax
Go to the top of the page
 
+Quote Post
Tanker
сообщение Oct 1 2015, 09:36
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 30-06-07
Пользователь №: 28 806



Цитата(Огурцов @ Oct 1 2015, 12:31) *
ajax

если не затруднит, приведите пожалуйста, короткий пример, как отправить сформированный в массиве пакет (не обязательно текстовый) на заданный IP-адрес в заданный IP-порт
Go to the top of the page
 
+Quote Post
Эдди
сообщение Oct 1 2015, 09:47
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



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

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

Сообщение отредактировал Эдди - Oct 1 2015, 09:49
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Oct 1 2015, 10:01
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Код
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);
    }


Сообщение отредактировал Огурцов - Oct 1 2015, 10:01
Go to the top of the page
 
+Quote Post
Tanker
сообщение Oct 1 2015, 10:06
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 30-06-07
Пользователь №: 28 806



Цитата(Эдди @ Oct 1 2015, 12:47) *
Браузеры не умеют работать с бинарными массивами, надо использовать кодирование base64 (я так делал realtime видеотрансляцию на вебсокетах). А тоже поначалу обрадовался: думал, с вебсокетами можно будет работать в браузере точно так же, как в консольке с обычными сокетами...
В общем, либо передавать данные в текстовом виде, либо в base64, либо отказаться от использования браузера.

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

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

А если для отправки запроса на данные, отправлять с помощью PUT в железку файл а в файле уже бинарные данные (которые легко декодировать). А железка готовит ответ, потом я у неё делаю GET файла с ответом, и железка отвечает тоже файлом с бинарным содержимым, который уже распарсивает на контролы JS
?
(к сообщетсву)прошу понять, технологий много, не хотелось бы долго топтаться на месте пробую то одну то другую.
Go to the top of the page
 
+Quote Post
Эдди
сообщение Oct 1 2015, 10:33
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



Цитата(Tanker @ Oct 1 2015, 13:06) *
Есть ещё работающие только в Chrome решения.

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

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

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

Почему вам не хочется сериализовать данные? Все-таки, браузер нельзя научить работать с бинарными данными, иначе получится, что вы голой задницей во весь мир торчите!
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Oct 1 2015, 10:35
Сообщение #8


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



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


Попробуйте технологию websockets совместно с MQTT клиентом в броузере. Сейчас это самый модный тренд.
Кстати оба компонента есть в бесплатной RTOS MQX от Freescale.
Go to the top of the page
 
+Quote Post
arhiv6
сообщение Oct 1 2015, 12:41
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 633
Регистрация: 21-05-10
Из: Томск
Пользователь №: 57 423



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

Брать тут.


--------------------
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st June 2025 - 09:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.0146 секунд с 7
ELECTRONIX ©2004-2016