|
SIM900: если модуль завис, Как определить что модуль завис |
|
|
|
Oct 12 2011, 09:55
|
Местный
  
Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682

|
А какую основную функцию будет выполнять модуль? Если это действие, инициализируемое вами, то запускайте таймер в начале отработки, и останавливайте при полном завершении отработки. Если таймаут - считаем, что завис. Так проще и надежнее всего. Если же действие инициируется извне (например, ожидание входящего звонка), то тут однозначно не получится советовать. Надо изворачиваться по ситуации. Зависнуть может, например, регистрация в сети, но на АТ отвечать будет.
|
|
|
|
|
Oct 12 2011, 09:59
|
Мыслящий
    
Группа: Свой
Сообщений: 1 729
Регистрация: 20-07-07
Из: Самара
Пользователь №: 29 270

|
Цитата(GeGeL @ Oct 12 2011, 13:55)  Зависнуть может, например, регистрация в сети, но на АТ отвечать будет. В этом случае можно контроллировать регистрацию в сети (AT+CREG?)
--------------------
FAQ по ADФорум по ADЗнание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью. ...стоит запомнить ...вернее задуматься.
|
|
|
|
|
Oct 13 2011, 05:26
|

Частый гость
 
Группа: Участник
Сообщений: 95
Регистрация: 4-04-11
Из: челябинск
Пользователь №: 64 111

|
Цитата(Master of Nature @ Oct 12 2011, 13:59)  В этом случае можно контроллировать регистрацию в сети (AT+CREG?) именно так проверяю. В основном можно понять как модуль завис - от него ничего не идет в ответ. В этом случае его ни программно ни аппаратно выключить не получается. Но во всех случаях через некоторое время (пару минут) он отвисает.
|
|
|
|
|
Oct 15 2011, 18:39
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 7-12-06
Пользователь №: 23 250

|
В документе "sim900_atc_v1 00.pdf" написано: "AT+CFUN=1,1 can be used to reset module purposely". Значит, подачей этой команды можно сбросить модем. Есть два НО: 1. Там же написано: "The <fun> power level will be written to flash except minimum functionality". То есть каждый раз при таком сбросе будет происходить запись во flash. Ресурс flash невелик (1 млн циклов записи), вдруг при полном отсутствии сети GSM будет постоянно лупить такой сброс? Flash в модуле сдохнет быстро. 2. При таком сбросе питание сим-карты снимается? Если да, то симки со счетчиком включений тоже будут сдыхать при длительном отсутствии сети GSM.
Коллеги, прокомментируйте, пожалуйста, эти выкладки. Как лучше делать сброс?
P.S. Реальная ситуация: прибор с SIM900B лежит на столе (стационар), работает, GPRS подключен, данные передаются по TCP. Через веб-клиент билайна переводим сим-карту в состояние "Запасы" (перестает регистироваться в сети). Модем выдает PDP DEACT и дальше мы не можем отправить данные по TCP, закрываем сокет, отключаемся от GPRS и периодически пробуем подключить GPRS. На AT+CGATT=1 стабильно получаем ERROR. AT+CREG возвращает 0,1, AT+CGREG возвращает 0,0. Теперь переводим симку в состояние "Активирована". В 2 случаях из 10 модем еще минуту отвечает ERROR на AT+CGATT=1, а затем-таки подключает GPRS. Дальше работает как обычно, нормально. Но в 8 случаях из 10 модем продолжает отвечать ERROR и только выкл/вкл по PWRKEY дает эффект, симка регистрируется и модем подключает GPRS. Да, можно так сбрасывать, но этот вариант мне не нравится исключительно из-за того, что симки со счетчиком включений будут дохнуть. КАК БЫТЬ?
|
|
|
|
|
Oct 16 2011, 06:06
|
Местный
  
Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682

