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

 
 
> Проблемы с передачей данных модем 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



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

 


RSS Текстовая версия Сейчас: 24th August 2025 - 10:00
Рейтинг@Mail.ru


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