Перейти к содержанию
    

CADiLO

Так там же куча всяких URC может приходить, про SMS, про регистрацию в сети, про выход питающего напряжения за пределы... Их что, все отключать перед каждым запросом и включать после него? Хотелось бы услышать совет из практики.

 

ISG2015

А SIM-карту в устройство будет вставлять пользователь, или вы сами? Если пользователь, то у какого-то оператора наверняка найдется какой-то тариф с дорогими разговорами и дешевым трафиком. У меня GPS-трекер с SIM-картой Мегафон и тарифом "Мегафон-Онлайн" уже года три на 300 рублях катается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Насколько я помню, вывод текста SMS это тело команды и до ОК прервано быть не может.

Я перепроверю конечно, но скорее всего что в текст SMS подмешаться URC не может.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

CADiLO

А остальные команды? AT+CNETSCAN, AT+CENG, AT+HTTPREAD, AT+CIPGSMLOC, которого ждать надо пару секунд? Во все не могут пролезть? На сколько я помню по экспериментам с SIM908, пролезают ещё как (правда, не помню версию прошивки, на которой тестировал). Если бы не пролезали, алгоритм конечного автомата управления модулем можно было бы очень упростить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите, где взять прошивку для SIM900R? Мне нужно сбросить модем в заводские настройки. Спс!

 

UPD

Вопрос снимается, разобрался.

Изменено пользователем ISG2015

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Вот как люди умудряются усложнять себе жизнь... Я давно работаю с Quectel ОЦПУ, и никогда не сталкивался с проблемами в этом плане. Конечно, при ожидании ответа на АТ-запрос может прийти левый URC, но ведь все равно все должно проверяться, перед тем, как парситься. Т.е. одной state-машины недостаточно, надо каждые данные парсить и проверять на соответствие ожидаемым. Для этого используется strstr. Ради интереса посмотрите код Quectel RIL (от производителя). Там обработчик события UART с подключаемыми парсерами, которые формируют callback-и.

 

Честно, тут я категорически не согласен со Stanley - он пошел на поводу юзерофильности, и потерялась изящность и прозрачность предыдущих версий ОЦПУ с опросом getEvent в цикле. Теперь фиг поймешь, в контексте какой нити выполняются callback-и и какие данные защищать мутексами. Но зато школьники тащутся - привычная и уютная среда...

 

Не заморачивайтесь на абстракциях. Просто попробуйте сесть, сосредоточиться и ясно представить, как реально будет идти обмен с модулем, и предвидеть по возможности все ситуации, а также предусмотреть вывод отладочного лога с указанием номеров строк и параметров.

ПС: АТ-ответы и URC никогда не разрываются другими URC - все становится в очередь. Любой ответ и URC, как правило, имеет префикс, указывающий на его принадлежность.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

О!

 

>>>Не заморачивайтесь на абстракциях.

 

Согласен 100%

 

Бритва Окама - самое то: "Не надо изобретать сущностей сверх необходимого"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите ,а как идентифицировать оператора на SIM-карте? Запрашивать номер, вырезать первые цифры и по этим цифрам распзнавать?

Может быть есть элегантнее способ!?

Спс!.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

AT+COPS =0,2 // Отображение название оператора в цифровом виде

AT+COPS? // Чтение ID оператора

 

25001: MTS

25002: Megafon

25020: Tele2

25039: Utel

25099: Beeline

 

Если поискать, то можно найти полный список операторов мира с их кодами. Список не такой уж и большой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А для Украины MNC кодами не поделится никто? :rolleyes:

 

Пишу свою реализацию работы с модемом. Наметилось несколько вопросов:

1. При инициализации UDP сокета, команда "AT+CIFSR" возвращает локальный адрес, но не возвращает финального "ОК"! Я анализирую ответ от модема и считаю, что команда выполнена успешна именно по этому "ОК". Получается как то не але :) Приходится городить что то типа такого:

if ( SearchRespondSIM900( "OK" ) || SearchRespondSIM900( "." ) )

Точка является разделителем в IP адресе, но вполне может встретиться еще где-то.

 

2. Какое время установки сессии? У меня получается зарегистрироваться в течении 10,55 сек. с момента подачи питания на модем и 2,28 сек. если модем уже был включен.