|
Учитывая Ваши страхи, я бы организовал аглоритм где-то так: пробуем подключать жпрс каждую минуту (чаще не вижу смысла из-за инертности оператора). Если в течние 5 попыток не получилось, перезапускаем PWRKEY. Причем в этом случае тщательно конролируем STATUS: чтобы он стал 0, пауза, затем чтобы 1, пауза, опять 1 для гарантии. Если что-то не так, тогда дергаем питание. Т.о. перезапуск по POWERKEY будет раз в 5 мин при блокировке сим. Если и это пугает, то можно ввести счетчик перезапусков, и спосле 2-х подряд перезапусков пропустить, скажем, следующие 10. Т.о. 2 попытки перезапуска будут каждый час (если это допустимо задачей).
Что касается ресурсов флеш, то не морочьте себе голову - на гарантийный срок вашего устройства точно хватит. Многие, наоборот, в своих изделиях просят ввести рассчитанный износ, чтобы послегарантийно (платно) обслуживать. Что касается счетчика включения сим, то я про такой не слышал. Был счетчик запуска аутентификации (COMP128), но он все равно будет инкрементироваться при любой перерегистрации в сети, хоть со снятием питания с сим, хоть нет. Реально ни разу не видел симки, блокированной в штаном устройстве, только в ридере при сканировании.
Если есть желание, можете даже попробовать запитать сим отдельно, предварительно замеряв ее питание о модуля - не думаю, что идут какие-то манипуляции с ее питанием, на то есть RST. Только в таком случае если проц в сим зависнет, то надо и ее дергать будет...
PS: и еще - в этих 8 из 10 случаев регистрация в сети появляется, но жпрс не поднимается? Или нет и регистрации? Если последнее, то возможно, есть недокументированные команды из расширенного инженерного меню, позволяющие принудительно перерегистрировать в сети по IMEI (получить новый TIMSI). Тогда нет необходимости дергать питание. Уточните у Эдуарда.
Сообщение отредактировал GeGeL - Oct 16 2011, 06:14
|
|
|
|
|
Oct 16 2011, 09:29
|
Частый гость
 
Группа: Участник
Сообщений: 134
Регистрация: 12-08-11
Пользователь №: 66 701

|
Цитата(Romashki @ Oct 14 2011, 22:54)  1 - проверяем ногу статус (это нам скажет о том, что модуль может принимать команды). Без появления этого сигнала - дальнейшая работа с модулем бессмысленна. 2 - ожидаем окончания регистрации в сети (CREG), если регистрация долго отсутствует (например на протяжении 40 секунд), пытаемся перезапустить модуль (поверкей или CFUN=1,1). Без регистрации дальнейшая работа с модулем бессмысленна. .... не совсем понимаю где проблема??? Нет нет - нет проблем. Я собственно приблизительно такой алгоритм сейчас и реализовал вместо посылки АТ и ожиданием OK. Я был озадачен тем, на сколько это, как бы, объективно. С AT+CREG? это конечно лучше - так как и ответ придет (стык с модемом на уровне USART) и регистрацию проверяем (на канальном уровне GSM). Если что-то возникнет более существенное в опытной эксплуатации за 3 мес. - то буду править код под уже возникающие проблемы. Цитата(Romashki @ Oct 14 2011, 22:54)  Если боитесь перегрева - спрашивайте у модуля температуру; напряжение питания - спрашивайте питание; если и это не 100% - то спрашивайте текущее время и сравнивайте с предыдущим значением. Эти моменты я учел в проверке. Думаю на данном этапе все эти меры будут конечно не 100% гарантировать слежение за зависанием, но хотябы избежать большей части (если конечно это вообще наступит). Возник еще такой вопрос: Есть ли какой-либо параметр определяющий максимальное время ответа модема SIM900 по USART на команды? Т.е. я имею ввиду что, MCU посылает модему команду AT на скорости 9600, через какое максимальное время мне ожидать прием первого символа ответа? Я понимаю, что например в команде AT+CMGDA=6 - ответ идет долго - потому что стираются смски. Но для простых команд типа ATZ, ATE, AT и т.п есть ли такие временные рамки? Я к чему спрашиваю. К примеру, посылаю команду, в ответ ожидается "OK" и через сколько его ждать от SIM900? 100 мс, 300 мс, 1 с? Дело в программном ожидании ОК от модема. Через прерывания в данном случае не могу реализовать - там задействован другой код программы. Если я не буду ограничивать время ожидания ОК и если оно не придет - то гаджет бесконечно зациклится на этом ожидании. Думал решить такую проблему через "хитросбрасываемый" watchdog - но слишком уж жестко это, хотя...
Сообщение отредактировал Ildar Belkin - Oct 16 2011, 08:43
|
|
|
|
|
Oct 16 2011, 11:41
|
Частый гость
 
