Название: Как организовать работу с 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
что если каждый порт "слушать" в отдельном потоке?
скорость порта такая маленькая, что это лишние действия
|