|
Последовательное вычитывание СМС с SIM900R |
|
|
|
Feb 26 2015, 13:58
|
Частый гость
 
Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213

|
Возможно этот вопрос уже поднимался, я сегодня пролистал 15 страниц, упарился искать ...  Задача: вычитывать СМС,обрабатывать их и удалять. Ограничения: Входной буфер для работы с SIM900R небольшой (около 1 кБ) Обычная моя работа с SIM - это отправка запроса о ожидание необходимых ответов, типа OK, ERROR или CMS ERROR. После получения ОК, происходит разбор всего принятого пакета. Для вычитывания СМС вижу 2 команды: 1) CGMR - очень удобная команда, но чтобы ей воспользоваться, необходимо знать индекс СМС сообщения, а они могут быть не все по порядку. Признака, типа вернуть первое доступное СМС сообщение у нее вроде нет. 2) CGML - умеет возвращать все имеющиеся сообщения, однако при наличии большого числа СМС, может просто не хватить моего входного буфера. Ограничить количество возвращаемых за один раз сообщений, типа вернуть только одно сообщений у нее вроде нет. Конечно можно предположить, что СМС сообщения будут приходить с большим интервалом и команда CGML будет возвращать 1-2-3 сообщения, которые поместяться у меня во входном буфере. Однако практика показывает, что в жизни бывает всякое и надо быть готовым к худшему случаю. Кто как с такими задачами справляется или есть еще способ работы с СМС сообщениями, который я проглядел.
|
|
|
|
|
 |
Ответов
|
Feb 26 2015, 15:02
|

Профессионал
    
Группа: Свой
Сообщений: 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 штук).
|
|
|
|
|
Feb 26 2015, 17:00
|
Частый гость
 
Группа: Свой
Сообщений: 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 симпатичен, но не решает вопрос первого запуска, когда в карточке могут уже находиться какие-либо сообщения. Хотя, врядли это будут нужные сообщения и их можно просто по включению удалить, но все таки!
|
|
|
|
|
Feb 26 2015, 21:09
|

Просто Che
    
Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881

|
Цитата(Yaumen @ Feb 26 2015, 19:00)  Но тут другая проьблема вылазит - это количество СМС, которые могут находиться в памяти, чтобы выделить для их хранения память. Есть тут какие-то цифры или нет!? Сколько например может быть СМС или каков максимальный индекс?
Вариант 4 симпатичен, но не решает вопрос первого запуска, когда в карточке могут уже находиться какие-либо сообщения. Хотя, врядли это будут нужные сообщения и их можно просто по включению удалить, но все таки! Недавно решал подобный вопрос. В моем устройстве СМСки это неосновная редко применяемая фича, поэтому выбрал след. алгоритм: Уведомления о приходе СМС у меня выключены, чтобы не мешались  (+CNMI: 0,0,0,0,0) Поэтому раз в минуту запускаю функцию, которая: 1) запрашивает кол-во смс на симке: AT+CPMS? +CPMS: "SM",9,15,"SM",9,15,"SM",9,15....OK.. первый раз может быть много нестертых смс, потом будут только пришедшие за минуту. если на симке ничего нет, все заканчивается, если кол-во больше нуля, то: 2) зная общее кол-во индексов на симке в цикле вычитывает по одному индексу: AT+CMGR=1,0. +CMGR: 1,"xxxxxxx",43..0123456789ABCDxxxxxxxx....OK.. если индекс пустой, возвращается только ОК 3) прочтенная смс обрабатывается на предмет того, нужна она нам или нет, если нужна, выполняются нужные действия (например высылается ответная смс) 4) прочтенная смс стирается Вот и все Работает неспешно, но надежно. з.ы. индексов на симке может быть от 10 до нескольких десятков. У меня на очень старой симке (ей ок. 10 лет) - 10 штук, на другой, новее - 15 штук. SIM900 смс пишет на симку начиная с младших индексов: если все чисто, то в первый, если есть дырки - в младшую дырку
|
|
|
|
Сообщений в этой теме
Yaumen Последовательное вычитывание СМС с SIM900R Feb 26 2015, 13:58    Baser Цитата(Yaumen @ Feb 27 2015, 07:11) А мож... Feb 27 2015, 11:03     Yaumen Цитата(Baser @ Feb 27 2015, 14:03) Не пон... Feb 27 2015, 11:18  Alechek Цитата(Yaumen @ Feb 26 2015, 22:00) насче... Mar 2 2015, 10:39   Yaumen Цитата(Alechek @ Mar 2 2015, 13:39) А ник... Mar 3 2015, 10:05 andrey videoplus у меня похожий принцип работы: мк по прерыванию от... Feb 26 2015, 23:48 RadikX Имейте в виду, встречал прошивки, где на команду A... Mar 6 2015, 09:01
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|