#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connectToAllPorts();
connect(ports[0], SIGNAL(readyRead()), this, SLOT(readPort()));
connect(ports[1], SIGNAL(readyRead()), this, SLOT(readPort()));
connect(ports[2], SIGNAL(readyRead()), this, SLOT(readPort()));
connect(ports[3], SIGNAL(readyRead()), this, SLOT(readPort()));
connect(ports[4], SIGNAL(readyRead()), this, SLOT(readPort()));
}
//------------------------------------------------------------------------------
MainWindow::~MainWindow()
{
delete ui;
}
//------------------------------------------------------------------------------
void MainWindow::connectToAllPorts()
{
QList<QSerialPortInfo> availablePorts = QSerialPortInfo::availablePorts();
// ищем доступные порты
for (const QSerialPortInfo &portInfo : availablePorts)
{
QSerialPort *port = new QSerialPort(portInfo);
// Устанавливаем параметры, скорость и т.д.
port->setPortName(portInfo.portName());
port->setBaudRate(QSerialPort::Baud9600);
port->setDataBits(QSerialPort::Data8);
port->setParity(QSerialPort::EvenParity);
port->setStopBits(QSerialPort::OneStop);
port->setFlowControl(QSerialPort::NoFlowControl);
// Открываем порт
qDebug() << "Серийный номер: " << portInfo.serialNumber();
if (port->open(QIODevice::ReadWrite))
{
ports.append(port);
qDebug() << "Порт" << portInfo.portName() << "успешно открыт для чтения и записи";
}
else
{
qDebug() << "Ошибка при открытии порта" << portInfo.portName();
delete port; // Освобождаем память, если порт не удалось открыть
}
}
}
//------------------------------------------------------------------------------
void MainWindow::on_sendButton_clicked() // также пробую отправить в ком-порт
{
// Отправка сообщения через порт
QString textStr = "message";
QByteArray data = QByteArray(ui->sendLineEdit->text().toStdString().c_str());//QByteArray(textStr.toStdString().c_str()); //QByteArray data = "message";
ports[1]->write(data);
ports[2]->write(data);
ports[3]->write(data);
ports[4]->write(data);
}
//------------------------------------------------------------------------------
void MainWindow::readPort()
{
if(ports[0]->bytesAvailable() > 0)
{
QByteArray receivedData = ports[0]->readAll();
qDebug() << "\nsize: " << receivedData.size();
qDebug() << "Received data ports[0]: " << receivedData;
}
if(ports[1]->bytesAvailable() > 0)
{
QByteArray receivedData = ports[1]->readAll();
qDebug() << "\nsize: " << receivedData.size();
qDebug() << "Received data ports[1]: " << receivedData;
}
if(ports[2]->bytesAvailable() > 0)
{
QByteArray receivedData = ports[2]->readAll();
qDebug() << "\nsize: " << receivedData.size();
qDebug() << "Received data ports[2]: " << receivedData;
}
if(ports[3]->bytesAvailable() > 0)
{
QByteArray receivedData = ports[3]->readAll();
qDebug() << "\nsize: " << receivedData.size();
qDebug() << "Received data ports[3]: " << receivedData;
}
if(ports[4]->bytesAvailable() > 0)
{
QByteArray receivedData = ports[4]->readAll();
qDebug() << "\nsize: " << receivedData.size();
qDebug() << "Received data ports[4]: " << receivedData;
}
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#define CHANNEL_1 "..."
#define CHANNEL_2 "..."
...
#define CHANNEL_16 "..."
#include <QMainWindow>
#include <QThread>
#include <QSerialPortInfo>
#include <QSerialPort>
#include <QDebug>
#include <QVector>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_sendButton_clicked();
void on_pushButton_6_clicked();
void readPort();
private:
Ui::MainWindow *ui;
QVector<QSerialPort*> ports;
QByteArray message;
QSerialPort *m_comPort;
void connectToAllPorts();
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connectToAllPorts();
}
//------------------------------------------------------------------------------
MainWindow::~MainWindow()
{
delete ui;
}
//------------------------------------------------------------------------------
void MainWindow::connectToAllPorts()
{
QList<QSerialPortInfo> availablePorts = QSerialPortInfo::availablePorts();
for (const QSerialPortInfo &portInfo : availablePorts)
{
QSerialPort *port = new QSerialPort(portInfo);
// Подбираем параметры, скорость и т.д.
port->setBaudRate(QSerialPort::Baud9600);
port->setDataBits(QSerialPort::Data8);
port->setParity(QSerialPort::EvenParity);
port->setStopBits(QSerialPort::OneStop);
port->setFlowControl(QSerialPort::NoFlowControl);
// Открываем порт
qDebug() << "Серийный номер: " << portInfo.serialNumber();
if (port->open(QIODevice::ReadWrite))
{
ports.append(port);
qDebug() << "Порт " << portInfo.portName() << "успешно открыт";
}
else
{
qDebug() << "Ошибка при открытии порта " << portInfo.portName();
delete port; // Освобождаем память, если порт не удалось открыть
}
}
}
//------------------------------------------------------------------------------
void MainWindow::on_sendButton_clicked() // также пробую отправить в ком-порт
{
// Отправка сообщения через порт
QByteArray data = "message";
ports[1]->write(data);
// Проверка, отправлены ли данные
if (ports[1]->waitForBytesWritten(1000))
qDebug() << "Данные успешно отправлены";
else
qDebug() << "Ошибка отправки данных";
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSerialPortInfo>
#include <QSerialPort>
#include <QDebug>
#include <QVector>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_sendButton_clicked();
private:
Ui::MainWindow *ui;
QVector<QSerialPort*> ports;
QByteArray message;
QSerialPort *m_comPort;
void connectToAllPorts();
};
#endif // MAINWINDOW_H
Проверил, создал еще один слот на другую кнопку, отправляются разные сообщения. В проверке буфера смысла видеть перестал, переполниться с моими командами не сможет никак, поэтому и проверять тоже не стал!
Теперь в потоки..