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

 
 
> Telit datacall, Не могу понять как правильно
White_rat
сообщение May 22 2012, 13:23
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 22-05-12
Пользователь №: 71 957



Пришлось недавно заняться GSM-модулями Telit. В целом довольно понятно, пока не приступил к datacall.
В общем, логика такова. На прием звонка стоит автоподъем. По третьему звонку поднимает, коннектится. Пишет CONNECT 9600. Все хорошо.
Далее приходит команда, парсер ее отрабатывает, принимается решение что делать.
Вот дальше не совсем понял - модуль находится в режиме передачи данных и мне необходимо перевести его в командный режим.
Перевожу при помощи +++
Все хорошо, переходит.
Потом перед отправкой данных снова перевожу его в режим передачи данных при помощи AT0
Все опять же работает
Ну и так далее, перевожу в командный +++ и по кругу

Все замечательно отрабатывает, пока не надо прервать соединение.
Вообще у меня есть бесконечный основной цикл, где программа постоянно крутится (ну так было указано в примерах, насколько я их понял)
res=MDM.receive(10)
ab = res.find('NO CARRIER')
if(ab!=-1):
StopDataMode()

Если вижу NO CARRIER, то останавливаю выполнение программы, перехожу в командный режим.
Только вот этот самый NO CARRIER может прийти и во время выполнения каких-то команд. В результате я его не всегда отлавливаю и все плохо.

Вопросы.
Правильно ли вообще постоянно переключаться с одного режима во второй?
Что делать для с проблемой отлова NO CARRIER (вообще говоря, любая команда тоже может не отпарситься по той же причине)

Извиняюсь, если вопросы дурацкие, не нашел толкового примера... При соединении по GPRS меня ждет видимо то же самое
Спасибо.

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
White_rat
сообщение Jun 1 2012, 08:47
Сообщение #2





Группа: Новичок
Сообщений: 8
Регистрация: 22-05-12
Пользователь №: 71 957



mempfis_, спасибо в очередной раз. Не работают у меня виртуальные COMы... Где-то виде на форумах, что проблема может быть в самом USB-COM-переходнике (не очень понятно почему).
если можно, еще один вопрос. Вот была у меня проблема с определением RINGа. Решилась путем проверки +CLCC - все хорошо. Теперь похоже на то, что с приходом СМС тоже самое. Т.е. +CMTI приходит
и я его отслеживаю в основном цикле

res=MDM.receive(10)
a = RES.find('+CMTI: "SM",')
if(a!=-1):
Собственно смотрю что пришло

+CMTI может прийти не только в основном цикле, но и как я понимаю при любой команде MDM.recieve
Выход я вижу в AT@CMGL с опцией "REC UNREAD". Не очень нравится, что постоянно придется обращаться к SIM-карте...

И вообще, зачем тогда вообще нужны и RING и +CMTI, если их прямое использование проблематично.
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jun 1 2012, 09:41
Сообщение #3


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

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(White_rat @ Jun 1 2012, 11:47) *
+CMTI может прийти не только в основном цикле, но и как я понимаю при любой команде MDM.recieve
Выход я вижу в AT@CMGL с опцией "REC UNREAD". Не очень нравится, что постоянно придется обращаться к SIM-карте...

И вообще, зачем тогда вообще нужны и RING и +CMTI, если их прямое использование проблематично.


Опрашивайте периодически используя AT+CMGL="REC UNREAD".
Я сам так делаю. Но перед опросом Вы должны проверить готовность SIM. Например AT#QSS=2\r - это настройка делается один раз, AT#QSS - проверка.

Будет так
AT#QSS
Ожидание OK
если 2,3 - можно читать СМС
иначе выход
AT+CMGL="REC UNREAD"
Ожидание OK
разгребание ответа.

В скрипте сложно выполнять поиск RING/CMTI т.к. он вклинивается в ответы на MDM.read.
Другое дело когда модем подключён к процессору. Там эти сообщения намного проще отловить особенно в режиме CMUX т.к. они приходят одним фрэймом, а вся работа с CMUX построена на ожидании фреймов. Да и если не в CMUX работать всёравно в обработчике сообщений от модема можно легко отловить RING/CMTI анализируя принятые строки (RING например приходит как RING\r\n\r\n CMTI скорее всего также)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- White_rat   Telit datacall   May 22 2012, 13:23
- - mempfis_   Если Вам мешают левые сообщения при попробуйте пер...   May 23 2012, 07:58
- - White_rat   Так вот и непонятно как это сделать. Вот фрагмент ...   May 24 2012, 08:53
|- - mempfis_   Если Вы хотите принимать datacall в MDM2 то и упра...   May 24 2012, 09:19
- - White_rat   Ну вообще говоря, у меня должно и по datacall и по...   May 24 2012, 09:56
|- - mempfis_   Для определения наличия входящего вызова можно лов...   May 24 2012, 15:54
- - White_rat   mempfis_, спасибо. Теперь все понятно. Проблему я ...   May 28 2012, 08:34
|- - mempfis_   Да там вроде буффериируется ответ. Не считали сейч...   May 28 2012, 13:15
- - White_rat   mempfis_, спасибо, все получилось. Автоподьем убра...   May 30 2012, 13:50
|- - mempfis_   CMUX вообще нужен для организации обмена данными п...   May 31 2012, 06:06
- - White_rat   Да, я так и понял, что ловить RING и CMTI не выход...   Jun 4 2012, 15:38
|- - mempfis_   Цитата(White_rat @ Jun 4 2012, 18:38) Раб...   Jun 5 2012, 06:46
- - White_rat   mempfis_,большое спасибо за помощь. Все получилось...   Jun 8 2012, 07:55
- - mempfis_   Цитата(White_rat @ Jun 8 2012, 10:55) mem...   Jun 8 2012, 12:07
- - mempfis_   Цитата(mempfis_ @ Jun 8 2012, 15:07) По п...   Jun 11 2012, 09:10


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 21:51
Рейтинг@Mail.ru


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