реклама на сайте
подробности

 
 
> Последовательное вычитывание СМС с SIM900R
Yaumen
сообщение Feb 26 2015, 13:58
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213



Возможно этот вопрос уже поднимался, я сегодня пролистал 15 страниц, упарился искать ... wink.gif

Задача: вычитывать СМС,обрабатывать их и удалять.
Ограничения: Входной буфер для работы с SIM900R небольшой (около 1 кБ)

Обычная моя работа с SIM - это отправка запроса о ожидание необходимых ответов, типа OK, ERROR или CMS ERROR. После получения ОК, происходит разбор всего принятого пакета.

Для вычитывания СМС вижу 2 команды:
1) CGMR - очень удобная команда, но чтобы ей воспользоваться, необходимо знать индекс СМС сообщения, а они могут быть не все по порядку. Признака, типа вернуть первое доступное СМС сообщение у нее вроде нет.
2) CGML - умеет возвращать все имеющиеся сообщения, однако при наличии большого числа СМС, может просто не хватить моего входного буфера. Ограничить количество возвращаемых за один раз сообщений, типа вернуть только одно сообщений у нее вроде нет.

Конечно можно предположить, что СМС сообщения будут приходить с большим интервалом и команда CGML будет возвращать 1-2-3 сообщения, которые поместяться у меня во входном буфере. Однако практика показывает, что в жизни бывает всякое и надо быть готовым к худшему случаю.

Кто как с такими задачами справляется или есть еще способ работы с СМС сообщениями, который я проглядел.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
megajohn
сообщение Feb 26 2015, 15:02
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



вариант 3: Использовать Flow Control на UART и подать соответсвующую команду на модем
вариант 4: в телитах можно настроить at+cnmi=2,1,0,0,0 чтобы было сообщение о каждом пришедшем СМС, и эти сообщения парсить ( +CMTI: "SM",2\r\n +CMTI: "SM",34\r\n +CMTI: "SM",125\r\n ) и складировать в очередь, чтобы потом извлекать уже нужные номера СМС ( может что подобное в симкоме есть )


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
Yaumen
сообщение Feb 26 2015, 17:00
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213



Цитата(megajohn @ Feb 26 2015, 18:02) *
вариант 3: Использовать Flow Control на UART и подать соответсвующую команду на модем
вариант 4: в телитах можно настроить at+cnmi=2,1,0,0,0 чтобы было сообщение о каждом пришедшем СМС, и эти сообщения парсить ( +CMTI: "SM",2\r\n +CMTI: "SM",34\r\n +CMTI: "SM",125\r\n ) и складировать в очередь, чтобы потом извлекать уже нужные номера СМС ( может что подобное в симкоме есть )


насчет варианта 3 не понял. Если вы предлагаете с помощью RTC и CTS останавливать передачу данных от SIM, то такой вариант плох тем, что "ОК" ждаь нельзя, так как его не будет в первых пакетах. Во-вторых обработка всех сразу СМС в цикле, подвесит модуль, пока все СМС сообщения не будут обработаны. С этим конечно можно побороться, с помощью каких-то там флагов, запоминанием текущего состояния и прочего, но очень сильно усложнит прозрачность кода и как следствие, большую вероятность появления ошибки. А самое гланое, оно напрочь поломает всю ту структуру взаимодействия между микроконтроллером и SIM. Хотя как вариант, возможен. Отсавлю его на самый последний вариант, если других не останется.
Я уже думал в плане использования листинга, собирать на лету только ID СМС, а потом по одному уже работать с ними. В таком случае ломать мне меньше. Но тут другая проьблема вылазит - это количество СМС, которые могут находиться в памяти, чтобы выделить для их хранения память. Есть тут какие-то цифры или нет!? Сколько например может быть СМС или каков максимальный индекс?

Вариант 4 симпатичен, но не решает вопрос первого запуска, когда в карточке могут уже находиться какие-либо сообщения. Хотя, врядли это будут нужные сообщения и их можно просто по включению удалить, но все таки!
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 22:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.01372 секунд с 7
ELECTRONIX ©2004-2016