Падения порта sim900


#1

Собственно заметил эту проблему в последний раз на объекте
Повторялось несколько раз. Антена имеет вот такое подключение:


Иногда просто перестает работать порт устройства (либо модем молчит… не знаю). Больше склоняюсь к порту , потому что через minicom не смог его в эти моменты запустить
В эти моменты и скрипт SMS не работает. Перезагрузка устройства тоже не помогает
“Лечил” проблему только отключением питания. Подозреваю старую добрую статику.
Сегодня устройство перестало отвечать на СМС. Хотя гудки от модема идут… Не дай бог опять эта проблема вылезла
Что можно в предпринять на уровне ПО для восстановления порта?
Может антенну заземлить ?


#2

Добрый день,

у нас есть скрипт в стандартной поставке, вызывается командой

wb-gsm restart_if_broken

Он проверяет, отвечает ли модем на AT-команды и если нет, то перезагружает его аппаратно по питанию.
Если модем отвечает, то скрипт сразу завершается и ничего не делает. Поэтому я рекомендую вызов этой команды ставить перед каждым обращением к модему.

Можете подробнее написать, что значит

?


#3

Использовал ультилиту http://linux.die.net/man/1/minicom
Когда с модемом проблемы, с этой minicom тоже … Почему то нет реакции на клавиши в запущенном minicom через putty . (может я конечно нет так что-то набирал). Выходишь из программы в командную строку - все нормально.
Пускай и без этого… Через логи питона модем вообще молчит. Это 100%

Я не пробовал wb-gsm restart_if_broken . Но пробовал, wb-gsm reset . Эта команда ничего не дала . Они схожи по функциям?

Кстати. Только что владелец сбросил WirenBoard… И все не пришедшие сообщения дошли (получается суммарно 7 ответов на 7 запросов).


#4

В дополнение
Вот кусочек скрипта. Сообщения перехватываются по '+CMTI: “SM”, - сигнал о входящих сообщениях (если я правильно помню):

if buf.find('+CMTI: "SM",') >= 0 :
			numsms = buf.split(',')[1]
			newSMS = ReadSMS(numsms)
			if newSMS != -1 :
					if phonelist.count(newSMS[1]) > 0 :
					#print 'SMS:{}: {}-{}'.format(numsms, newSMS[0], newSMS[1])
									answ = ParseSMS(newSMS[0])
									if len(answ) > 0 :
											msg_on_web_serv('Send SMS')
											print 'SMS answ: {}'.format(answ)
											SendSMS( answ, newSMS[1])
					else :
							print "Tel {} - didn't finded..".format(numsms)
			DelSMS(numsms)

Получается после сброса WirenBoard , сообщения пришли кучей на модем. Но гудки были. Вообщем мистика какая-то


#5

Нет, они не взаимозаменяемые. wb-gsm reset перезагружает модем без последнующей переинициализации. Чтобы работать с модемом после этого, его нужно инициализировать.

Поставьте пожалуйста вызов

wb-gsm restart_if_broken     

перед отправкой сообщения и куда-нибудь в вашу логику периодически и посмотрите что будет происходить.
Тут нет никакой магии (и не понятно, что дальше обсуждать): при перезагрузке Wiren Board вызывается перезагрузка по питанию и переинициализация модема. Эта команда сделает то же самое, если у вас модем не отвечает.

Теоретически это действительно могут быть зависания модема. Также есть вероятность, что ваша логика что-нибудь портит в процессе работы.

Проверьте ещё, не может ли переполняться память SMS-сообщений в модуле - это зависит от логики вашей программы.


#6

Поищу куда добавить команду wb-gsm restart_if_broken. Надеюсь, что этого хватит

Они удаляются после прочтения и при запуске скрипта


#7

Вообщем когда приехал на объект, сделал команду wb-gsm restart_if_broken через консоль
Потом стал наблюдать. Лог работы с модемом пишет, что все нормально.
Но что странно, на СМС-запросы он не отвечает.
Перезагрузка системы через reboot тоже ничего не дала. Опять помог только сброс через отключение от питания.
Я сделал так : добавил в скрипт счетчик. Если по истечению установленного времени модем не отвечает делается команда wb-gsm restart_if_broken. Так три попытки. Если это не помогло, то заключительный “костыль” - посылка на модбас команды в соседний ПЛК63, который отключает питание wirenboard на 10 секунд

Протестировать скрипт смог отключив модем через wb-gsm off . Отработал
Показали как все работает. Клиент доволен. Получается проработало устройство 4 дня.

И сегодня как раз тот знаменательный день, когда контроллер ОПЯТЬ замолчал.

Замолчал, кстати, после нескольких ошибочных SMS-запросов от клиента.

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


#8

А что значит

?


#9

Ну и ещё раз скажу: никак физически отключение устройства на 10 секунд не может заставлять его чудом работать лучше. У нас есть команда (wb-gsm), которая физически сам модем отключает, т.е. это полностью эквивалентно.
Думаю, что-то вы делаете неправильно.

Присылайте всё что у вас есть на почту, будем смотреть.


#10

Все вышлю сегодня


#12

Начнем с того , что особо нет нигде пояснений, как эта wb-gsm работает. Откуда я могу знать как она работает? Это знает только разработчик. Схематику я тоже не знаю.
Насчет эквивалентности я пока поспорю. У нас было устройство, которое от статики ломалось и восстановить его работу можно было только отключением от питания. А здесь я уже столкнулся с тем что wirenboard перестает работать с датчиком на 1-wire шине на КОРОТКОМ проводе ( уже писал об этом в соседней ветке). Значит что-то уже не так. Вполне возможно внешние наводки

Если я что-то делаю не так и проблема решится, я отпишусь здесь и напишу как проблема была решена


#13

Отвез контроллер в офис и начал отлаживать. Вот что я обнаружил при тестировании:

  • Если вы посылаете команду на удаление смс (AT+CMGD или AT+CMGDA ) - это еще не значит, что они действительно удалятся. Наблюдал как симка начинала потихоньку заполняться
    ОБЯЗАТЕЛЬНО соблюдайте паузу перед командой удаления СМС.
  • Память СИМ карты небольшая - порядка 10-20 СМС. Если она заполнится, прием СМСок прекратится.

Примерно вот на таком варианте я остановился

-Получили СМС (+CMTI: “SM”,) - читаем. Ждем(!) несколько секунд перед командой удаления.
-Для удаления смс - групповые команды типа AT+CMGD=0,2 или, AT+CMGDA=“DEL UNREAD”
-Рестарт модема с помощью wb-gsm off и wb-gsm restart_if_broken каждые шесть часов
-В случае отсутствия ответов модема - пишем в консоль wb-gsm restart_if_broken

Почти неделя полет нормальный.


#14

А попробуйте посмотреть в сторону AT+CPMS “Preferred SMS Message Storage”. Так по-идее можно заставить модуль сохранять смс-ки не на сим-карту.
Ещё это всё удобнее делать не AT-командами, а через утилиту типа gammu. Она даже в стандартном образе по-моему есть.