Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SIM900 - странное поведение +CIPCLOSE...
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Сотовая связь и ее приложения
rx3apf
Что-то я никак не соображу - запускаю TCP-соединение (+CIPSTART), разрываю, не дождавшись (+CIPCLOSE) - нормально. Дождался соединения, разрываю - тоже нормально. А вот когда сделал соединение, послал запрос http get, получил файл, пытаюсь сделать +CIPCLOSE - получаю "ERROR". И раз, и два (с интервалом в секунду) - все "ERROR". Потом уже получаю закрытие по инициативе сервера, и статус меняется на "TCP CLOSED". Но в тот момент, когда я даю +CIPCLOSE, статус-то был "CONNECT OK" ! И после получения "ERROR" он таковым оставался, и на второй попытке то же самое. Версия прошивки была 6, сейчас 9 - поведение одинаковое. Как-то раньше я на этот момент внимания не обращал (и вообще пользовался +CIPSHUT), а тут вдруг обнаружил. И как быть ? Ждать разрыва от сервера или все ж пытаться сделать +CIPCLOSE ? +CIPSHUT больше без крайней нужды пользоваться не хочу...

Короче, вопрос звучит так - почему при статусе "CONNECT OK" на команду +CIPCLOSE приходит "ERROR" ? При каких условиях это происходит и как с этим бороться ?
butthead2
А так?
AT+CIPCLOSE=1
rx3apf
Цитата(butthead2 @ Aug 21 2011, 00:17) *
А так?
AT+CIPCLOSE=1

Увы, изофаллически...
Варяг
У меня, обычно, даже если соединение не установлено (не было "коннект ОК"), at+cipclose=1 всегда дает положительное "ОК". Может перед ним слишком малая задержка (или вообще её нет) ?
rx3apf
Цитата(Варяг @ Aug 22 2011, 06:51) *
У меня, обычно, даже если соединение не установлено (не было "коннект ОК"), at+cipclose=1 всегда дает положительное "ОК". Может перед ним слишком малая задержка (или вообще её нет) ?

Если так (до установления соединения) - то у меня тоже нормально. И после установления соединения тоже нормально. Говорю же - описанная картина имеет место быть при установлении соединения и успешном приеме файла, когда сервер уже начинает закрывать соединение (предположительно). Но статус-то "CONNECT OK", поэтому такая реакция на +CIPCLOSE совершенно непонятна. Причем этот ответ приходит мгновенно, без какой-либо задержки, т.е. все локально.
CADiLO
Можно чуть точнее? Вы переключились для работы в HTTP?

Тогда скорее всего сначала закрыть сессию AT+HTTPTERM
rx3apf
Цитата(CADiLO @ Aug 22 2011, 10:33) *
Можно чуть точнее? Вы переключились для работы в HTTP?


Нет, говорю же - сессия запущена через +CIPSTART. Запрос "HTTP GET" я передаю сам, файл принимаю сам. Описанная картина происходит в тот момент, когда я принял файл и сервер, вероятно, уже начал закрывать соединение. Просто я не на 100% уверен, что сервер его закроет, и пытаюсь сделать это самостоятельно. И при статусе "CONNECT OK" получаю, тем не менее, ошибку на +CIPCLOSE. Я бы понял, если бы было "TCP CLOSING" - так ведь нет ! И даже после ошибки он тот же.
zebrox
Такая проблемка.

Непрозрачный режим.
К серверу подключаюсь с помоющью AT+CIPSTART=ТСР. Все хорошо, данные передаются.

Иногда после отправки AT+CIPCLOSE, юарт сима перестает реагировать на внешние команды.
Как от процессора, так и от копьютера.
И эхом их тоже не выдает.

При этом URC сим продолжает сообщать.

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

Кто-нибудь сталкивался с такой проблемой?
Revision:1137B08SIM900M64_ST_DTMF_JD_MMS

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

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

А вообще да, неприянтно, но жить можно.


Господа, поясню чуток.
CIPCLOSE(обычный) - команда с подтверждением. Т.е. модуль говорит серверу "закрываемся", сервер подтверждает закрытие, модуль подтверждает что принял подтверждение. Таймаут закладывайте 2 минуты. Если надо закрыть, чтобы модуль свой стек сбросил в начальное положение без участия сервера, используйте быстрое закрытие CIPCLOSE=1.

"CGATT=1" подавать просто на пустом месте нельзя. Сначала проверьте его текущее состояние и если не "1", то задавайте CGATT=1.

Небольшой тренинг вам в помощь - Нажмите для просмотра прикрепленного файла.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.