|
|
  |
Проблемы с передачей данных модем Centerion BGS2 |
|
|
|
Aug 26 2013, 13:31
|
Группа: Новичок
Сообщений: 3
Регистрация: 10-11-11
Пользователь №: 68 245

|
Приборы тестировались в Украине, с оператором сотовой связи «Киевстар», проблем с передачей не было. А в России , с оператором сотовой связи «Билайн», работает не стабильно. Не всегда устанавливается соединение. Много обрывов связи в момент передачи.
Вот набор команд инициализаций соединения
AT^sics=0,conType,GPRS0 AT^sics=0,passwd,beeline AT^sics=0,user, beelin AT^sics=0,apn,” internet.beeline.ru” AT^siss=1,srvType,socket AT^siss=1,conId,0 AT^siss=1,address,”socktcp:// gta.com:9090”
|
|
|
|
|
Aug 26 2013, 14:54
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(Денис198375 @ Aug 26 2013, 17:31)  Приборы тестировались в Украине, с оператором сотовой связи «Киевстар», проблем с передачей не было. А в России , с оператором сотовой связи «Билайн», работает не стабильно. Не всегда устанавливается соединение. Много обрывов связи в момент передачи. Периодически (порядка раз в час) бывают ошибки 616 (network is down) или 640 (operation of service temporary not allowed). Обычно проходят самостоятельно от нескольких секунд до 2-3 минут, НО иногда все виснет наглухо и помогает только пересброс питания модема. Сам модем при этом работает: звонит, принимает звонки, уровень сигнала отличный, но не отвечает на команду AT^SISO=0.
|
|
|
|
|
Aug 27 2013, 12:32
|

Группа: Новичок
Сообщений: 7
Регистрация: 27-08-13
Пользователь №: 78 068

|
Для какой либо рекомендации лог желательно указать более полный. есть необязательный параметр INACT равный по умолчанию всего 20 секунд (время неактивности и зарыв GPRS) Для диагностики проблем TCP есть команда ^SISE
AT^sics=0,conType,GPRS0 формат подачи команд желательно использовать один регистр либо верхний либо нижний. об этом в документации написано. AT^SICS=.... at^sics=... Главное запомнить, каждая команда AT^SISO должна заканчиваться AT^SISC
|
|
|
|
|
Aug 27 2013, 15:08
|

Группа: Новичок
Сообщений: 7
Регистрация: 27-08-13
Пользователь №: 78 068

|
читаем док BGS2-E_ATC_V01.301 10.6 AT^SISO статус сервиса 6 DOWN (причину не рассматриваем) далее написано If a service in this state be sure to close it with AT^SISC before reopening it.
Будьте добры приберитесь за собой, а то понаоткрывали тут...
|
|
|
|
|
Sep 13 2013, 06:36
|
Местный
  
Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041

|
Нашёл тему по BGS2, поэтому пишу сюда. Передаю данные по жпрсу, для чтения данных использую команду at^sisr=0,8 (читаю по 8 символов из первого профиля). Согласно доке, если правильно понял, сигнал о том, что данные прилетели, служит асинхронно выскакивающая ^SISR: 0,1. Соединение устанавливается и, когда данные приходят, ^SISR: 0,1 выскакивает, данные читаются и обрабатываются. Но так происходит только один раз, самый первый раз. Дальше, когда данные приходят (а они точно приходят, ибо если насильно запустить at^sisr, данные можно считать), ^SISR: 0,1 НЕ выскакивает. В чем дело? Буду признателен за помощь. Кусок кода, вызываемый для обработки входящих, данных вот такой: Код if(uart0RxNotEmpty()==0) return; getResponseFromBgs2ByTime(buf,100); /* Прочитать есть ли данные в буфере. Запрашиваю, жду ответа TIME_TO_WAIT_COMMON и ответ ложу в buf */ if(bgs2Write("AT^SISR=0,8\r\n",13,buf,TIME_TO_WAIT_COMMON)==0) return;//100 /* Найте место, где заканчивается эхо */ while(buf[i]!='\n')i++; i++; /* если все отвалилось */ if(memCmp("^SISR: 0,-2",&buf[i],11)==0) { reconnectGprs(buf); return; } /* Считать сведения о принятых данных */ sscanf(&buf[i],"^SISR: %d,%d",&tmp,&dataLen); /* Не продолжать если данныx нет */ if(dataLen==0) return; /* Если данные есть, найти их начало */ i+=10; while(buf[i] != '\n')i++; memcpy(tmpBuf,&buf[i+1],10); /* Обработать данные */ if(processModbusMsg((unsigned char*)tmpBuf,(unsigned char*)buf,&dataLen) == 0) return; /* ответить */ memset(tmpBuf,0,100); sprintf(tmpBuf,"AT^SISW=0,%d\r\n",dataLen); sendStringToBgs2(tmpBuf,strlen(tmpBuf)); getResponseFromBgs2ByTime (tmpBuf,TIME_TO_WAIT_COMMON); sendStringToBgs2(buf,dataLen);
Сообщение отредактировал yanvasiij - Sep 13 2013, 07:02
|
|
|
|
|
Sep 13 2013, 08:34
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(yanvasiij @ Sep 13 2013, 10:36)  Передаю данные по жпрсу, для чтения данных использую команду at^sisr=0,8 (читаю по 8 символов из первого профиля). Согласно доке, если правильно понял, сигнал о том, что данные прилетели, служит асинхронно выскакивающая ^SISR: 0,1. Соединение устанавливается и, когда данные приходят, ^SISR: 0,1 выскакивает, данные читаются и обрабатываются. Но так происходит только один раз, самый первый раз. Дальше, когда данные приходят (а они точно приходят, ибо если насильно запустить at^sisr, данные можно считать), ^SISR: 0,1 НЕ выскакивает. В чем дело? Буду признателен за помощь. Насколько я понял, первый раз ^SISR: 0,1 приходит не с данными, а по факту свершения тройного рукопожатия TCP. В дальнейшем нужно вызывать AT^SISR=0,8, модем сначала ответит OK, а затем асинхронно ^SISR: 0,8 и выдаст принятые данные. При закрытии соединения также придет асинхронное ^SISR: , но тут в зависимости чья инициатива для закрытия сокета.
|
|
|
|
|
Sep 13 2013, 09:08
|
Местный
  
Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041

|
Цитата(adnega @ Sep 13 2013, 14:34)  Насколько я понял, первый раз ^SISR: 0,1 приходит не с данными, а по факту свершения тройного рукопожатия TCP. В дальнейшем нужно вызывать AT^SISR=0,8, модем сначала ответит OK, а затем асинхронно ^SISR: 0,8 и выдаст принятые данные. При закрытии соединения также придет асинхронное ^SISR: , но тут в зависимости чья инициатива для закрытия сокета. то есть я должен постоянно вызывать at^sisr и проверять есть ли данные?
|
|
|
|
|
Sep 13 2013, 10:21
|
Местный
  
Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041

|
Цитата(adnega @ Sep 13 2013, 16:05)  А как Вы хотели бы? Можно конечно выставить AT^SISR=0,1500 и если в бефере на текущий момент что-то есть, то придет порция из 1500 символов. Представьте, что модем будет слать все что приходит. Т.е. если вторая сторона отправила сначала 100 кБ, потом еще 100 кБ... Нет, я не "капризничаю". Так даже удобнее, не нужно ловить асинхронные сообщения. Просто этот момент был не понятен. Спасибо за помощь!
Сообщение отредактировал yanvasiij - Sep 13 2013, 10:21
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|