Группа: Участник
Сообщений: 134
Регистрация: 12-08-11
Пользователь №: 66 701

|
Цитата(MKdemiurg @ Oct 16 2011, 14:40)  Используйте аппаратный таймер... Если в течении 5-6 секунд не пришёл ОК - ребут модема или повторение запроса( хотя если документированый ОК не пришёл - то это точно висяк и спасёт только ребут). Я так делаю. На каждую команду 5 сек ожидаение ОК( на самом деле приходит моментально и таймер останавливается - но вдруг). CREG? CGREG - делаю опрос с интервалом 2 секунды до 20 раз пока не приходит +CREG: 0,1 . Превышен лимит опроса - ребут модема. Вообщем в любом случае отловите зависон. Т.е. идеально на каждую команду проверка ответа - тогда висяки не страшны. Ну и ограничить кол-во перезагрузок 2-3 штуки. Спасибо, логика понятна. Сейчас правил код - сделал не через аппаратный таймер, а через декремент двухбайтовой переменной в процедуре ожидания от модема ОК. Рассчитал двухбайтовое значение - сколько будет до "0" через 3 сек, вношу перед посылкой АТ, затем запускаю процедуру чтения в цикле приемного буфера с уменьшением двухбайтовой переменной. Выход из процедуры с флажком= 1, если ОК- дождадись, флажок=0 если двухбайтовая переменная обнулилась, до поступления ОК. Дальше рестарт модему, если флажок=0 Проверил - так работает. С аппаратным таймером у меня не получится в данном проекте сделать, так как его обнуление нужно отлавливать через прерывание, а у меня они уже задействованы спец. образом. На момент работы с модемом - отключены. Но я уже прикинул как сделаю в след. проекте на аппаратном таймере.
|
|
|
|
|
Oct 16 2011, 20:09
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 7-12-06
Пользователь №: 23 250

|
Цитата(GeGeL @ Oct 16 2011, 10:06)  В этих 8 из 10 случаев регистрация в сети появляется, но жпрс не поднимается? Или нет и регистрации? Если последнее, то возможно, есть недокументированные команды из расширенного инженерного меню, позволяющие принудительно перерегистрировать в сети по IMEI (получить новый TIMSI). Тогда нет необходимости дергать питание. Уточните у Эдуарда. В 8 из 10 случаев CREG неизменно выдает 0,1, а CGREG выдает 0,0, на команду AT+CGATT=1 получаю ответ ERROR. То есть регистрация есть, а GPRS нет. При этом если ребутнуть модем - появляется и GPRS тоже. Вот мне бы как раз команду принудительной разрегистрации или повторной регистрации в сети. Это бы могло помочь.
|
|
|
|
|
Oct 16 2011, 21:05
|
Ортодокс
  
Группа: Свой
Сообщений: 219
Регистрация: 26-10-07
Из: Смела, Украина
Пользователь №: 31 775

|
Цитата(Konstantin Ilichev @ Oct 16 2011, 23:09)  Вот мне бы как раз команду принудительной разрегистрации или повторной регистрации в сети. Это бы могло помочь. См. AT+COPS
|
|
|
|
|
Oct 17 2011, 08:16
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 19-04-07
Пользователь №: 27 182

|
Цитата(Konstantin Ilichev @ Oct 16 2011, 22:09)  В 8 из 10 случаев CREG неизменно выдает 0,1, а CGREG выдает 0,0, на команду AT+CGATT=1 получаю ответ ERROR. То есть регистрация есть, а GPRS нет. При этом если ребутнуть модем - появляется и GPRS тоже. Вот мне бы как раз команду принудительной разрегистрации или повторной регистрации в сети. Это бы могло помочь. А после того как приходит PDP DEACT AT+CIPSHUT делаете?
|
|
|
|
|
Oct 17 2011, 09:19
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 7-12-06
Пользователь №: 23 250

