Ethernet Web Server зависает

Arduino85
Offline
Зарегистрирован: 31.10.2016

Всем добро!

Столкнулся с такой проблемой написал Web сервер все работает но иногда зависает (страница перестает отвечать) и что бы привести в чувство требуется перезагрузка нажатием Reset.

Вопрос такой какой должен быть запрос на проверку того что web сервер работает нормально (что бы в случае обратного я его программно перезагрузил)?

 

void loop() {

                     EthernetClient client = server.available();
              if (client) {

    //Код HTML страници   

                            }

}

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Проверяйте его ICMP пингом или попыткой открытия TCP-порта.

Arduino85
Offline
Зарегистрирован: 31.10.2016

А как это программно выглядит?

sadman41
Онлайн
Зарегистрирован: 19.10.2016

ping 192.168.1.1 например.

Arduino85
Offline
Зарегистрирован: 31.10.2016

Вы кажется не поняли у меня Web сервер залит в Arduino+Ethernet Shield. С удаленного ПК я и так то вижу что веб сервер перестал отвечать страница перестает обновлятся. У меня вопрос как сам Web сервер залитый в arduino может проверить что с ним все хорошо (В случае чего что бы он сам перезагрузился что бы я не ходил и не тыкал Reset)? Как перезагрузить программно я уже знаю мне нужно сформировать запрос if (что то????)

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Вот, наконец-то вы поняли, что нужны детали, а не просто: что-то виснет, хочу ребутнуть. 

На самом деле тут множество нюансов и вопрос нормального самомониторинга весьма непрост. Например - вы засыпаете за рулем. Есть ли способ исправить ситуацию своим самоконтролем? Т.е. сможете ли вы, уснув, понять, что спите и скомандовать себе "подъем"?

Вот и тут - надо разбираться что в системе виснет, а что остается работающим. Т.е. необходимо определить - вся система коматозит или шилд.

Arduino85
Offline
Зарегистрирован: 31.10.2016

Я делал так написал отсчет времени который в случае если не было get запросов больше 15 минут система перезагрузилась. При зависании это работает сервер перезагружается и заново начинает работать.

Только в этом есть один нюанс в случае если нет подключенных клиентов сервер все время перезагружается и теряет данные которые должен хранить.

void loop() {

  if (millis()-previousMillis>900000) {resetFunc();} //Перезагрузка в случае если не было подключений больше 15 минут

                     EthernetClient client = server.available();
              if (client) {

              previousMillis=millis(); //обновление точки отсчета

           //Код HTML страници   

                            }

}

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Интересная история. Подозреваю, что ваш шилд на W5100 (хотя их тоже несколько разновидностей совершенно различного качества) - у меня такие работают очень долго без ребута (один уже около года). 

Однако есть несколько потенциально проблемных мест, которые могут привести систему в состояние "как бы зависла". Но их поиск представляет собой замысловатый процесс.

Вы пинговали систему в то время, когда она "не отдает страничку" - есть реакция? Вместо обнуления точки отсчета по полкчению get можете проверять любой параметр, который получается напрямую с чипа - например IP-адрес, порт. Если они приходят по запросу - значит чип в целом работает, не висит.