Arduino Mega Server
Модератор: Alex
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Проблема заключается в том, что мне абсолютно непонятна причина заморозки. Саморазморозка говорит о том, что зависания нет и все части системы могут функционировать. Но не функционирут. Что им мешает? Непонятно.
Мониторинг сети говорит о том, что яваскрипт шлёт запросы. 3D индикаторы говорят, что нет ответа от Ардуины (кстати, вы поняли что это не просто «шарики», а индикаторы прохождения алгоритма по функциям?).
Serial монитор говорит о том, что запросы Ардуина получает. Исходя из этой логики затык находится где-то между сервером и XML ответами Ардуины. Но там просто негде заткнуться...
Интуиция мне подсказывает, что проблема может быть связана с таймингами и «неуспеванием» обработки лавины запросов от яваскрипта.
Для начала нужно попробовать снизить частоту запросов с одной секунды до, например, пяти.
Мониторинг сети говорит о том, что яваскрипт шлёт запросы. 3D индикаторы говорят, что нет ответа от Ардуины (кстати, вы поняли что это не просто «шарики», а индикаторы прохождения алгоритма по функциям?).
Serial монитор говорит о том, что запросы Ардуина получает. Исходя из этой логики затык находится где-то между сервером и XML ответами Ардуины. Но там просто негде заткнуться...
Интуиция мне подсказывает, что проблема может быть связана с таймингами и «неуспеванием» обработки лавины запросов от яваскрипта.
Для начала нужно попробовать снизить частоту запросов с одной секунды до, например, пяти.
-
- Сообщения: 130
- Зарегистрирован: Пн окт 28, 2013 5:06 pm
- Откуда: Молдова
- Благодарил (а): 11 раз
- Поблагодарили: 10 раз
Re: Arduino Mega Server
Выявил такую ситуацию что функции реле перестают отвечать как только делаю запрос в браузере AMS, я имею ввиду когда я захожу на сервер AMS, как только я выполняю запрос в браузере http://192.168.0.101 (это у меня сервер AMS) функции реле сразу перестают отвечать, пока я не перезапущу AMS.
UPD: Значит если даже не заходить на AMS то сама функции сама перестаёт отвечать примерно через 10-15 минут.
UPD: Методом Маркеров на данный момент выявил что в модуле Server а именно в функции serverWorks проблема с заморозкой после которой перестают приниматься команды если я захожу через браузер на АМС
UPD: Значит если даже не заходить на AMS то сама функции сама перестаёт отвечать примерно через 10-15 минут.
UPD: Методом Маркеров на данный момент выявил что в модуле Server а именно в функции serverWorks проблема с заморозкой после которой перестают приниматься команды если я захожу через браузер на АМС
serverWorksПоказать
Код: Выделить всё
void serverWorks() {
EthernetClient sclient = server.available(); // try to get client
if (sclient) { // got client?
boolean currentLineIsBlank = true;
while (sclient.connected()) {
if (sclient.available()) { // client data available to read
char c = sclient.read(); // read 1 byte (character) from client
/* limit the size of the stored received HTTP request
buffer first part of HTTP request in HTTP_req array (string)
leave last element in array as 0 to null terminate string (REQ_BUF_SZ - 1) */
if (req_index < (REQ_BUF_SIZE - 1)) {
HTTP_req[req_index] = c; // save HTTP request character
req_index++;
}
// make request
if (request.length() < MAX_LEN_REQUEST) {
request += (c);
}
/* last line of client request is blank and ends with \n
respond to client only after last line received */
if (c == '\n' && currentLineIsBlank) {
if (!StrContains(HTTP_req, "ajax_inputs")) {
for (int iq = 0; iq < REQ_BUF_SIZE; iq++) {
HTTP_req_temp[iq] = HTTP_req[iq];
}
req_index_temp = req_index;
}
// parse request
parseRequest(sclient);
// parse network commands
parseCommands(sclient);
Serial.println("MARKER===============================>");
// send web page to client
if (webFile) {
while(webFile.available()) {
sclient.write(webFile.read());
}
webFile.close();
}
// display received HTTP request on serial port
Serial.println(HTTP_req);
// Reset buffer index and all buffer elements to 0
req_index = 0;
StrClear(HTTP_req, REQ_BUF_SIZE);
break;
}
// every line of text received from the client ends with \r\n
if (c == '\n') {
/* last character on line of received text starting new line with next character read */
currentLineIsBlank = true;
} else if (c != '\r') {
// a text character was received from client
currentLineIsBlank = false;
}
} // if (client.available())
} // while (client.connected())
delay(1); // give the web browser time to receive the data
sclient.stop(); // close the connection
} // if (client)
} // serverWorks()
Server: Raspberry Pi 3 B+
OS: Rasbian
OS: Rasbian
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Отличная работа. Ещё бы человек двадцать таких как вы и мы бы за неделю успешно завершили весь проект.Методом Маркеров на данный момент выявил что в модуле Server а именно в функции serverWorks проблема с заморозкой после которой перестают приниматься команды если я захожу через браузер на АМС

