crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
> QtSerialport. Проблема с приемом данных.
Voronar
  опции профиля:
сообщение 31.3.2013, 16:12
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 13.2.2013
Пользователь №: 3709

Спасибо сказали: 0 раз(а)




Репутация:   0  


Здравствуйте. Взял в помощь эту библиотеку, чтобы общаться с Arduino.
Моя проблема заключается в следующем:

Написал прогу по приему данных с Arduino, но прием и отображение данных происходит не сразу. Сначала приходится через Arduino IDE помониторить порт(послать какой-то сигнал готовности), а после этого уже приходят желанные данные по сигналу readyRead() в соответствующий слот моей программы. Я так понимаю, что в моей программе не хватает какого-то метода, который говорит порту: "Я готов принимать от тебя данные, давай!". Не подскажите как называется этот метод?

Спасибо за внимание.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 1.4.2013, 8:42
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 393
Регистрация: 29.6.2009
Пользователь №: 862

Спасибо сказали: 36 раз(а)




Репутация:   7  


См. ответ на prog.org.ru
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ALeXUI
  опции профиля:
сообщение 1.4.2013, 11:03
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 19
Регистрация: 30.4.2011
Пользователь №: 2647

Спасибо сказали: 2 раз(а)




Репутация:   0  


kuzulis, Здравствуйте, я давно задавал вопрос, на другом форуме, к сожалению времени вернуться к нему не было а сейчас появилось, чтобы не плодить темы, спрошу здесь:

Имеется следующая проблема, при первом включении программы, программа сразу же зависает, при открывании ком порта. Если запустить HyperTerminal и считать данные с ком, и снова запустить программу, все прекрасно работает. В режиме дебага, данные корректо идут и считываются, даже первый раз.
Скорее всего зависание происходит на строчке где вызывается метод readall, он вызывается соответсвенно по сигналу readyread().
Уже месяц не могу понять в чем проблема? Может кто-то сталкивался с чем-то похожим?

Я обновился до последней версии, теперь программа не зависает. Но и данные сразу тоже не идут. Сначало все равно приходится открывать hyperterminal.


Класс отвечающей за соединение и первоначальный прием.

CSerialPort::CSerialPort(QWidget *parent)
{
    serial = new QSerialPort();    
}


QList<QString> CSerialPort::GiveAvaliableCom()
{
    QList<QString> List_Settings;
    foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        List_Settings.append(info.portName());
    }
    return List_Settings;
}

void CSerialPort::Slot_CSerialProt_OpenComPort(QString name)
{
    //устанавливаем настройки Com
    serial->setPortName(name);
    serial->setBaudRate(QSerialPort::Baud115200);
    serial->setDataBits(QSerialPort::Data8);
    serial->setParity(QSerialPort::NoParity);
    serial->setStopBits(QSerialPort::OneStop);
    serial->setFlowControl(QSerialPort::NoFlowControl);
    
if (serial->open(QIODevice::ReadWrite))
    {
        qDebug() << "Open is normal";
        emit Signal_CSerialPort_OpenIsNormal();
    }
    else
    {
        QMessageBox::critical(this, tr("Невозможно открыть порт"),
                              tr("Возможно порт занят"),
                              QMessageBox::Ok);
    }
}
void CSerialPort::Slot_CSerialProt_CloseComPOrt()
{
    serial->close();
    qDebug()<< "Close is normal";
}

void CSerialPort::Slot_ReadData_From_Com()
{

    QByteArray data;
    QApplication::processEvents();
    if (serial->error())  qDebug()<<"Eror"<<serial->errorString()<<"   "<<serial->error();
    data = serial->readAll();


    if (statusPRIorSON==0)
    {

        if (status==0)
        {
            emit Signal_CSerialPort_SendDataToIFRNS(data);
        }
        if (status==1)
        {
           ;
        }
        if (status==2)
        {
            emit Signal_CSerialPort_SendDataToXModem(data);
        }

    }
    else if(statusPRIorSON==1)
    {

        if (status==0)
        {
            emit Signal_CSerialPort_SendDataToPRI(data);
        }
        if (status==1)
        {
           ;
        }

    }
    else if(statusPRIorSON==2)
    {
        if (status==0)
        {
            emit Signal_CSerialPort_SendDataToIFRNS_struct1(data);
        }
        if (status==1)
        {
           ;
        }
    }

}

void CSerialPort::Slot_Write_to_Com(QByteArray data1)
{
    serial->write(data1);
}







в главном классе виджета коннект


connect(ComPort->serial,SIGNAL(readyRead()),ComPort,SLOT(Slot_ReadData_From_Com()));



if (serial->error())  qDebug()<<"Eror"<<serial->errorString()<<"   "<<serial->error();




Здесь выводится

Eror "Unknown error" 5
Eror "Unknown error" 5
Eror "Unknown error" 6
Eror "Unknown error" 6
Eror "Unknown error" 5
Eror "Unknown error" 5
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ALeXUI
  опции профиля:
