bvn123
Oct 25 2015, 17:55
Здравствуйте,
управляемый микроконтроллером модуль SIM900D передает данные на ftp-сервер,
для инициализации выполняется более десятка AT-команд.
на большинство команд ответ "OK" приходит быстро (от модуля),
три ответа - с задержкой в нескорлько секунд (команды-время ожидания ответа в конце)
иногда ответ с первого раза не приходит.
Подскажите, где посмотреть рекомендации
- по выбору времени ожидания ответа на отдельные AT-команды (используемые команды ниже)
- по выбору числа повторов при отсутствии ответа в течение выбранного времени
- к какой команде возвращаться при сообщении "ERROR" или лучше дернуть PowerKey SIM900 и повторить всю последовательность
- связано ли время ожидания отваета с параметром, получаемым при запросе качества сигнала (может, например, при параметре ниже 18 не стоит и передавать на ftp)
- если ответ на передачу положительный, велика ли вероятность ошибки в созданном на ftp-сервере файле (интересуют не цифры, а практический опыт, к примеру, передавали с параметром качества сигнала 10, были ошибки, индицировались ли ошибки в ответе, полученном от SIM900)
Или каждый все это нарабатывает опытным путем?
Ниже последовательность интересующих команд,
после большинства ответ приходит быстро, 2-секундного ожидания хватает с избытком,
для 3-х команд с более длительным ожиданием ответа (вероятно, от оператора и от ftp-сервера) время указано:
AT+SAPBR=3,1,"CONTYPE","GPRS" OK
AT+SAPBR=3,1,"APN","<адрес точки доступа оператора связи>" OK
AT+SAPBR=1,1 >>>>>>>>>>>>длительное ожидание, 4с
OK
AT+FTPSERV="<имя сервера>" OK
AT+FTPUN="<имя пользователя>" OK
AT+FTPPW="<пароль>" OK
AT+FTPPUTNAME="u.bin" OK
AT+FTPPUTPATH="/data/" OK
AT+FTPTYPE="I" OK
AT+FTPPUTOPT="APPE" OK
AT+FTPPUT=1 OK >>>>>>>>>>>>длительное ожидание, 6с
+FTPPUT:1,1,1300
AT+FTPPUT=2,9
+FTPPUT:2,9
<передать 9 байт>
OK +FTPPUT:1,1,1300
AT+FTPPUT=2,25
+FTPPUT:2,25
<передать 25 байт>
OK +FTPPUT:1,1,1300
AT+FTPPUT=2,0 >>>>>>>>>>>>длительное ожидание, 6с
+FTPPUT:1,0
Спасибо
turnon
Oct 29 2015, 16:03
Использую по умолчанию время ожидания ответа - 1 сек. Для критичных команд повтор 3 раза с паузой между повторами 1 сек.
Понять какие и где нужны таймауты помогает длительный лог за 1-2 месяца реальной работы с разными операторами в разных условиях.
Цитата(bvn123 @ Oct 25 2015, 20:55)

- если ответ на передачу положительный, велика ли вероятность ошибки в созданном на ftp-сервере файле (интересуют не цифры, а практический опыт, к примеру, передавали с параметром качества сигнала 10, были ошибки, индицировались ли ошибки в ответе, полученном от SIM900)
Для такого сценария на сервер передаю файл с расширением .tmp, а по окончании передачи получаю CRC созданного файла на сервере и локального. И только если равны, файл переименовывается из .tmp в изначальное расширение.
Если файл недокачан - перед началом докачки получаю с сервера CRC части файла и сравниваю с частью локального. Если не равны - удаляю на сервере файл и закачиваю на сервер с нуля.
bvn123
Oct 29 2015, 17:00
turnon, спасибо,
очень интересные решения
пока не разыскал AT-команды для получения CRC файла с FTP-сервера,
есть такая?
turnon
Oct 30 2015, 07:32
Цитата(bvn123 @ Oct 29 2015, 20:00)

пока не разыскал AT-команды для получения CRC файла с FTP-сервера,
есть такая?
Таких команд нет, получаю CRC HTTP запросом к скрипту на php.
kikprog
Nov 2 2015, 06:51
Извините за нубский вопрос.
Я так понимаю общение с GSM модулем идет по UART, зачем делать паузы между командами, нельзя ждать ответа, и в случае ОК отправлять следующую, а в случае ошибки парсить её или повторять запрос? Зачем нужны именно жестко прописанные тайминги?
Спасибо.
mantech
Nov 2 2015, 07:24
Цитата(kikprog @ Nov 2 2015, 09:51)

Я так понимаю общение с GSM модулем идет по UART, зачем делать паузы между командами, нельзя ждать ответа, и в случае ОК отправлять следующую, а в случае ошибки парсить её или повторять запрос?
А что делать, если команду передали, а модем ее проигнорировал или некорректно принял, ответа может и не быть, что тогда? Зависнем намертво?
Да, общение по UART с микроконтроллером и пока для отладки с компом - транзитом через микроконтроллер.
Ответ действительно приходит не всегда, поэтому таймаут - крайний срок, когда его еще стоит ожидать - нужен.
Задача неспешная, экономии питания не требует, проверка ответов по истечении таймаутов немного проще.
turnon
Nov 24 2015, 09:21
Цитата(kikprog @ Nov 2 2015, 10:51)

Я так понимаю общение с GSM модулем идет по UART, зачем делать паузы между командами, нельзя ждать ответа, и в случае ОК отправлять следующую, а в случае ошибки парсить её или повторять запрос? Зачем нужны именно жестко прописанные тайминги?
Так а нет никаких таймингов. Есть время ожидания ответа на команду, по истечении которого считается что ответа нет.
MrDorianGray
Mar 22 2016, 08:58
Цитата(turnon @ Oct 29 2015, 16:03)

Использую по умолчанию время ожидания ответа - 1 сек.
В команде AT+FTPSIZE параметр Max Response Time равен 75 с. Я для подобных команд время ожидания ставил как по даташиту, что б не спамить модуль частой отправкой команд. Для остальных обычно и секунды хватает. Не было ли у Вас сильно больших задержек по ответу от модулей?
У меня модули SIM800C.