QTModbusRTU通信之QSerialPortInfo::availablePorts()

第一步:在 .pro 添加
QT       += core gui serialport
第二步:包含头文件:
#include<QSerialPort>
#include<QSerialPortInfo>

第三步:主要语法

foreach(QSerialPortInfo serialPort,QSerialPortInfo::availablePorts())
    {
            ui->CB_port->addItem(serialPort.portName());
    }

第四步:应用实例

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //更新串口到下拉框
    comboBox_newPort();
    //手动更新串口到下拉框
    connect(ui->button_newProt,&QPushButton::clicked,this,&Widget::comboBox_newPort);
    
}
void Widget::comboBox_newPort()
{
    //先清除下拉框串口数据
    ui->CB_port->clear();
    //重读串口到下拉框
    foreach(QSerialPortInfo serialPort,QSerialPortInfo::availablePorts())
    {
            ui->CB_port->addItem(serialPort.portName());
    }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Qt Modbus RTU读取数据,你需要在Qt项目中添加Qt Modbus模块,并连接Modbus RTU从机设备。添加方法如下: 1. 在.pro项目文件中添加以下行: ``` QT += modbus ``` 2. 在Qt代码中包含Qt Modbus头文件: ``` #include <QModbusDataUnit> #include <QModbusRtuSerialMaster> ``` 3. 创建一个QModbusRtuSerialMaster对象并连接到Modbus RTU从机: ``` QModbusRtuSerialMaster *client = new QModbusRtuSerialMaster(this); client->setConnectionParameter(QModbusDevice::SerialPortNameParameter, portName); client->setConnectionParameter(QModbusDevice::SerialParityParameter, parity); client->setConnectionParameter(QModbusDevice::SerialBaudRateParameter, baudRate); if (!client->connectDevice()) { qDebug() << "Failed to connect to Modbus RTU device:" << client->errorString(); } ``` 4. 使用QModbusDataUnit类读取Modbus寄存器的数据: ``` QModbusDataUnit readUnit(QModbusDataUnit::HoldingRegisters, 0, 10); if (auto *reply = client->sendReadRequest(readUnit, slaveAddress)) { if (!reply->isFinished()) { // 等待读取请求完成 QEventLoop loop; QObject::connect(reply, &QModbusReply::finished, &loop, &QEventLoop::quit); loop.exec(); } if (reply->error() == QModbusDevice::NoError) { // 读取数据成功 const QModbusDataUnit unit = reply->result(); for (quint16 i = 0; i < unit.valueCount(); i++) { qDebug() << "Value:" << unit.value(i); } } else { // 读取数据失败 qDebug() << "Failed to read data:" << reply->errorString(); } reply->deleteLater(); } else { // 发送读取请求失败 qDebug() << "Failed to send read request:" << client->errorString(); } ``` 以上代码使用QModbusRtuSerialMaster类连接到Modbus RTU从机,并使用QModbusDataUnit类读取10个保持寄存器的值。你可以根据自己的需求修改这些代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值