|
|
@@ -5,14 +5,33 @@ Modbus::Modbus(QWidget *parent) |
|
|
|
, ui(new Ui::ModbusClass()) |
|
|
|
{ |
|
|
|
ui->setupUi(this); |
|
|
|
|
|
|
|
// 初始化串口指针 |
|
|
|
serial = new QSerialPort(this); |
|
|
|
// 下拉框显示串口 |
|
|
|
init_serialport_client(); |
|
|
|
// 连接按钮信号 |
|
|
|
connect( |
|
|
|
ui->serialOpenButton, |
|
|
|
&QPushButton::clicked, |
|
|
|
this, |
|
|
|
&Modbus::serial_button_clicked |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
Modbus::~Modbus() |
|
|
|
{ |
|
|
|
// 删除串口指针 |
|
|
|
if (serial->isOpen()) |
|
|
|
{ |
|
|
|
serial->close(); |
|
|
|
} |
|
|
|
delete serial; |
|
|
|
|
|
|
|
delete ui; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 实现下拉框显示串口 |
|
|
|
void Modbus::init_serialport_client() |
|
|
|
{ |
|
|
@@ -23,20 +42,49 @@ void Modbus::init_serialport_client() |
|
|
|
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"); |
|
|
|
} |
|
|
|
} |