本页内容

QModbusRequest Class

QModbusRequest 是一个容器类,其中包含存储在 Modbus ADU 中的功能码和有效载荷。更多内容...

头文件: #include <QModbusRequest>
CMake: find_package(Qt6 REQUIRED COMPONENTS SerialBus)
target_link_libraries(mytarget PRIVATE Qt6::SerialBus)
qmake: QT += serialbus
继承自: QModbusPdu

公共类型

公共函数

QModbusRequest()
QModbusRequest(const QModbusPdu &pdu)
QModbusRequest(QModbusPdu::FunctionCode code, Args... data)
QModbusRequest(QModbusPdu::FunctionCode code, const QByteArray &data = QByteArray())

静态公共成员

int calculateDataSize(const QModbusRequest &request)
int minimumDataSize(const QModbusRequest &request)
void registerDataSizeCalculator(QModbusPdu::FunctionCode fc, QModbusRequest::CalcFuncPtr calculator)
QDataStream &operator>>(QDataStream &stream, QModbusRequest &pdu)

详细说明

一个 Modbus 请求通常由一个字节(描述FunctionCode )和 N 个字节的有效载荷组成

一个典型的 Modbus 请求可能如下所示:

QModbusRequest request(QModbusRequest::WriteMultipleCoils,
    QByteArray::fromHex("0013000a02cd01"));

注意: 使用带QByteArray 的构造函数时, 请确保在创建请求之前将包含的数据转换为大端字节序。

如果编译时已知相关值,也可以通过以下方式创建相同的请求:

quint16 startAddress = 19, numberOfCoils = 10;
quint8 payloadInBytes = 2, outputHigh = 0xcd, outputLow = 0x01;
QModbusRequest request(QModbusRequest::WriteMultipleCoils, startAddress, numberOfCoils,
    payloadInBytes, outputHigh, outputLow);

成员类型文档

[alias] QModbusRequest::CalcFuncPtr

用于自定义计算器函数指针的typedef,其签名与QModbusRequest::calculateDataSize 相同。

成员函数文档

[constexpr noexcept default] QModbusRequest::QModbusRequest()

构建了一个无效的 QModbusRequest。

QModbusRequest::QModbusRequest(const QModbusPdu &pdu)

创建pdu 的副本。

template <typename... Args> QModbusRequest::QModbusRequest(QModbusPdu::FunctionCode code, Args... data)

构建一个 QModbusRequest 对象,其功能代码设置为code ,有效载荷设置为data 。数据经过转换后以大端字节序存储。

注意:仅限使用 quint8 和quint16 。这是因为QDataStream 流运算符不仅会追加原始数据,还会追加复杂类型的数据大小、计数等信息。

[explicit] QModbusRequest::QModbusRequest(QModbusPdu::FunctionCode code, const QByteArray &data = QByteArray())

构建一个QModbusResponse ,其函数代码设置为code ,有效载荷设置为data 。该数据应已按大端字节序存储。

[static] int QModbusRequest::calculateDataSize(const QModbusRequest &request)

根据请求的函数代码和数据,计算request 的预期数据大小。返回请求数据部分的总大小;如果无法正确计算大小,则返回-1 。

另请参阅 minimumDataSize 和registerDataSizeCalculator 。

[static] int QModbusRequest::minimumDataSize(const QModbusRequest &request)

根据请求的函数代码,返回request 的预期最小数据大小;如果函数代码未知,则返回-1 。

[static] void QModbusRequest::registerDataSizeCalculator(QModbusPdu::FunctionCode fc, QModbusRequest::CalcFuncPtr calculator)

该函数用于注册一个用户自定义的实现,用于计算函数代码fc 的请求数据大小。它可用于扩展或覆盖QModbusRequest::calculateDataSize()内部的实现。

CalcFuncPtr 是自定义calculator 函数指针的 typedef,该函数具有以下签名:

int myCalculateDataSize(const QModbusRequest &pdu);

相关非成员

QDataStream &operator>>(QDataStream &stream, QModbusRequest &pdu)

从stream 读取一个pdu ,并返回该流的引用。

注意: 由于 PDU 内部缺少大小指示符,该函数 可能无法正确流式传输函数代码为QModbusPdu::Diagnostics 或QModbusPdu::EncapsulatedInterfaceTransport 的 PDU。特别是当 PDU 嵌入到一个未以诊断/封装请求本身结尾的流中时,可能会发生这种情况。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.