Qt上位机读取数据问题

我用qt做了一个modbus 通讯的上位机 我现在只能实现读一组连续的寄存器数据 我想知道怎么同时读取其他组的数据 碰到不连续的寄存器又得怎么读取 我还有几个数据是两个寄存器读取存储的 怎么实现连续两个寄存器读取

定义一个QModbusDataUnit对象数组,用于存储要读取的不连续寄存器的信息。每个QModbusDataUnit对象表示一个要读取的寄存器组,包括起始地址、寄存器数量和数据类型等信息。

QModbusDataUnit dataUnit1(QModbusDataUnit::HoldingRegisters, startAddress1, registerCount1);
QModbusDataUnit dataUnit2(QModbusDataUnit::HoldingRegisters, startAddress2, registerCount2);
// 添加更多的数据单元...

创建一个QModbusReply对象数组,用于存储每个数据单元的读取结果。

QModbusReply* reply1 = modbusDevice->sendReadRequest(dataUnit1, slaveAddress);
QModbusReply* reply2 = modbusDevice->sendReadRequest(dataUnit2, slaveAddress);
// 添加更多的回复对象...

监听每个QModbusReply对象的finished信号,并在信号处理函数中获取读取的数据。

connect(reply1, &QModbusReply::finished, this, [=]() {
    if (reply1->error() == QModbusDevice::NoError) {
        const QModbusDataUnit result = reply1->result();
        // 处理读取的数据
    } else {
        // 处理读取错误
    }
    reply1->deleteLater();
});

connect(reply2, &QModbusReply::finished, this, [=]() {
    if (reply2->error() == QModbusDevice::NoError) {
        const QModbusDataUnit result = reply2->result();
        // 处理读取的数据
    } else {
        // 处理读取错误
    }
    reply2->deleteLater();
});
// 添加更多的信号连接...

在每个信号处理函数中,可以通过result对象获取读取的数据。如果你需要连续两个寄存器的数据,你可以使用value()函数来获取寄存器的值。

quint16 value1 = result.value(0); // 获取第一个寄存器的值
quint16 value2 = result.value(1); // 获取第二个寄存器的值
// 处理数据...