Перейти к содержанию
    

SIM900 - не обнаруживает обрыв связи на удаленном сервере/клиенте

Здравствуйте.

 

У меня возникла такая проблема:

 

Используя встроенный стек модема SIM900, я подключаюсь к удаленному серверу (SIM900 клиент). У меня модем должен быть постоянно на связи с сервером. Общение с сервером происходит успешно, успешно открываются и закрываются соединения.

 

НО, если на удаленном сервере неожиданно оборвется связь, то он (удаленный сервер), не успевает сообщить об этом модему. И модем об этом узнает только при попытке отправить серверу сообщение - не придет SEND OK. После не прихода SEND OK, модем продолжает отвечать на команды (например для теста я шлю AT).

 

Но как, только я попытаюсь закрыть это соединение (допустим AT+CIPCLOSE=0), то модем намертво виснет. В принципе, это соединение можно закрыть командой AT+CIPSHUT, но тогда закрываются и все остальные соединения.

 

При работе модема (SIM900) как сервера и подключении к нему удаленных клиентов и последующего неожиданного обрыва связи с этими клиентами со стороны ПК (клиента), происходит тоже самое - соединение остается открытым, а при попытке закрыть его (AT+CIPCLOSE) модем виснет.

 

Может кто-то знает как с этим бороться? Заранее благодарен за любую помощь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для начала сообщите хоть версию фирмваре модуля....

 

SIMCOM_Ltd

SIMCOM_SIM900

Revision:1137B02SIM900M64_ST_ENHANCE

 

Я не обновлял прошивку. Обязательно ли использовать последнюю пршивку?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопросики:

1) как часто это происходит, есть статистика?

2) нет ли какой-то корреляции по времени этих повисаний, сажем с такого часа по такой и тп?

3) оценивали плотности мобильных телефонов в окружении сот(ы) на которые выходит модем?

GPRS имеет низкий приоритет, при большой плотности телефонов в окружении соты такое иногда наблюдается.

4) Каков увровень связи, как далеко от соты модем у вас?

5) Что-то про сам модем ( чей, есть ли схема) сообщить можете? Интересует как сделана цепь питания модема.

При недостаточном питании, такое может наблюдатся, когда опсос с 1800 переводит модем на 900Мег, а тот не тянет первый пакет синхры из-за недостаточности питания.

6) Оператор, Город?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вроде TCP может кипэлайвить соединение, а вот поддерживает ли это модем.

Detection of Half-Open (Dropped) Connections

Manipulate the TCP/IP keepalive packet settings. This is a highly controversial solution that has complex arguments for both pros and cons. It is discussed in depth in Stevens’ book, chapter 23. Essentially, this instructs the TCP/IP stack to send keepalive packets periodically on the application’s behalf.

 

Advantages. Once the code to set the keepalive parameters is working, there is nothing else that the application needs to change. The other solutions all have timer events that the application must respond to; this one is “set and forget”.

Disadvantages. RFC 1122, section 4.2.3.6 indicates that acknowledgements for TCP keepalives without data may not be transmitted reliably by routers; this may cause valid connections to be dropped. Furthermore, TCP/IP stacks are not required to support keepalives at all (and many embedded stacks do not), so this solution may not translate to other platforms.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поддерживает. Параметры keepalive в команде AT+CIPTKA.

Включаем, настраиваем, пользуемся....

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Точно, именно эта проблема - Half-Open Connection. Я пытался решить ее периодически посылая нули, для того чтобы определить, что соединение разорвано (если ответа на сообщение с нулем нет). Но, после того, как я обнаруживал, что это соединение разорвано - я пытался закрыть его по средствам команды AT+CIPCLOSE=N. И именно в этом случае на этой команде модем и вис.

 

По вашей подсказке посмотрел по keepalive time. SIM900, оказывается, поддерживает эту настройку. Команда AT+CIPTKA, позволяет его активировать и настроить. После чего модем сам определяет через этот timeout, что соединение разорвано (если оно разорвано - Half-Open Connection) и закрывает порт БЕЗ зависания, мне же остается только ловить, ответ от модема N,CLOSED.

 

Спасибо всем за советы.

Изменено пользователем Antonov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...