Browse Source

实现串口连接按钮的功能

master
ZTZHANG\ztzhang 2 weeks ago
parent
commit
10eacb1558
2 changed files with 63 additions and 12 deletions
  1. +5
    -2
      Modbus/include/modbus.h
  2. +58
    -10
      Modbus/src/modbus.cpp

+ 5
- 2
Modbus/include/modbus.h View File

@@ -18,13 +18,16 @@ class Modbus : public QMainWindow
public: public:
Modbus(QWidget *parent = nullptr); Modbus(QWidget *parent = nullptr);
~Modbus(); ~Modbus();

// 创建串口对象指针
QSerialPort* serial;
// 获取可用串口列表
QStringList get_avail_serialport(); QStringList get_avail_serialport();


public slots: public slots:
// 显示可用串口 // 显示可用串口
void init_serialport_client(); void init_serialport_client();

// 使用按钮打开串口
void serial_button_clicked();


private: private:
Ui::ModbusClass *ui; Ui::ModbusClass *ui;


+ 58
- 10
Modbus/src/modbus.cpp View File

@@ -5,14 +5,33 @@ Modbus::Modbus(QWidget *parent)
, ui(new Ui::ModbusClass()) , ui(new Ui::ModbusClass())
{ {
ui->setupUi(this); ui->setupUi(this);

// 初始化串口指针
serial = new QSerialPort(this);
// 下拉框显示串口
init_serialport_client(); init_serialport_client();
// 连接按钮信号
connect(
ui->serialOpenButton,
&QPushButton::clicked,
this,
&Modbus::serial_button_clicked
);
} }


Modbus::~Modbus() Modbus::~Modbus()
{ {
// 删除串口指针
if (serial->isOpen())
{
serial->close();
}
delete serial;

delete ui; delete ui;
} }



// 实现下拉框显示串口 // 实现下拉框显示串口
void Modbus::init_serialport_client() void Modbus::init_serialport_client()
{ {
@@ -23,20 +42,49 @@ void Modbus::init_serialport_client()
QStringList Modbus::get_avail_serialport() QStringList Modbus::get_avail_serialport()
{ {
// 下拉框串口 // 下拉框串口
QStringList list_avail_serialport;
QStringList listAvailSerialPort;


// 遍历可用串口 // 遍历可用串口
foreach(const QSerialPortInfo & info, QSerialPortInfo::availablePorts())
foreach(const QSerialPortInfo& info, QSerialPortInfo::availablePorts())
{ {
// 串口
QSerialPort serial;
serial.setPort(info);
// 显示串口名
if (serial.open(QIODevice::ReadWrite))
serial->setPort(info);
// 使用ReadWrite模式打开串口成功,则加入列表
if (serial->open(QIODevice::ReadWrite))
{ {
list_avail_serialport.append(serial.portName());
serial.close();
listAvailSerialPort.append(serial->portName());
serial->close();
} }
} }
return list_avail_serialport;
return listAvailSerialPort;
} }

// 使用按钮打开串口
void Modbus::serial_button_clicked()
{
// 获取选中的串口号
QString portSelected = ui->serialBox->currentText();

// 判断是否打开
if (serial->isOpen())
{
serial->close();
}

// 配置串口参数
serial->setPortName(portSelected);
serial->setBaudRate(QSerialPort::Baud9600);
serial->setDataBits(QSerialPort::Data8);
serial->setParity(QSerialPort::EvenParity);
serial->setStopBits(QSerialPort::OneStop);
serial->setFlowControl(QSerialPort::NoFlowControl);

// 尝试打开串口
if (serial->open(QIODevice::ReadWrite))
{
ui->serialLogLabel->setText("Success");
}
else
{
ui->serialLogLabel->setText("Failure");
}
}

Loading…
Cancel
Save