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

Проблемы с передачей данных модем Centerion BGS2

Приборы тестировались в Украине, с оператором сотовой связи «Киевстар», проблем с передачей не было.

А в России , с оператором сотовой связи «Билайн», работает не стабильно. Не всегда устанавливается соединение. Много обрывов связи в момент передачи.

 

Вот набор команд инициализаций соединения

 

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”

 

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


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

Приборы тестировались в Украине, с оператором сотовой связи «Киевстар», проблем с передачей не было.

А в России , с оператором сотовой связи «Билайн», работает не стабильно. Не всегда устанавливается соединение. Много обрывов связи в момент передачи.

Периодически (порядка раз в час) бывают ошибки 616 (network is down) или 640 (operation of service temporary not allowed).

Обычно проходят самостоятельно от нескольких секунд до 2-3 минут, НО иногда все виснет наглухо и помогает только пересброс питания модема. Сам модем при этом работает: звонит, принимает звонки, уровень сигнала отличный, но не отвечает на команду AT^SISO=0.

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


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

У билайна вообще есть какое-то ограничение на длительность сессии. Больше часа соединение не держится, уровень сигнала при этом отличный.. Это из моего опыта по интернету билайн через 3G модем.

 

BGS2 тут не причем. Наблюдаю такие же проблемы с сим900. У нас в Перми в информационных табло, заменяют сейчас симки билайн на мтс, потому как вообще просто перестает работать GPRS.

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


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

Для какой либо рекомендации лог желательно указать более полный.

есть необязательный параметр INACT равный по умолчанию всего 20 секунд (время неактивности и зарыв GPRS)

Для диагностики проблем TCP есть команда ^SISE

 

AT^sics=0,conType,GPRS0

формат подачи команд желательно использовать один регистр либо верхний либо нижний. об этом в документации написано.

AT^SICS=....

at^sics=...

Главное запомнить, каждая команда AT^SISO должна заканчиваться AT^SISC

 

 

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


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

Главное запомнить, каждая команда AT^SISO должна заканчиваться AT^SISC

Можно поподробней?

Если соединение разрывает сервер (которому уже нечего передавать), то AT^SISC нужен?

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


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

читаем док 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.

 

Будьте добры приберитесь за собой, а то понаоткрывали тут...

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


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

читаем док 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.

Спасибо. Попробую.

Но без AT^SISC все работает годами (просто, спустя какое-то время делаю AT^SISO и сокет открывается).

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


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

Нашёл тему по 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

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


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

Передаю данные по жпрсу, для чтения данных использую команду 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: , но тут в зависимости чья инициатива для закрытия сокета.

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


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

Насколько я понял, первый раз ^SISR: 0,1 приходит не с данными, а по факту свершения тройного рукопожатия TCP.

В дальнейшем нужно вызывать AT^SISR=0,8, модем сначала ответит OK, а затем асинхронно ^SISR: 0,8 и выдаст принятые данные.

При закрытии соединения также придет асинхронное ^SISR: , но тут в зависимости чья инициатива для закрытия сокета.

то есть я должен постоянно вызывать at^sisr и проверять есть ли данные?

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


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

то есть я должен постоянно вызывать at^sisr и проверять есть ли данные?

А как Вы хотели бы?

Можно конечно выставить AT^SISR=0,1500 и если в бефере на текущий момент что-то есть, то придет порция из 1500 символов.

Представьте, что модем будет слать все что приходит. Т.е. если вторая сторона отправила сначала 100 кБ, потом еще 100 кБ...

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


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

А как Вы хотели бы?

Можно конечно выставить AT^SISR=0,1500 и если в бефере на текущий момент что-то есть, то придет порция из 1500 символов.

Представьте, что модем будет слать все что приходит. Т.е. если вторая сторона отправила сначала 100 кБ, потом еще 100 кБ...

Нет, я не "капризничаю". Так даже удобнее, не нужно ловить асинхронные сообщения. Просто этот момент был не понятен. Спасибо за помощь!

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

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


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

Нет, я не "капризничаю". Так даже удобнее, не нужно ловить асинхронные сообщения. Просто этот момент был не понятен. Спасибо за помощь!

Я в этом не уверен. Скорее и у самого нет полного понимания. Кстати, когда соединение рвет вторая сторона у меня у самого не все хорошо.

Редко, но бывает события приходят не те, которые приходят обычно. Лог как-нить могу скинуть.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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