Тут ещё дело в том, что я не тестировал работу сетевых команд в составе АМС, этот код работал в предыдущей инкарнации системы (без проблем). Я столкнулся именно с заморозкой Ajax обмена.
На данный момент под подозрение попадает код сервера, наверное мне нужно брать в руки маркеры


-
- Сообщения: 130
- Зарегистрирован: Пн окт 28, 2013 5:06 pm
- Откуда: Молдова
- Благодарил (а): 11 раз
- Поблагодарили: 10 раз
Re: Arduino Mega Server
На данный момент я переписываю функции парсинга а точнее пытаюсь разобратса как добавить знак ? при парсинге, тоесть что бы система парсила два знака & и ?.Alex писал(а):Отличная работа. Ещё бы человек двадцать таких как вы и мы бы за неделю успешно завершили весь проект.Методом Маркеров на данный момент выявил что в модуле Server а именно в функции serverWorks проблема с заморозкой после которой перестают приниматься команды если я захожу через браузер на АМС
Тут ещё дело в том, что я не тестировал работу сетевых команд в составе АМС, этот код работал в предыдущей инкарнации системы (без проблем). Я столкнулся именно с заморозкой Ajax обмена.
На данный момент под подозрение попадает код сервера, наверное мне нужно брать в руки маркерыи начинать думать. Чем я в ближайшее время и постараюсь заняться.
Но если что я новичок в кодинге Arduino так что пока не сильно могу помочь, я всю жизнь писал программы на Delphi ))
Server: Raspberry Pi 3 B+
OS: Rasbian
OS: Rasbian
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Я вообще не программист, а так, скорее сочувствующий.Но если что я новичок в кодинге Arduino так что пока не сильно могу помочь, я всю жизнь писал программы на Delphi ))

