Название: [РЕШЕНО]Не срабатывает timeout QTimer Отправлено: Larry от Март 04, 2018, 19:57 Добрый день, форумчане.
Возник вопрос. К com-порту подключено устройство, которое опрашивается через определенный промежуток времени. Необходим механизм разъединения в случае, если устройство не отвечает. При отправке сообщения запускаю таймер, а при получении ответа отключаю. Кроме того, если не было ответа необходимо продублировать запрос (количество попыток настраивается). По умолчанию количество попыток 3 и встретился с тем, что таймер два раза отрабатывает, а третий уже нет и получается, что сообщения сыпятся в порт постоянно, а ответа нет (возможно выставили некорректно скорость, либо устройство зависло). слот обработки таймаута сделал следующим образом: Код: void CModbus::timeout() { m_timeout_timer->stop(); m_counter_request_error++; // количесто запросов без ответа m_receive_buffer.clear(); if(m_counter_request_error == m_request_count_repeat) { disconnectDevice(); } else { request(m_request_cur); } } Т.е. если запрос остался без ответа 3 раза, то отключаемся от порта. Иначе повторяем текущий запрос...почему таймер не отрабатывает третий раз? Где может подвисать? Спасибо. Название: Re: Не срабатывает timeout QTimer Отправлено: vic57 от Март 04, 2018, 21:37 Код: void CModbus::timeout() { m_timeout_timer->stop();//а где timer->start()? m_counter_request_error++; // количесто запросов без ответа //где обнуляется счетчик? m_receive_buffer.clear(); if(m_counter_request_error == m_request_count_repeat) { disconnectDevice(); } else { request(m_request_cur); } } Название: Re: [РЕШЕНО]Не срабатывает timeout QTimer Отправлено: Larry от Март 04, 2018, 21:42 старт был при отправке сообщения. Выяснил, что такие проблемы возникали только при подключенном таймере синхронизации (когда синхронизация работала, тогда и возникал такой вариант). Переписал логику синхронизации и все стабильно заработало.
Спасибо. |