2013-12-10 1 views
1

Я использовал эту библиотеку в прошлом для Qt4, но в настоящее время я пытаюсь использовать ее в проекте, который включает в себя намного больше входящих данных. Когда я пытаюсь подключиться к правильному COM-порту в своей программе, он не показывает, какие пакеты не принимаются. Когда я использую другую терминальную программу, она показывает постоянный поток данных. После нескольких попыток подключения к COM-порту моя программа, наконец, подключается и работает правильно. Мне нужна моя программа для последовательного подключения к COM-порту при команде. Если есть кто-нибудь, у кого есть какие-то идеи о том, что может быть неправильно с моим кодом, я бы очень признателен вам за вашу помощь.Вопрос о несоответствующем подключении QtSerialport

#include <QtSerialPort/QSerialPort> 
#include <QtSerialPort/QSerialPortInfo> 

void MainWindow::comportSelected() 
{ 
    // If some other serial port is open then close it. 
    if(serial.isOpen()) 
     serial.close(); 

    if(ui->comportList->currentIndex() != 0) 
    { 
     serial.setDataBits(QSerialPort::Data8); 
     serial.setFlowControl(QSerialPort::NoFlowControl); 
     serial.setBaudRate(QSerialPort::Baud115200); 
     serial.setParity(QSerialPort::NoParity); 
     serial.setPort(comPortList.at(ui->comportList->currentIndex()-1)); 

     if(!serial.open(QIODevice::ReadWrite)) 
     { 
      QMessageBox::critical(this, tr("Error"), serial.errorString()); 
      ui->console->setEnabled(false); 

     } 

     else 
     { 
      connect((const QObject*)&serial, SIGNAL(readyRead()), this, SLOT(processPendingSerialData())); 

     } 
    } 
    else serial.close(); 
} 

Я тогда читать, как:

void MainWindow::processPendingSerialData() 
{ 
    // While there are bytes in the buffer. 
    while(serial.bytesAvailable() > 0) 
    { 
     // Read a byte. 
     serial.read((char *)&ch, 1); 

и т.д ...

ответ

1

Во-первых, ваш код выглядит безупречно. Я не вижу никаких проблем.

При этом я столкнулся с аналогичной проблемой при использовании виртуального COM-порта. Проблема в том, что реализация сигнала readyRead является специфическим драйвером устройства. Попробуйте запустить жесткое соединение и посмотрите, удастся ли вам устранить проблему.

+0

Спасибо, сэр, что сработало. Вы джентльмен и ученый. Я использовал виртуальный com-порт, когда я переключился на жесткую линию, он работал безупречно. – awpitt13