@AlexSer

Как в QT сделать одновременный прием с двух ком портов?

Всем привет как организовать однвременный прием данных с двух ком портов. Вроде соединение делаю,
и оба ком порта соединяются, но данные в debug идут только последнему порту, который подключил.
делаю коннекты актионов:
    connect(ui->actionSwelab_Alfa_1, SIGNAL(triggered()), this, SLOT(ComPortConnection()));
    connect(ui->actionSwelab_Alfa_2, SIGNAL(triggered()), this, SLOT(ComPortConnection()));
    connect(ui->actionMeldonic_1, SIGNAL(triggered()), this, SLOT(ComPortConnection()));
    connect(ui->actionUrit_3020, SIGNAL(triggered()), this, SLOT(ComPortConnection()));

Слот COmPOrtConnect:
sPort=new ConnectionCom();  //класс соединения с ком портом
         if(sPort->OpenConCom(port, 9600, 8,"none", 1, "none", false)==true){
                 ui->terminal->append(port+" соединение открыто");
                 if(QObject::sender()->objectName()=="actionSwelab_Alfa_1"){
                     ui->actionSwelab_Alfa_1->setEnabled(false);
                 }
                      //выводим сообщение
                 QMessageBox::information(this, "Внимание","Соединение с "+port+" установлено успешно");
                connect(sPort->serialPort,SIGNAL(readyRead()),this,SLOT(ReadDataSerial()));
                 ui->terminal->append("Получение данных с анализатора  " + analizator+ " по порту " + sPort->serialPort->portName());
                 qDebug()<<"Получение данных с анализатора  " + analizator+ " по порту " + sPort->serialPort->portName();

         }else{
               QMessageBox::warning(this, "Внимание","Порт "+port+" не доступен!");
               ui->terminal->append(port+"соединение не доступно");
         }


Класс соединения с корм портом:
bool ConnectionCom::OpenConCom(QString port, int baudrate, int bits, QString parity, int stopBits, QString flowControl, bool CTS_RTS){
               serialPort=new QSerialPort();
               serialPort->setPortName(port);
               serialPort->setBaudRate(baudrate);
               serialPort->setDataBits(QSerialPort::Data8);
               serialPort->setParity(QSerialPort::NoParity);
               serialPort->setStopBits(QSerialPort::OneStop);
               serialPort->setFlowControl(QSerialPort::NoFlowControl);

               if(CTS_RTS==true){
                   serialPort->setRequestToSend(true);
                   serialPort->setDataTerminalReady(true);
               }
               serialPort->open(QIODevice::ReadOnly);
               if(serialPort->isOpen()){

                   return  true;
               }else{
                   return false;
               }

}

Чтение данных:
void MainWindow::ReadDataSerial(){
    QString byte;
    byte = sPort->serialPort->readAll();
      ui->terminal->append("Принятые данные  по порту"+sPort->serialPort->portName()+"\n" + byte);
 qDebug()<<byte;

    }



}


В чем проблема, подскажите плиз. Прием данных идет только по порту, к которому подключился последним, по первому порту только пустые значения в дебаге.
  • Вопрос задан
  • 488 просмотров
Решения вопроса 1
@Fatus
Инженер-электроник
Может, стоит объявить ещё экземпляр класса ConnectionCom() (не один sPort, а два sPort1 и sPort2). Для каждого COM-порта свой экземпляр. И в слоте делать проверку, если уже один COM-порт используется, создать второй экземпляр, и в нём открывать второй COM-порт.
Или в ConnectionCom() иметь два экземпляра QSerialPort() (serialPort1 и serialPort2).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы