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 的构造函数时,请确保在创建请求前将包含的数据转换为 big-endian 字节顺序。

如果在编译时已知数据值,也可以像这样创建相同的请求:

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

成员类型文档

[alias] QModbusRequest::CalcFuncPtr

指向自定义计算器函数指针的类型定义,其签名与QModbusRequest::calculateDataSize 相同。

成员函数文档

[constexpr noexcept] QModbusRequest::QModbusRequest()

构造一个无效的 QModbusRequest。

QModbusRequest::QModbusRequest(const QModbusPdu &pdu)

构造pdu 的副本。

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

构造一个 QModbusRequest,功能代码设为code ,有效载荷设为data 。数据按大字节顺序转换和存储。

注: 使用范围仅限于quint8quint16 。这是因为QDataStream 流操作符不仅会追加原始数据,还会追加复杂类型的数据,如大小、计数等。

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

构造一个QModbusResponse ,功能代码设为code ,有效载荷设为data 。预计数据已经按大字节顺序存储。

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

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

另请参阅 minimumDataSizeregisterDataSizeCalculator

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

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

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

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

CalcFuncPtr 是指向自定义calculator 函数指针的类型定义,其签名如下:

int myCalculateDataSize(const QModbusRequest &pdu);

相关非成员

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

stream 读取pdu ,并返回流引用。

注意: 由于 PDU 内缺少大小指示符,该函数可能无法正确流式处理具有函数代码QModbusPdu::DiagnosticsQModbusPdu::EncapsulatedInterfaceTransport 的 PDU。尤其是当 PDU 嵌入到流中时,流本身并不以诊断/封装请求结束,可能会出现这种情况。

© 2025 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.