Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие _ проблемы с чтением из ком-порта

Автор: Widget 19.10.2009, 16:50

Всем добрый день!
Есть ГПИ, который выводит данные из ком-порта в таблицу.Чтение порта происходит постоянно в отдельном потоке.Данные идут непрерывно!
Буквально через пару секунд после включения данные начинают выводится рывками.И самое интересное: если отключить устройство от ком порта данные еще некоторое время идут!
вот исходник:

Thread::Thread(QThread *parent)
    : QThread(parent)
{
    status=false;
    marker=0;
    num=0;
    serialDevice=new TSerialDevice("COM1");
    moveToThread(this);
}

Thread::~Thread()
{
    serialDevice->close();
    delete serialDevice;
    serialDevice=0;
}

void Thread::stop()
{
    status=false;
}

void Thread::run()
{
    status=true;
    if(!(serialDevice->open(QIODevice::ReadOnly|QIODevice::Unbuffered))){
        emit massage(serialDevice->deviceName()+" not open!");
        status=false;
    }
    setCOM();
    emit massage("baudrate=\t"+serialDevice->baudRate());
    while(status){
        read();
    }
    serialDevice->close();
    emit massage("Stop");
    return;
}

void Thread::read()
{
    nav_arr.clear();
    arr.clear();
//    marker=0;
//    num=0;
    arr=serialDevice->read(4);
    marker=(((arr.at(3)<<24)&0xFF000000)|((arr.at(2)<<16)&0xFF0000)
            |((arr.at(1)<<8)&0xFF00)|(arr.at(0)&0xFF));
    switch(marker){
    case 0x75868A53:
        arr+=serialDevice->read(4);
        num=(((arr.at(7)<<24) & 0xFF000000)|((arr.at(6)<<16) & 0xFF0000)|
            ((arr.at(5)<<8) & 0xFF00)|((arr.at(4)<<0) & 0xFF));
        nav_arr=serialDevice->read(88+24*num);
        emit data(nav_arr,marker,num);
        break;
    }
    return;
}

Автор: niXman 19.10.2009, 20:11

Модераторы, вставьте код в тэги, плиз)

Автор: Litkevich Yuriy 19.10.2009, 20:16

Ну надо посмотреть возможность настроек класса TSerialDevice. Может он аппаратный буфер сильно здоровый использует.
Или настройки самого порта.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)