Пришлось недавно заняться 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 меня ждет видимо то же самое Спасибо.
|