|
Цитата(Aurochs @ Oct 17 2011, 01:05)  См. AT+COPS Пробовал AT+COPS=1,0,"Beeline", и еще AT+COPS=4,0,"Beeline". Никак не реагирует, на AT+COPS? выдает 0 (автоматический режим). Цитата(xMw @ Oct 17 2011, 12:16)  А после того как приходит PDP DEACT AT+CIPSHUT делаете? По приходу PDP DEACT ничего не делаю вообще. AT+CIPSHUT делаю в двух случаях: 1) при подключении GPRS, если на AT+CIPSTATUS отвечает не INITIAL; 2) при установлении TCP-соединения, если на AT+CIPSTATUS отвечает не INITIAL, не STATUS и не CLOSED. Всё по даташиту.
|
|
|
|
|
Oct 17 2011, 10:26
|

Местный
  
Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719

|
Цитата(Konstantin Ilichev @ Oct 17 2011, 13:19)  По приходу PDP DEACT ничего не делаю вообще. Ну и зря. Делаем cipshut и открываем сессию заново. Как правило со второго раза соединяется ок.
|
|
|
|
|
Oct 17 2011, 10:34
|
Местный
  
Группа: Участник
Сообщений: 301
Регистрация: 22-07-09
Пользователь №: 51 470

|
Цитата(MKdemiurg @ Oct 17 2011, 13:24)  Хм...а если не проверять cipstatus? Я вот проверяю CGREG, CGATT и если на CIICR приходит PDP DEACT - делаю рестарт. Просто что конкретно даст AT+CIPSTATUS в плане проверки ? Ничего путевого не даст. Еще с незапамятных времен приколотил на эту кривую команду. CGATT и CIICR - с головой хватает.
|
|
|
|
|
Oct 17 2011, 10:59
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 7-12-06
Пользователь №: 23 250

|
Цитата(MKdemiurg @ Oct 17 2011, 14:24)  Хм...а если не проверять cipstatus? Я вот проверяю CGREG, CGATT и если на CIICR приходит PDP DEACT - делаю рестарт. Просто что конкретно даст AT+CIPSTATUS в плане проверки ? Я на CIPSTATUS не жалуюсь, загвоздка не в нем, а в том, что при выполнении CGATT=1 получаю сразу ERROR. Я тут CIPSTATUS даже и не вызываю нигде. Если CGATT=1 ответит ОК, то тогда уже IPSTATUS, но там дальше всё нормально. Еще раз: проблема в том, что если появился GPRS, то модем сам его не обнаруживает, на CGATT=1 выдает ERROR, и помогает только перезагрузка с отключением питания модема. Наши поставщики щас ищут, какой командой можно пнуть модем, чтобы он без рестарта поискал GPRS. Цитата(KAlex @ Oct 17 2011, 14:26)  Ну и зря. Делаем cipshut и открываем сессию заново. Как правило со второго раза соединяется ок. Именно так, как только появляются новые данные на отправку, я делаю CIPSEND, получаю ERROR, иду на закрытие TCP-соединения, дальше дается CIPSHUT и при попытке CIPSTART получаю ERROR, то есть со второго раза не соединяется, и дальше так и не соединяется сколько ни пытается. Через паузу иду на закрытие GPRS и пытаюсь подключить GPRS снова, но на CGATT=1 получаю стабильно ERROR. Найти GPRS помогает только сброс модема по PWRKEY и питанию. Цитата(butthead2 @ Oct 17 2011, 14:34)  Ничего путевого не даст. Еще с незапамятных времен приколотил на эту кривую команду. CGATT и CIICR - с головой хватает. Если GPRS есть, то CGATT и CIICR проходят чудесно. Если его нет, то на CGATT=1 уже получаем ERROR. Вот щас выкинул вообще вызов CIPSTATUS из алгоритма, загнал опять в то же состояние - проблема та же. CIPSTATUS не влияет.
|
|
|
|
|
Oct 17 2011, 16:13
|
Местный
  
Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682