сообщение 1.4.2013, 13:29
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 19
Регистрация: 30.4.2011
Пользователь №: 2647

Спасибо сказали: 2 раз(а)




Репутация:   0  


Спасибо уже помогли! Если у кого-то возникнут похожие проблемы, нужно сначало открывать ком-порт, а потом задавть его настройки!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 1.4.2013, 15:14
Сообщение #5


Активный участник
***

Группа: Участник
Сообщений: 393
Регистрация: 29.6.2009
Пользователь №: 862

Спасибо сказали: 36 раз(а)




Репутация:   7  


Это само собой разумеется! :)

В следующий раз просто надо читать документацию, смотреть примеры, и "включить мозг" в конце концов!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Voronar
  опции профиля:
сообщение 1.4.2013, 18:50
Сообщение #6


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 13.2.2013
Пользователь №: 3709

Спасибо сказали: 0 раз(а)




Репутация:   0  


Спасибо ALeXUI.

kuzulis, если бы он не был включен, я бы сюда не добрался с этим вопросом. :) Вполне себе нормальный вопрос начинающего. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ALeXUI
  опции профиля:
сообщение 2.4.2013, 0:43
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 19
Регистрация: 30.4.2011
Пользователь №: 2647

Спасибо сказали: 2 раз(а)




Репутация:   0  


kuzulis,
Цитата
В следующий раз просто надо читать документацию

Я бы с таким удовольствием её почитал, да где взять?
http://qt-project.org/wiki/QtSerialPort_Russian здесь про документацию все зачеркнуто....
Цитата
"включить мозг" в конце концов!

Так по логике сначала необходимо настроить соединение, а потом открывать его, из-за этого вся и путаница.

И ещё такой вопрос, сегодня столкнулся со следующей проблемой, первый раз пришлось работать с переходником usb com, как раз после того как обновился=)
После пересброса питания на плате, (но не всегда), такое ощущение, что не идет сигнал readyread(), и происходит это не всегда... Хотя при работе на компьютере с нормальным ком портом, такого замечено не было, поэтому не думаюь что косяк в программе.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 2.4.2013, 5:37
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(ALeXUI @ 2.4.2013, 2:43) *
Так по логике сначала необходимо настроить соединение, а потом открывать его, из-за этого вся и путаница.
И из-за текущей последовательности все наступали и будут наступать на грабли.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 2.4.2013, 10:11
Сообщение #9


Активный участник
***

Группа: Участник
Сообщений: 393
Регистрация: 29.6.2009
Пользователь №: 862

Спасибо сказали: 36 раз(а)




Репутация:   7  


Цитата(ALeXUI)
Я бы с таким удовольствием её почитал, да где взять?
http://qt-project.org/wiki/QtSerialPort_Russian здесь про документацию все зачеркнуто....

Скоро должна быть в открытом доступе на qt-project.org после того как ее допилят до того состояния чтобы не стыдно было :)

А пока что можно сгенерить самому, вот линк: http://www.prog.org.ru/index.php?topic=953...73488#msg173488


Цитата(ALeXUI)
Так по логике сначала необходимо настроить соединение, а потом открывать его, из-за этого вся и путаница.

Крайне неверное утверждение.
1. Ты не можешь что-то сконфигурировать не открыв это, т.е. не получив дескриптор у-ва. Это - раз.
2. Ты можешь переконфигурировать у-во в процессе его работы не закрывая его. Это - два.

Цитата(ALeXUI)
И ещё такой вопрос, сегодня столкнулся со следующей проблемой, первый раз пришлось работать с переходником usb com, как раз после того как обновился=)
После пересброса питания на плате, (но не всегда), такое ощущение, что не идет сигнал readyread(), и происходит это не всегда... Хотя при работе на компьютере с нормальным ком портом, такого замечено не было, поэтому не думаюь что косяк в программе.

Ну, я не телепат.
Дай полный HowTo как воспроизвести проблему и т.п.
Запости баг в багзиллу в конце концов с детальным описанием проблемы.

Вот тогда и есть смысл это обсуждать...


Цитата(Litkevich Yuriy @ 2.4.2013, 6:37) *
Цитата(ALeXUI @ 2.4.2013, 2:43) *
Так по логике сначала необходимо настроить соединение, а потом открывать его, из-за этого вся и путаница.
И из-за текущей последовательности все наступали и будут наступать на грабли.


Ну, это единственно верная последовательность. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.4.2013, 22:35
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kuzulis @ 2.4.2013, 12:11) *
единственно верная последовательность
вообще-то спорно.
Для меня, например, естественной является как раз та, что пишушие сюда и пытаются использовать.

И, я думаю, сюда писать по этому поводу буду ещё долго (таких как я много) :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V   1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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




RSS Текстовая версия Сейчас: 4.5.2024, 10:35