|
|
  |
SIM900 - странное поведение +CIPCLOSE... |
|
|
|
Aug 20 2011, 20:00
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Что-то я никак не соображу - запускаю TCP-соединение (+CIPSTART), разрываю, не дождавшись (+CIPCLOSE) - нормально. Дождался соединения, разрываю - тоже нормально. А вот когда сделал соединение, послал запрос http get, получил файл, пытаюсь сделать +CIPCLOSE - получаю "ERROR". И раз, и два (с интервалом в секунду) - все "ERROR". Потом уже получаю закрытие по инициативе сервера, и статус меняется на "TCP CLOSED". Но в тот момент, когда я даю +CIPCLOSE, статус-то был "CONNECT OK" ! И после получения "ERROR" он таковым оставался, и на второй попытке то же самое. Версия прошивки была 6, сейчас 9 - поведение одинаковое. Как-то раньше я на этот момент внимания не обращал (и вообще пользовался +CIPSHUT), а тут вдруг обнаружил. И как быть ? Ждать разрыва от сервера или все ж пытаться сделать +CIPCLOSE ? +CIPSHUT больше без крайней нужды пользоваться не хочу...
Короче, вопрос звучит так - почему при статусе "CONNECT OK" на команду +CIPCLOSE приходит "ERROR" ? При каких условиях это происходит и как с этим бороться ?
|
|
|
|
|
Aug 22 2011, 06:20
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(Варяг @ Aug 22 2011, 06:51)  У меня, обычно, даже если соединение не установлено (не было "коннект ОК"), at+cipclose=1 всегда дает положительное "ОК". Может перед ним слишком малая задержка (или вообще её нет) ? Если так (до установления соединения) - то у меня тоже нормально. И после установления соединения тоже нормально. Говорю же - описанная картина имеет место быть при установлении соединения и успешном приеме файла, когда сервер уже начинает закрывать соединение (предположительно). Но статус-то "CONNECT OK", поэтому такая реакция на +CIPCLOSE совершенно непонятна. Причем этот ответ приходит мгновенно, без какой-либо задержки, т.е. все локально.
|
|
|
|
|
Aug 22 2011, 06:43
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(CADiLO @ Aug 22 2011, 10:33)  Можно чуть точнее? Вы переключились для работы в HTTP? Нет, говорю же - сессия запущена через +CIPSTART. Запрос "HTTP GET" я передаю сам, файл принимаю сам. Описанная картина происходит в тот момент, когда я принял файл и сервер, вероятно, уже начал закрывать соединение. Просто я не на 100% уверен, что сервер его закроет, и пытаюсь сделать это самостоятельно. И при статусе "CONNECT OK" получаю, тем не менее, ошибку на +CIPCLOSE. Я бы понял, если бы было "TCP CLOSING" - так ведь нет ! И даже после ошибки он тот же.
|
|
|
|
|
Jan 9 2013, 09:54
|
Частый гость
 
Группа: Участник
Сообщений: 121
Регистрация: 17-04-09
Пользователь №: 47 838

|
Для себя выход нашел в передаче AT+CIPCLOSE=1, + таймер, 200 сек, на получение ОК либо ERROR от сима, если он истекает, перезапускаю сим. Еще заметил, что иногда на CGATT=1, сим проглатывает ответ, на какое-то время, и выдает его только после отправки следущей команды (в моем случае, это начало процедуры отключения, т.к. не получен ОК на CGATT)
А вообще да, неприянтно, но жить можно.
|
|
|
|
|
Jan 10 2013, 08:52
|

Евгений
  
Группа: Участник
Сообщений: 341
Регистрация: 13-10-11
Пользователь №: 67 706

|
Цитата(zebrox @ Jan 9 2013, 13:54)  Для себя выход нашел в передаче AT+CIPCLOSE=1, + таймер, 200 сек, на получение ОК либо ERROR от сима, если он истекает, перезапускаю сим. Еще заметил, что иногда на CGATT=1, сим проглатывает ответ, на какое-то время, и выдает его только после отправки следущей команды (в моем случае, это начало процедуры отключения, т.к. не получен ОК на CGATT)
А вообще да, неприянтно, но жить можно. Господа, поясню чуток. CIPCLOSE(обычный) - команда с подтверждением. Т.е. модуль говорит серверу "закрываемся", сервер подтверждает закрытие, модуль подтверждает что принял подтверждение. Таймаут закладывайте 2 минуты. Если надо закрыть, чтобы модуль свой стек сбросил в начальное положение без участия сервера, используйте быстрое закрытие CIPCLOSE=1. "CGATT=1" подавать просто на пустом месте нельзя. Сначала проверьте его текущее состояние и если не "1", то задавайте CGATT=1. Небольшой тренинг вам в помощь -
SIM900_Training_TCPIP.ppt ( 1.09 мегабайт )
Кол-во скачиваний: 1636.
Сообщение отредактировал Цырен. - Jan 10 2013, 08:52
--------------------
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|