Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: GPRS для чайников
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Сотовая связь и ее приложения
Страницы: 1, 2
CADiLO
О!

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

Согласен 100%

Бритва Окама - самое то: "Не надо изобретать сущностей сверх необходимого"
ISG2015
Подскажите ,а как идентифицировать оператора на SIM-карте? Запрашивать номер, вырезать первые цифры и по этим цифрам распзнавать?
Может быть есть элегантнее способ!?
Спс!.
RadikX
AT+COPS =0,2 // Отображение название оператора в цифровом виде
AT+COPS? // Чтение ID оператора

25001: MTS
25002: Megafon
25020: Tele2
25039: Utel
25099: Beeline

Если поискать, то можно найти полный список операторов мира с их кодами. Список не такой уж и большой.
ISG2015
А для Украины MNC кодами не поделится никто? rolleyes.gif

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

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

2. Какое время установки сессии? У меня получается зарегистрироваться в течении 10,55 сек. с момента подачи питания на модем и 2,28 сек. если модем уже был включен.
RadikX
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.
Регистрируется у вас долго, но это зависит от оператора.
ISG2015
RadikX, спасибо!
1. Не хватает "Life", UMC это МТС нынешний?

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


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



RadikX
Life - это торговая марка Астелит. а UMC - да, МТС до ребрендинга.
Правила формирований команд и ответов, а также базовый набор АТ-команд подробно описаны в документе "ITU-T Recommendation V.25 ter". В 99% процентах ответы обрамляются с двух сторон "концевиками" 0x0D 0x0A. Есть еще 1% который надо особо разбирать (вроде приглашение ввода при отправке SMS), ну да бог разработчикам протокола судья.
ISG2015
Цитата(RadikX @ May 27 2015, 03:10) *
Life - это торговая марка Астелит. а UMC - да, МТС до ребрендинга.
Правила формирований команд и ответов, а также базовый набор АТ-команд подробно описаны в документе "ITU-T Recommendation V.25 ter". В 99% процентах ответы обрамляются с двух сторон "концевиками" 0x0D 0x0A. Есть еще 1% который надо особо разбирать (вроде приглашение ввода при отправке SMS), ну да бог разработчикам протокола судья.


Да. Спасибо.
По поводу ответов модема: здорово что обрамляются с 2х сторон 0x0D 0x0A, это и правда замечательно! Я только не совсем понял почему для одной из команд в ответе нет "ОК" sm.gif Хорошо, это не главная часть ракеты так сказать, разберемся.
ISG2015
Доброго времени!
Пилю проект с модемами SIM900R. Столкнулся с такой траблой: время от времени в открытой UDP сессии происходит смена номера порта. То есть, IP не меняется, а вот порт меняется.
Так происходит если модем ничего не передает/принимает в течении приблизительно >8с. Это я так понимаю нормально?
У меня устройство выходит на связь с сервером реже (30с). Сервер отмечает у себя текущий слот с которого обратился модем. К тому времени когда мне необходимо обратится к модему/устройству данные по слоту(порту) устаревают.
Получается мне необходимо все время поддерживать линк отправкой/получением пакета только для того чтоб менялся порт слота?
Спасибо!
p_kav
Модуль тут не при чем, дело в операторе связи.
Они используют NAT, выпуская через шлюз множество клиентов. На всех клиентов получается всего около 64000 портов, поэтому настроены такие жесткие таймауты, чтобы не было ситуации когда все порты заняты.
Проблему можно решить купив услугу "Статический IP" или используя TCP - там таймауты помягче.
ISG2015
Спасибо! UDP выбрали для сокращения трафика. Буду вникать.
ISG2015
1. Подскажите, что если модем SIM900R часто аппаратно перегружается? Ну например в среднем один раз в час. Как это отразится на его работоспособности? Устройство работает круглосуточно, период эксплуатации 5-10 лет.

2. Как правильно "запарковать" модем перед аппаратным перегрузом? Нужно ли предварительно "powerkey" тискать? Обязательно ли за status-ом посматривать?

3. И как таки правильно закрыть GPRS (UDP сессия) ? Сейчас я делаю "AT+CIPSHUT" и жду "SHUT OK"

4. Часто ловлю ERROR на +CSTT= "internet". После "SHUT OK" предыдущей сессии проходит около 18с. Со второй попытки конектится.


Спасибо!
CADiLO
>>>Подскажите, что если модем SIM900R часто аппаратно перегружается? Ну например в среднем один раз в час.

Вопрос - а на пуркуа???
Работает и пусть себе работает - аппаратная перезагрузка это уже самый крайний случай.
ISG2015
Цитата(CADiLO @ Aug 29 2015, 13:14) *
>>>Подскажите, что если модем SIM900R часто аппаратно перегружается? Ну например в среднем один раз в час.

Вопрос - а на пуркуа???
Работает и пусть себе работает - аппаратная перезагрузка это уже самый крайний случай.


Идея была в том ,что при любой коллизии в GPRS линке - просто перегружать модем аппаратно. Не вдаваясь в подробности так сказать. Если у меня модем подключается к GPRS за 18с то мне легче и проще перегружать все сразу.
p_kav
Вижу подводный камень у такого решения: операторы часто округляют трафик полной или неполной сессии, а так же по времени. В случае каких-то проблем с передачей данных модуль будет часто перезагружаться, и счет за GPRS потом может не порадовать.

