Официальный сайт компании Arduino по адресу arduino.cc
Ethernet Web Server зависает
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пт, 16/03/2018 - 08:48
Всем добро!
Столкнулся с такой проблемой написал Web сервер все работает но иногда зависает (страница перестает отвечать) и что бы привести в чувство требуется перезагрузка нажатием Reset.
Вопрос такой какой должен быть запрос на проверку того что web сервер работает нормально (что бы в случае обратного я его программно перезагрузил)?
void loop() {
EthernetClient client = server.available();
if (client) {
//Код HTML страници
}
}
Проверяйте его ICMP пингом или попыткой открытия TCP-порта.
А как это программно выглядит?
ping 192.168.1.1 например.
Вы кажется не поняли у меня Web сервер залит в Arduino+Ethernet Shield. С удаленного ПК я и так то вижу что веб сервер перестал отвечать страница перестает обновлятся. У меня вопрос как сам Web сервер залитый в arduino может проверить что с ним все хорошо (В случае чего что бы он сам перезагрузился что бы я не ходил и не тыкал Reset)? Как перезагрузить программно я уже знаю мне нужно сформировать запрос if (что то????)
Вот, наконец-то вы поняли, что нужны детали, а не просто: что-то виснет, хочу ребутнуть.
На самом деле тут множество нюансов и вопрос нормального самомониторинга весьма непрост. Например - вы засыпаете за рулем. Есть ли способ исправить ситуацию своим самоконтролем? Т.е. сможете ли вы, уснув, понять, что спите и скомандовать себе "подъем"?
Вот и тут - надо разбираться что в системе виснет, а что остается работающим. Т.е. необходимо определить - вся система коматозит или шилд.
Я делал так написал отсчет времени который в случае если не было get запросов больше 15 минут система перезагрузилась. При зависании это работает сервер перезагружается и заново начинает работать.
Только в этом есть один нюанс в случае если нет подключенных клиентов сервер все время перезагружается и теряет данные которые должен хранить.
void loop() {
if (millis()-previousMillis>900000) {resetFunc();} //Перезагрузка в случае если не было подключений больше 15 минут
EthernetClient client = server.available();
if (client) {
previousMillis=millis(); //обновление точки отсчета
//Код HTML страници
}
}
Интересная история. Подозреваю, что ваш шилд на W5100 (хотя их тоже несколько разновидностей совершенно различного качества) - у меня такие работают очень долго без ребута (один уже около года).
Однако есть несколько потенциально проблемных мест, которые могут привести систему в состояние "как бы зависла". Но их поиск представляет собой замысловатый процесс.
Вы пинговали систему в то время, когда она "не отдает страничку" - есть реакция? Вместо обнуления точки отсчета по полкчению get можете проверять любой параметр, который получается напрямую с чипа - например IP-адрес, порт. Если они приходят по запросу - значит чип в целом работает, не висит.