QT开发中文网

Qmodbus 示例demo

以下是一个简单的使用QModbus的示例代码:

#include <QtWidgets>
#include <QtSerialBus>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    // 创建Modbus通信管理器
    QModbusTcpClient modbusClient;

    // 连接到Modbus设备
    modbusClient.setConnectionParameter(QModbusDevice::NetworkAddressParameter, "192.168.1.1");
    modbusClient.setConnectionParameter(QModbusDevice::NetworkPortParameter, 502);
    
    if (!modbusClient.connectDevice()) {
        qDebug() << "连接到Modbus设备失败";
        return -1;
    }

    // 读取保持寄存器中的数据
    QModbusDataUnit readUnit = QModbusDataUnit(QModbusDataUnit::HoldingRegisters, 0, 10); // 从寄存器地址0开始,读取10个寄存器
    if (auto *reply = modbusClient.sendReadRequest(readUnit, 1)) { // 发送读取请求,并等待回复
        if (!reply->isFinished()) {
            QObject::connect(reply, &QModbusReply::finished, [&]() {
                if (reply->error() == QModbusDevice::NoError) {
                    const auto values = reply->result().values();
                    for (const auto &value : values) {
                        qDebug() << "读取值:" << value;
                    }
                } else {
                    qDebug() << "读取错误:" << reply->errorString();
                }
                reply->deleteLater();
            });
        } else {
            delete reply; // 错误处理,释放内存
        }
    } else {
        qDebug() << "发送读取请求失败";
    }

    // 写入数据到保持寄存器
    QVector<quint16> writeData = {100, 200, 300}; // 要写入的数据
    QModbusDataUnit writeUnit = QModbusDataUnit(QModbusDataUnit::HoldingRegisters, 0, writeData);
    if (auto *reply = modbusClient.sendWriteRequest(writeUnit, 1)) { // 发送写入请求,并等待回复
        if (!reply->isFinished()) {
            QObject::connect(reply, &QModbusReply::finished, [&]() {
                if (reply->error() == QModbusDevice::NoError) {
                    qDebug() << "写入成功";
                } else {
                    qDebug() << "写入错误:" << reply->errorString();
                }
                reply->deleteLater();
            });
        } else {
            delete reply; // 错误处理,释放内存
        }
    } else {
        qDebug() << "发送写入请求失败";
    }

    return app.exec();
}

请注意,以上示例代码仅提供了基本的连接、读取和写入操作,具体的使用还需要根据实际情况进行调整。另外,为了能够使用QModbus模块,请确保在项目文件中添加 QT += serialbus 来链接相关库。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=9144

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?