-
- Сообщения: 130
- Зарегистрирован: Пн окт 28, 2013 5:06 pm
- Откуда: Молдова
- Благодарил (а): 11 раз
- Поблагодарили: 10 раз
Re: Arduino Mega Server
Блин перепробовал кучу вариантов, расставил вагон маркеров изменил тонну кода и никакого результата.
У меня мозг уже через ушные отверстия лезет.
Завтра буду разбиратся.
Тестировал шас так:
Без захода в браузер даю команду на включение Реле:
все работает.
Проста захожу через Хром на АМС.
Сразу перестаёт работать реле.
Дальше захожу на:
Там есть кнопочка включить D5, а на D5 я поставил ещё одно реле и когда я тыкаю оно работает,
а реле которое
попрежнему не отвечает.
Отсюда вывод ????????????????????????
Всё я на сегодня больше не осилю и килобайта кода.
Если у тебя что-то получится пиши.
UPD: И Концу дня меня осенило. Нашёл в чем проблема но долга расписывать а мне бежать пора, завтра расскажу и думаю устраню проблему.
У меня мозг уже через ушные отверстия лезет.
Завтра буду разбиратся.
Тестировал шас так:
Без захода в браузер даю команду на включение Реле:
Код: Выделить всё
http://192.168.0.101/&rele4=1
Проста захожу через Хром на АМС.
Код: Выделить всё
http://192.168.0.101/
Дальше захожу на:
Код: Выделить всё
http://192.168.0.101/sample2.htm
а реле которое
Код: Выделить всё
http://192.168.0.101/&rele4=1
Отсюда вывод ????????????????????????
Всё я на сегодня больше не осилю и килобайта кода.
Если у тебя что-то получится пиши.
UPD: И Концу дня меня осенило. Нашёл в чем проблема но долга расписывать а мне бежать пора, завтра расскажу и думаю устраню проблему.
Server: Raspberry Pi 3 B+
OS: Rasbian
OS: Rasbian
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Создал многофункциональные индикаторы устройств. Цвет показывает состояние устройства (включено, выключено, режим готовности (тот, который сосёт энергию из сети и ваши деньги из кошелька). Текущее показание потребляемой мощности и пяти-сегментный индикатор режима работы устройства. Вы задаёте пять уровней потребляемой мощности и сразу видите в каком режиме работает устройство.
Для annakin
Результаты тестов:
Отключил модуль коммандс. Результат: всё равно заморозился. Вывод: модуль коммандс не при чём.
После заморозки перезалил скетч. Результат: не разморозился. Вывод: скетч не при чём.
В браузере нажал кнопку «обновить». Результат: всё заработало. Вывод дело в яваскрипте. Хотя сетевой монитор показывает, что запросы идут (во время заморозки) , а ответов от Ардуины нет.
Ваши соображения, коллега?
Для annakin
Результаты тестов:
Отключил модуль коммандс. Результат: всё равно заморозился. Вывод: модуль коммандс не при чём.
После заморозки перезалил скетч. Результат: не разморозился. Вывод: скетч не при чём.
В браузере нажал кнопку «обновить». Результат: всё заработало. Вывод дело в яваскрипте. Хотя сетевой монитор показывает, что запросы идут (во время заморозки) , а ответов от Ардуины нет.
Ваши соображения, коллега?
- Вложения
-
- индикаторы устройств
- devs.png (12.02 КБ) 17030 просмотров
-
- Сообщения: 130
- Зарегистрирован: Пн окт 28, 2013 5:06 pm
- Откуда: Молдова
- Благодарил (а): 11 раз
- Поблагодарили: 10 раз
Re: Arduino Mega Server
Ну если ты считаешь что проблема в Яве то тут я не смогу ничем помочь ибо я Яве я не силён.
Но вот что я вчера выяснил с помощью маркеров:
В модуле server_commands функция parseCommands есть два параметра я их выделил жирным.
А Вот ниже лог монитора после захода на АМС через Хром
Отсюда вывод: после входа на АМС через браузер перестаёт обрабатываться функция parseCommands
Но вот что я вчера выяснил с помощью маркеров:
В модуле server_commands функция parseCommands есть два параметра я их выделил жирным.
СпойлерПоказать
Код: Выделить всё
void parseCommands(EthernetClient cl) {
int posBegin;
int posEnd;
int posParam;
if (request.indexOf("&") >= 0) {
posBegin = request.indexOf("&") + 1;
posEnd = request.indexOf("HTTP");
if (request.indexOf("=") >= 0) {
posParam = request.indexOf("=");
command = request.substring(posBegin, posParam);
parameter = request.substring(posParam + 1, posEnd - 1);
} else {
command = request.substring(posBegin, posEnd - 1);
//parameter = "";
}
[b] Serial.print("command: "); Serial.println(command);
Serial.print("parameter: "); Serial.println(parameter);[/b]
setKey();
setNightLed();
setColorLed();
// erase request
request = "";
} //if (url.indexOf("?") >= 0)
} // parseCommands
Вот лог Монитора до захода на АМС через Браузер.Показать
Код: Выделить всё
command: rele4
parameter: .
GET /&rele4=. HTTP/1.1
User-Agent: Opera/9.80 (Windows NT
command: rele4
parameter: 1
GET /&rele4=1 HTTP/1.1
User-Agent: Opera/9.80 (Windows NT
После захода на АМС Реле перестаёт работать.Показать
Код: Выделить всё
GET /&rele4=. HTTP/1.1
User-Agent: Opera/9.80 (Windows NT
2015-07-14 11:49:44 >>> 159
(duration 20 sec)
GET /&rele4=1 HTTP/1.1
User-Agent: Opera/9.80 (Windows NT
Отсюда вывод: после входа на АМС через браузер перестаёт обрабатываться функция parseCommands
Server: Raspberry Pi 3 B+
OS: Rasbian
OS: Rasbian
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Вполне возможно. Но мы говорим о разных вещах. Я борюсь с замораживанием Ajax обмена. И я ВООБЩЕ ОТКЛЮЧАЛ модуль коммандс, а проблема никуда не делась. А в чём причина глюка я не знаю. Буду копать дальше...Отсюда вывод: после входа на АМС через браузер перестаёт обрабатываться функция parseCommands
- Рейтинг: 1.16%
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Анатомия проблемы:
По неизвестной причине клиент вдруг становится false
void serverWorks() {
EthernetClient sclient = server.available(); // try to get client
if (sclient) { // got client?
Браузерные вызовы продолжают идти и копятся в каком-то буфере примерно 10 минут, затем выстреливаются за 2 минуты и получают ответы. Затем опять клиент становится false и так по кругу.
Перезаливка скетча никак не влияет на проблему, перезагрузка страницы приводит всё в порядок до следующего сбоя.
У кого-нибудь есть мысли по этому поводу?
Проблема на стороне браузера?
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Анатомия проблемы:
По неизвестной причине клиент вдруг становится false
void serverWorks() {
EthernetClient sclient = server.available(); // try to get client
if (sclient) { // got client?
Браузерные вызовы продолжают идти и копятся в каком-то буфере примерно 10 минут, затем выстреливаются за 2 минуты и получают ответы. Затем опять клиент становится false и так по кругу.
Перезаливка скетча никак не влияет на проблему, перезагрузка страницы приводит всё в порядок до следующего сбоя.
У кого-нибудь есть мысли по этому поводу?
Проблема на стороне браузера?
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!