И что значит перезагружать аппаратно? По питанию? А может, перед этим попробовать дать ему команду AT+CFUN=1,1 чтобы он сам перезагрузился? Вполне штатный и безболезненный способ.
GeGeL
Цитата(ISG2015 @ Aug 29 2015, 19:43) *
Идея была в том ,что при любой коллизии в GPRS линке - просто перегружать модем аппаратно. Не вдаваясь в подробности так сказать. Если у меня модем подключается к GPRS за 18с то мне легче и проще перегружать все сразу.


А что в вашем случае считается коллизией? Т.е. какой алгоритм определения ситуации, когда надо перезагрузить модем.
Я тоже обычно перезагружаю, но только после серии проверок. Частые жесткие перезапуски несут еще один подводный камень: операторы могут резервировать средства для открытия очередной GPRS-сессии, и временно держать резервы от прошлых сессий. В итоге, при положительном балансе, получаем нехватку средств даже для звонка, аж до возврата резервов (обычно в конце суток).
ISG2015
Да, вы правы, что то не так в таком подходе.
Тогда помогите разобраться с тем как:
1. Правильно завершить сессию GPRS (UDP)? Сейчас я выполняю AT+CIPSHUT и жду ОК. Но на форуме читал что ОК может и прийти а сессия еще "висеть".
2. Как запарковать правильно модем? Ведь даже если я буду перегружать модем в исключительных ситуациях, тогда, когда уже ничего другое не помогает, то как бы нужно правильно его подготовить к аппаратному (по-питанию) перегрузу!


Цитата(GeGeL @ Aug 29 2015, 21:21) *
А что в вашем случае считается коллизией? Т.е. какой алгоритм определения ситуации, когда надо перезагрузить модем.


А вот что угодно: при попытке подключиться на любую из команд ERROR - перезагрузка, при отправке пакета получили ERROR или PDP DEACT - перезагрузка.
ISG2015
3. Еще не совсем понимаю почему модем подключается к GPRS с неправильным APN!? о_О Как тарифицируется все если я неправильно указал APN?
p_kav
Цитата(ISG2015 @ Aug 30 2015, 08:31) *
2. Как запарковать правильно модем? Ведь даже если я буду перегружать модем в исключительных ситуациях, тогда, когда уже ничего другое не помогает, то как бы нужно правильно его подготовить к аппаратному (по-питанию) перегрузу!


Да никак не надо, он при корректном выключении/перезагрузке сам завершает все сессии и посылает оператору сигнал о снятии регистрации в сети. Просто нужно дождаться пока STATUS уйдет в 0.

Цитата(ISG2015 @ Aug 30 2015, 12:46) *
3. Еще не совсем понимаю почему модем подключается к GPRS с неправильным APN!? о_О Как тарифицируется все если я неправильно указал APN?


Зависит от оператора, у Мегафона даже есть услуга "Интернет без настроек", когда можно писать в APN/Login/Password любой бред. Тарификация так же зависит от честности оператора. также нужно учесть такой момент, что GPRS может устанавливаться, но все пакеты срезаться, а любой HTTP-запрос перенаправляться на специальную страницу оператора.
ISG2015
p_kav, а я однако за STATUS совсем не слежуsad.gif Нужно разбираться с этим делом ,конечно не годится никуда рвать сессии и потом иметь неприятности с опером.
GeGeL
Наверное, стоит разделить логику обработки ваших "коллизий" при подключении к GPRS и во время работы. При неудачном подключении сессии как таковой еще нет, поэтому перезагрузка не так страшна. Обычно я запускаю таймер при первой попытке подключения и затем многократно пытаюсь подключиться корректно (без перезапуска). Перезапуск - по таймауту (скажем, 5 минут неудачных попыток). Еще лучше использовать внешний вотчдог на PIC, блокируемый меандром, генерируемым модулем при успешном подключении.
Что касается внештатных ситуаций во время работы, то в случае с UDP - это отсутствие подтверждения от сервера на определенное к-во отправленных пакетов. После этого - отсутствие ответов на несколько пингов или UDP-DNS-запросов, например, google.com, отправленных на 8.8.8.8:53 (запрос формируется по шаблону, ответ детектируется по порту). Тут уже можно деактивировать GPRS и запускать таймер рестарта (тушить меандр) и процедуру запуска GPRS.
Но такая ситуация возможна и в случае кратковременного выхода из покрытия GSM, так что есть смысл дополнительно проверить сигнал, и увеличить (но не бесконечно!) таймаут рестарта в случае слабого сигнала. Где-то так...
А вообще-то хорошо продуманный и практически выверенный алгоритм обработки таких ситуаций - это та "изюминка", которая определит качество работы вашего устройства в целом с точки зрения пользователя.
ISG2015
Цитата(GeGeL @ Aug 31 2015, 06:09) *
хорошо продуманный и практически выверенный алгоритм обработки таких ситуаций - это та "изюминка", которая определит качество работы вашего устройства в целом


