Russian Qt Forum
Март 28, 2024, 11:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как организовать работу с n- ым количеством портов QTSerial?  (Прочитано 2971 раз)
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
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #1 : Январь 27, 2020, 13:21 »

наворотил хз что, выдал тут куски - разбираться ?
на каждый порт - свой QSerialPort - вот так делай
Записан
Alex123
Гость
« Ответ #2 : Январь 27, 2020, 13:36 »

наворотил хз что, выдал тут куски - разбираться ?
на каждый порт - свой QSerialPort - вот так делай

Тут достаточно кода чтобы понять...если у тебя понимания как у меня, пож оставь эту тему
Записан
mifa1234
Гость
« Ответ #3 : Январь 27, 2020, 17:54 »

что если каждый порт "слушать" в отдельном потоке? это даст некоторый "одновременный прием". а потом вызывать через emit сигнал который будет обрабатывать принятые данные
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #4 : Январь 28, 2020, 09:58 »

что если каждый порт "слушать" в отдельном потоке?

скорость порта такая маленькая, что это лишние действия
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 22.