crossplatform.ru

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


  Ответ в проблемы с чтением из ком-порта
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 19.10.2009, 20:16
  Ну надо посмотреть возможность настроек класса TSerialDevice. Может он аппаратный буфер сильно здоровый использует.
Или настройки самого порта.
niXman Дата 19.10.2009, 20:11
  Модераторы, вставьте код в тэги, плиз)
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;
}
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.7.2025, 14:16