|
Цитата(Konstantin Ilichev @ Oct 17 2011, 00:09)  В 8 из 10 случаев CREG неизменно выдает 0,1, а CGREG выдает 0,0, на команду AT+CGATT=1 получаю ответ ERROR. То есть регистрация есть, а GPRS нет. При этом если ребутнуть модем - появляется и GPRS тоже. Вот мне бы как раз команду принудительной разрегистрации или повторной регистрации в сети. Это бы могло помочь. Обратите внимание на предисторию этой ситуации: я так понял, возникает при переводе работающей симки оператором из состояния "Запасы" в состояние "Работа". Очень похожая ситуация возникает при игре с клоном симки: при включенном оригинале включаем клон, делаем исходящий звонок и затем клон тушим. При этом оригинал в сети (по CREG), но жпрс поднять не можем. Связано с тем, что клон затребовал другой TMSI, и прописанный в оригинале устарел. Попробуйте: 1. Доходят ли в таком состоянии входящие звонки на модем? 2. Сделать исходящий звонок (возможно, с первого раза не получится) и затем пробовать жпрс; 3. Ну и опять же, попробовать перерегистрацию в сети каким-либо образом (скорее всего, то, что Вы пробовали, не возымело эффекта, т.к. собственно, перерегистрации и не было - сеть оставлась та же).
|
|
|
|
|
Oct 18 2011, 06:43
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 7-12-06
Пользователь №: 23 250

|
Цитата(GeGeL @ Oct 17 2011, 20:13)  Обратите внимание на предисторию этой ситуации: я так понял, возникает при переводе работающей симки оператором из состояния "Запасы" в состояние "Работа". Очень похожая ситуация возникает при игре с клоном симки: при включенном оригинале включаем клон, делаем исходящий звонок и затем клон тушим. При этом оригинал в сети (по CREG), но жпрс поднять не можем. Связано с тем, что клон затребовал другой TMSI, и прописанный в оригинале устарел. Да, очень похоже. По CREG я тоже получаю 0,1. Цитата(GeGeL @ Oct 17 2011, 20:13)  Попробуйте: 1. Доходят ли в таком состоянии входящие звонки на модем? Сим-карта не поддерживает вх/исх звонков (только m2m). Попробую сделать в такой ситуации сброс модема по PWRKEY и по питанию с повтором не чаще 20 минут.
|
|
|
|
|
Oct 18 2011, 07:24
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 7-12-06
Пользователь №: 23 250

|
Цитата(GeGeL @ Oct 18 2011, 11:02)  Будет возможность, попробуйте все ж ради хохмы ATD Мне кажется, что статус исходящих по идее будет проверяться уже после регистрационных моментов. Суть такова: мы пытаемся инициировать сеанс устаревшим TMSI. По идее, сеть не может распознать абонента и в ответ инициирует идентификацию пи IMSI и пропишет в симку новый TMSI, и только потом даст отлуп на исходящий согласно тарифного плана. Но т.к. перерегистрация уже произойдет, то жпрс может подключиться после этого. Проверили следующим образом. Ввели модем в описанное выше состояние, симка в режиме "Активирована", на CGATT=1 выдает ERROR. Далее делаем звонок ATDxxxxxx, небольшая пауза, NO CARRIER. Далее пробуем CGATT=1 - ERROR. Пробовали звонки на разные номера, делать IPSHUT, CGATT=0, разные комбинации - сдвигов нет, к сожалению, GPRS не подключается, помогает только полный сброс.
|
|
|
|
|
Oct 20 2011, 08:40
|

Местный
  
Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719

|
Цитата(Konstantin Ilichev @ Oct 17 2011, 14:59)  Именно так, как только появляются новые данные на отправку, я делаю CIPSEND, получаю ERROR, иду на закрытие TCP-соединения, дальше дается CIPSHUT и при попытке CIPSTART получаю ERROR, то есть со второго раза не соединяется, и дальше так и не соединяется сколько ни пытается. Через паузу иду на закрытие GPRS и пытаюсь подключить GPRS снова, но на CGATT=1 получаю стабильно ERROR. Найти GPRS помогает только сброс модема по PWRKEY и питанию. Как часто появляются данные? Может ТСР закрывается по таймауту? Тогда тут болезнь модуля на закрытие сессии проявляется. Китайцы проинформированы, ждем исправлений.
|
|
|
|
|
Aug 13 2014, 07:03
|
Группа: Новичок
Сообщений: 7
Регистрация: 13-08-14
Пользователь №: 82 535

|
Добрый день! Подскажите пожалуйста, в случае зависания sim900 на пине STATUS будет присутствувать высокий уровень?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|