Трудно в вами не согласиться. Спасибо!
glader
Цитата(CADiLO @ May 13 2015, 10:24) *
И если будете делать свой внешний стек, то тогда посмотрите в сторону 3G модуля SIM5350.
Там нет встроенного TCP/UDP стека, зато умеет работать в два потока IP/V4 и IP/V6 в любой комбинации.
Идеальный модуль под внешний стек - быстрый и для 3G недорогой.


Вот если б с ним можно было работать по PPP. На команду ATD*99# всегда отвечает ERROR.
CADiLO
>>>>Вот если б с ним можно было работать по PPP

SIMCOM_SIM5350_ATC_EN_V1.02 - сделайте поиск PPP по документу sm.gif
glader
Цитата(CADiLO @ Jul 18 2018, 16:24) *
SIMCOM_SIM5350_ATC_EN_V1.02 - сделайте поиск PPP по документу sm.gif

OK. Сигнатура 'PPP' встречается для 4-х команд, причем всегда для вида 'Test command':
1) CGDCONT - сигнатура появляется для пар-ра PDP_type; на деле же, как видно из листинга,
SIM5350 не допускает типа 'PPP' для PDP-context. Второй случай появления этой сигнатуры
в этой команде - это примеры. По всей видимости, SIMCom не подкорректировала мануал;
2) CGQREQ & CGQMIN - на эти 2 команды запроса QOS модуль отвечает ERROR вопреки мануалу;
3) CGEQREQ - аналогично пункту 1).

CODE
AT+CGMR

AT+CGMR
+CGMR: 1231B02SIM5350E
AT+CGDCONT=1,"IP","internet"

AT+CGDCONT=1,"IP","internet"
OK
AT+CGDCONT=?
AT+CGDCONT=?
+CGDCONT: (1-6),"IP",,,(0),(0),(0-1)
+CGDCONT: (1-6),"IPV6",,,(0),(0),(0-1)
+CGDCONT: (1-6),"IPV4V6",,,(0),(0),(0-1)
OK
AT+CGQREQ=?

AT+CGQREQ=?
ERROR
AT+CGQMIN=?

AT+CGQMIN=?
ERROR
AT+CGEQREQ=?

AT+CGEQREQ=?
+CGEQREQ: "IP", (0-4), (0-256000), (0-256000), (0-256000), (0-256000),(0-2), (0, 10-1500, 1502, 1510, 1520), ("0E0","1E2","7E3","1E3","1E4","1E5","1E6","1E1"), ("0E0","5E2","1E2","5E3","4E3","1E3","1E4","1E5","1E6","6E8"), (0-3), (0, 10-150, 200-950, 1000-4000), (0-3)
+CGEQREQ: "IPV6", (0-4), (0-256000), (0-256000), (0-256000), (0-256000),(0-2), (0, 10-1500, 1502, 1510, 1520), ("0E0","1E2","7E3","1E3","1E4","1E5","1E6","1E1"), ("0E0","5E2","1E2","5E3","4E3","1E3","1E4","1E5","1E6","6E8"), (0-3), (0, 10-150, 200-950, 1000-4000), (0-3)
+CGEQREQ: "IPV4V6", (0-4), (0-256000), (0-256000), (0-256000), (0-256000),(0-2), (0, 10-1500, 1502, 1510, 1520), ("0E0","1E2","7E3","1E3","1E4","1E5","1E6","1E1"), ("0E0","5E2","1E2","5E3","4E3","1E3","1E4","1E5","1E6","6E8"), (0-3), (0, 10-150, 200-950, 1000-4000), (0-3)
OK
ATD*99#
ATD*99#
ERROR
OK
ATD*99***1#

ATD*99***1#
ERROR

CADiLO
Попробуйте обновиться на 1231B03SIM5350E.
Хотя ответ "PPP" в теле 02 прошивки тоже есть.
Нет отладки под рукою чтобы проверить.
glader
Цитата(CADiLO @ Jul 20 2018, 08:14) *
Хотя ответ "PPP" в теле 02 прошивки тоже есть.


Техническая спецификация https://www.etsi.org/deliver/etsi_ts/127000...060v090100p.pdf,
описывающая требования для TE - MT взаимодействия над R-опорной точкой для сред пакетной передачи для
IP-базированных сервисов определяет 2 протокола, способных нести IP-кадры над R-точкой: L2 (например,
PPP MCML - RFC 2686) и PPP.

Спецификация определяет также возможную последовательность событий
для внешней программы (TE) и модуля (MT), когда выбран PPP:
после того, как пользователь подписался только на один контекст PDP (типа IP)
- the MT begins in V.25 command state:
- TE -> MT: AT<Packet Domain-specific configuration commands, if required>;
- MT -> TE: OK.
- the TE sends a dial command requesting the Packet Switched service:
- TE -> MT: ATD*99#;
- MT -> TE CONNECT.
- ...
SIM5350 (версия 02) на ATD*99# отвечает ERROR, да и в означенном мануале она отсутствует.
Кто-нибудь связывался с SIM5350 (моделью "быстрой и недорогой") для организации GPRS?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.