Изменено пользователем ISG2015

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1.

Для Украины код MCC = 255, а идентификатор MNC присваивается в порядке регистрации:

- MNC:01 Ukrаinian Mobile Communication, UMC;

- MNC:02 Ukrainian Radio Systеms, URS;

- MNC:03 Kyivstаr GSM;

- MNC:04 Internаtional Telecommunications Ltd;

- MNC:05 Gоlden Telecom;

- MNC:06 Astelit;

- MNC:07 Ukrtelecom;

- MNC:21 CJSC - Telеsystems of Ukraine.

2.

AT+CIFSR является неподтверждаемой (без OK), и таких команд достаточно много. Ищите блоками заканчивающимися на концевик 0x0D 0x0A, большинство из них имеют префикс для распознавания ("+CREG:", например). Я пришедшие блоки маркирую в отдельном буфере и ищу ответы уже по нему.

 

Прототип функции обработки команд:

TStruct_OpResult AtOp_Template(TStruct_AtCommand *MyAtCommand, uint8_t CmdAnswer, bool IsUnsolicited, uint8_t RepeatCmd, uint16_t RepeatAnswer, bool ClearAnswerBuf);

 

Пример для AT+CIFSR:

 

AtOp_Template(AtCommand, cCmdData, TRUE, 3, 30, TRUE); - Ищем данные без префикса, подтверждающий OK не требуется, 3 повтора при неответе, ищем ответ 30 циклов, очистить перед посылкой буфер ответов;

 

3.

Регистрируется у вас долго, но это зависит от оператора.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

RadikX, спасибо!

1. Не хватает "Life", UMC это МТС нынешний?

 

2. На сколько я понял 0x0D 0x0A обрамляются все ответы модема. При этом с 2х сторон непосредственно ответа. Короче мне пока не ясно это дело.

Bezymiannyi.png

 

3. Записывал на логическом анализаторе пакеты в обе стороны. Внимательно анализировал результаты. Судя по результатам все более менее ок.

Bezymiannyi2.png

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Life - это торговая марка Астелит. а UMC - да, МТС до ребрендинга.

Правила формирований команд и ответов, а также базовый набор АТ-команд подробно описаны в документе "ITU-T Recommendation V.25 ter". В 99% процентах ответы обрамляются с двух сторон "концевиками" 0x0D 0x0A. Есть еще 1% который надо особо разбирать (вроде приглашение ввода при отправке SMS), ну да бог разработчикам протокола судья.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Life - это торговая марка Астелит. а UMC - да, МТС до ребрендинга.

Правила формирований команд и ответов, а также базовый набор АТ-команд подробно описаны в документе "ITU-T Recommendation V.25 ter". В 99% процентах ответы обрамляются с двух сторон "концевиками" 0x0D 0x0A. Есть еще 1% который надо особо разбирать (вроде приглашение ввода при отправке SMS), ну да бог разработчикам протокола судья.

 

Да. Спасибо.

По поводу ответов модема: здорово что обрамляются с 2х сторон 0x0D 0x0A, это и правда замечательно! Я только не совсем понял почему для одной из команд в ответе нет "ОК" :) Хорошо, это не главная часть ракеты так сказать, разберемся.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Доброго времени!

Пилю проект с модемами SIM900R. Столкнулся с такой траблой: время от времени в открытой UDP сессии происходит смена номера порта. То есть, IP не меняется, а вот порт меняется.

Так происходит если модем ничего не передает/принимает в течении приблизительно >8с. Это я так понимаю нормально?

У меня устройство выходит на связь с сервером реже (30с). Сервер отмечает у себя текущий слот с которого обратился модем. К тому времени когда мне необходимо обратится к модему/устройству данные по слоту(порту) устаревают.

Получается мне необходимо все время поддерживать линк отправкой/получением пакета только для того чтоб менялся порт слота?

Спасибо!

Изменено пользователем ISG2015

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Модуль тут не при чем, дело в операторе связи.

Они используют NAT, выпуская через шлюз множество клиентов. На всех клиентов получается всего около 64000 портов, поэтому настроены такие жесткие таймауты, чтобы не было ситуации когда все порты заняты.

Проблему можно решить купив услугу "Статический IP" или используя TCP - там таймауты помягче.

Изменено пользователем p_kav

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...