Russian Qt Forum

Qt => Общие вопросы => Тема начата: Alex123 от Январь 27, 2020, 11:46



Название: Как организовать работу с n- ым количеством портов QTSerial?
Отправлено: Alex123 от Январь 27, 2020, 11:46
Подскажите пожалуйста как сделать прием данных с  одновременным приемом с n-ым  количеством соm портов.
Если можете привести код был бы благодарен.
Проблема в том что я хочу все актион  связать с 1 слотом для чтения  данных.   Если делаю два соединения то в дебаге отображаются только данные последнего соединения.
привожу код:
В mainwindow. h объявил
 
Код:
  ConnectionCom *sPort;  /экземпляр класса ConnectionCom мой класс
Код ConnectionCom
 
Код:
  QSerialPort *serialPort; в ConnectionCom.h
Код:
 
Код ConnectionCom.cpp
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;
               }

}


В mainwindow.cpp делаю коннекты action со слотом
Код:
    connect(ui->actionSwelab_Alfa_1, SIGNAL(triggered()), this, SLOT(ComPortConnection()));
    connect(ui->actionSwelab_Alfa_2, SIGNAL(triggered()), this, SLOT(ComPortConnection()));

Слот ComPortConnection

Код:
void MainWindow::ComPortConnection(){
       QString port;

    static  QList<QString> data;
    if(QObject::sender()->objectName()=="actionSwelab_Alfa_1"){
           port="COM1";
           analizator="Swelab";
           data.append(port);
     }
     if(QObject::sender()->objectName()=="actionSwelab_Alfa_2"){
           port="COM3";
           analizator="Swelab";
            data.append(port);

     }
     if(QObject::sender()->objectName()=="actionMeldonic_1"){
           port="COM6";
           analizator="Medonic";
   data.append(port);
     }
     if(QObject::sender()->objectName()=="actionUrit_3020"){
          analizator="Urit3020";
          port="COM6";
          data.append(port);
     }


     sPort=new ConnectionCom();
       if(sPort->OpenConCom(port, 9600, 8,"none", 1, "none", false)==true){
             connect(sPort->serialPort,SIGNAL(readyRead()),this,SLOT(ReadDataSerial()));   //коннект для приема данных с ком порта.
       }
}
Код ReadDataSerial()
void MainWindow::ReadDataSerial(){

          QString byte;
          qDebug()<<sPort->serialPort->portName();

       //выводятся данные  только с com porta к которому подсоединился последним.
}

Подскажите плиз. Думаю проблема в экземпляре класса, скорее всего он перезаписывается. Но если я создаю объект внутри ComPortConnection, то он становится не видимым, в поле действия функции, т.е в ReadDataSerial  я не могу вывести  sPort->serialPort->portName(). так как объект не доступен. Я только новичок, не ругайте сильно :) подскажите плиз!!1


Название: Re: Как организовать работу с n- ым количеством портов QTSerial?
Отправлено: qate от Январь 27, 2020, 13:21
наворотил хз что, выдал тут куски - разбираться ?
на каждый порт - свой QSerialPort - вот так делай


Название: Re: Как организовать работу с n- ым количеством портов QTSerial?
Отправлено: Alex123 от Январь 27, 2020, 13:36
наворотил хз что, выдал тут куски - разбираться ?
на каждый порт - свой QSerialPort - вот так делай

Тут достаточно кода чтобы понять...если у тебя понимания как у меня, пож оставь эту тему


Название: Re: Как организовать работу с n- ым количеством портов QTSerial?
Отправлено: mifa1234 от Январь 27, 2020, 17:54
что если каждый порт "слушать" в отдельном потоке? это даст некоторый "одновременный прием". а потом вызывать через emit сигнал который будет обрабатывать принятые данные


Название: Re: Как организовать работу с n- ым количеством портов QTSerial?
Отправлено: qate от Январь 28, 2020, 09:58
что если каждый порт "слушать" в отдельном потоке?

скорость порта такая маленькая, что это лишние действия