реклама на сайте
подробности

 
 
> Проблемы с передачей данных модем Centerion BGS2
Денис198375
сообщение Aug 26 2013, 13:31
Сообщение #1





Группа: Новичок
Сообщений: 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”
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
yanvasiij
сообщение Sep 13 2013, 06:36
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 13 2013, 08:34
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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: , но тут в зависимости чья инициатива для закрытия сокета.
Go to the top of the page
 
+Quote Post
yanvasiij
сообщение Sep 13 2013, 09:08
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 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 и проверять есть ли данные?
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 13 2013, 10:05
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(yanvasiij @ Sep 13 2013, 13:08) *
то есть я должен постоянно вызывать at^sisr и проверять есть ли данные?

А как Вы хотели бы?
Можно конечно выставить AT^SISR=0,1500 и если в бефере на текущий момент что-то есть, то придет порция из 1500 символов.
Представьте, что модем будет слать все что приходит. Т.е. если вторая сторона отправила сначала 100 кБ, потом еще 100 кБ...
Go to the top of the page
 
+Quote Post
yanvasiij
сообщение Sep 13 2013, 10:21
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 21:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01409 секунд с 7
ELECTRONIX ©2004-2016