QModbusPdu Class
QModbusPdu 是一个抽象容器类,其中包含存储在 Modbus ADU 中的功能码和有效载荷。更多内容...
| 头文件: | #include <QModbusPdu> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS SerialBus) target_link_libraries(mytarget PRIVATE Qt6::SerialBus) |
| qmake: | QT += serialbus |
| 由以下函数继承: |
公共类型
| enum | ExceptionCode { IllegalFunction, IllegalDataAddress, IllegalDataValue, ServerDeviceFailure, Acknowledge, …, ExtendedException } |
| enum | FunctionCode { Invalid, ReadCoils, ReadDiscreteInputs, ReadHoldingRegisters, ReadInputRegisters, …, UndefinedFunctionCode } |
公共函数
| QModbusPdu() | |
| virtual | ~QModbusPdu() |
| QByteArray | data() const |
| qint16 | dataSize() const |
| void | decodeData(Args &&... data) const |
| void | encodeData(Args... data) |
| QModbusPdu::ExceptionCode | exceptionCode() const |
| QModbusPdu::FunctionCode | functionCode() const |
| bool | isException() const |
| bool | isValid() const |
| void | setData(const QByteArray &data) |
| virtual void | setFunctionCode(QModbusPdu::FunctionCode code) |
| qint16 | size() const |
静态公共成员
| const quint8 | ExceptionByte |
受保护函数
| QModbusPdu(QModbusPdu::FunctionCode code, const QByteArray &data) | |
| QModbusPdu(const QModbusPdu &other) | |
| QModbusPdu & | operator=(const QModbusPdu &other) |
相关的非成员
| QDataStream & | operator<<(QDataStream &stream, const QModbusPdu &pdu) |
| QDebug | operator<<(QDebug debug, const QModbusPdu &pdu) |
成员类型文档
enum QModbusPdu::ExceptionCode
该枚举描述了 Modbus 异常代码所定义的所有可能的错误情况。这些异常代码由服务器在检查请求响应中的相应错误情况后设置,客户端必须对其进行解码,以便根据异常代码进行处理。
| 常量 | 值 | 描述 |
|---|---|---|
QModbusPdu::IllegalFunction | 0x01 | 设备不支持该功能代码。 |
QModbusPdu::IllegalDataAddress | 0x02 | 查询中接收到的数据地址不是 Modbus 服务器允许的地址。 |
QModbusPdu::IllegalDataValue | 0x03 | 请求数据字段中包含的值不是 Modbus 服务器允许的值。 |
QModbusPdu::ServerDeviceFailure | 0x04 | 服务器在尝试执行所请求的操作时发生了无法恢复的错误。 |
QModbusPdu::Acknowledge | 0x05 | 与编程命令结合使用的特殊用途。 |
QModbusPdu::ServerDeviceBusy | 0x06 | 服务器正在处理一个耗时较长的编程命令。 |
QModbusPdu::NegativeAcknowledge | 0x07 | 服务器无法执行查询中收到的程序功能。此代码用于返回未成功的编程请求。客户端应向服务器请求诊断或错误信息。 |
QModbusPdu::MemoryParityError | 0x08 | 表示扩展文件区域未能通过一致性检查。与功能代码 20 和 21 结合使用。该异常代码不涉及传输线路的任何奇偶校验设置,仅涉及服务器内部文件记录的内存。 |
QModbusPdu::GatewayPathUnavailable | 0x0A | 表示网关无法为处理该请求从输入端口到输出端口分配内部通信路径。 |
QModbusPdu::GatewayTargetDeviceFailedToRespond | 0x0B | 表示未从网关后方的目标设备获得响应。通常这意味着目标设备未在网络上联机。 |
QModbusPdu::ExtendedException | 0xFF | 这是根据 Modbus 规范定义的扩展异常。通常,此代码用于描述其他地方有进一步说明的异常。 |
enum QModbusPdu::FunctionCode
定义了服务器所需的功能代码和操作的隐式类型。并非所有 Modbus 设备都能处理同一组功能代码。
| 常量 | 值 | 描述 |
|---|---|---|
QModbusPdu::Invalid | 0x00 | 由默认构造函数设置,请勿使用。 |
QModbusPdu::ReadCoils | 0x01 | 从设备请求一个或多个线圈的状态。 |
QModbusPdu::ReadDiscreteInputs | 0x02 | 从设备请求一个或多个输入寄存器的状态。 |
QModbusPdu::ReadHoldingRegisters | 0x03 | 从设备请求一个或多个保持寄存器值的状态。 |
QModbusPdu::ReadInputRegisters | 0x04 | 从设备请求一个或多个输入寄存器值的状态。 |
QModbusPdu::WriteSingleCoil | 0x05 | 请求向设备上的单个线圈写入数据。 |
QModbusPdu::WriteSingleRegister | 0x06 | 请求向设备上的单个保持寄存器写入数据。 |
QModbusPdu::ReadExceptionStatus | 0x07 | 请求设备上八个异常状态输出的状态。 |
QModbusPdu::Diagnostics | 0x08 | 用于提供一系列测试,以检查客户端-服务器通信系统或检查内部 |
QModbusPdu::GetCommEventCounter | 0x0B | 从设备的通信事件计数器请求一个状态字和一个事件计数。 |
QModbusPdu::GetCommEventLog | 0x0C | 请求从设备获取状态字、事件计数、消息计数和一个事件字节字段。 |
QModbusPdu::WriteMultipleCoils | 0x0F | 请求向设备上的一个或多个线圈写入数据。 |
QModbusPdu::WriteMultipleRegisters | 0x10 | 请求向设备写入一个或多个保持寄存器。 |
QModbusPdu::ReportServerId | 0x11 | 请求设备类型的描述、当前状态以及其他特定于该设备的信息。 |
QModbusPdu::ReadFileRecord | 0x14 | 请求读取文件记录。 |
QModbusPdu::WriteFileRecord | 0x15 | 请求写入文件记录。 |
QModbusPdu::MaskWriteRegister | 0x16 | 请求使用“与”或“或”掩码与寄存器当前内容进行组合,来修改指定保持寄存器的内容。 |
QModbusPdu::ReadWriteMultipleRegisters | 0x17 | 请求获取一个或多个暂存寄存器的状态,同时向设备上的一个或多个暂存寄存器写入数据。 |
QModbusPdu::ReadFifoQueue | 0x18 | 请求读取远程设备中先入先出 (FIFO) 寄存器队列的内容。 |
QModbusPdu::EncapsulatedInterfaceTransport | 0x2B | 请参阅 Modbus 规范的附录 A。 |
QModbusPdu::UndefinedFunctionCode | 0x100 | 请勿使用。 |
成员函数文档
[constexpr noexcept default] QModbusPdu::QModbusPdu()
构建了一个无效的 QModbusPdu。
[protected] QModbusPdu::QModbusPdu(QModbusPdu::FunctionCode code, const QByteArray &data)
构建一个 QModbusPdu,其功能码设置为code ,有效载荷设置为data 。该数据应已按大端字节序存储。
[noexcept protected default] QModbusPdu::QModbusPdu(const QModbusPdu &other)
构建一个 QModbusPdu 对象,该对象是other 的副本。
[virtual noexcept] QModbusPdu::~QModbusPdu()
销毁一个QModbusPdu 。
QByteArray QModbusPdu::data() const
返回 PDU 的有效载荷,不包括功能码。有效载荷以大端字节序存储。
另请参阅 setData()。
qint16 QModbusPdu::dataSize() const
返回 PDU 的数据大小(不包括函数代码)。
template <typename... Args> void QModbusPdu::decodeData(Args &&... data) const
将有效载荷转换为主机字节序,并将其读入data 中。数据可以是可变长度参数列表。
QModbusResponsePdu response(QModbusPdu::ReportServerId);
response.encodeData(quint8(0x02), quint8(0x01), quint8(0xff));
quint8 count, id, run;
response.decodeData(&count, &id, &run);注意: 仅限于在quint8 和quint16 中使用 。这是因为QDataStream 流运算符不仅会追加原始数据,还会追加复杂类型的相关信息(例如大小、计数等)。
template <typename... Args> void QModbusPdu::encodeData(Args... data)
将有效载荷设置为data 。数据经过转换后,以大端字节序存储。
QModbusRequestPdu request(QModbusPdu::ReadCoils);
// starting address and quantity of coils
request.encodeData(quint16(0x0c), quint16(0x0a));注意:仅限使用 quint8 和quint16 。这是因为QDataStream 流运算符不仅会追加原始数据,还会追加复杂类型的相关信息(例如大小、个数等)。
QModbusPdu::ExceptionCode QModbusPdu::exceptionCode() const
返回响应的异常代码。
QModbusPdu::FunctionCode QModbusPdu::functionCode() const
返回 PDU 的功能代码。
另请参阅 setFunctionCode()。
bool QModbusPdu::isException() const
如果 PDU 中包含异常代码,则返回 true;否则返回 false。
bool QModbusPdu::isValid() const
如果 PDU 有效,则返回 true;否则返回 false。
如果消息代码在 1 到 255(十进制)的范围内,且 PDU 的复合大小(功能代码 + 数据)不超过 253 字节,则该 PDU 被视为有效。默认构造的 PDU 无效。
void QModbusPdu::setData(const QByteArray &data)
将 PDU 的功能负载设置为data 。该数据应已按大端字节序存储。
另请参阅 data()。
[virtual] void QModbusPdu::setFunctionCode(QModbusPdu::FunctionCode code)
将 PDU 的功能代码设置为code 。
另请参阅 functionCode()。
qint16 QModbusPdu::size() const
返回 PDU 的完整大小,包括功能代码和数据大小。
[noexcept protected default] QModbusPdu &QModbusPdu::operator=(const QModbusPdu &other)
创建other 的副本,并将其赋值给此QModbusPdu 对象。
成员变量文档
const quint8 QModbusPdu::ExceptionByte
该变量的初始值为 0x80。
异常以定义好的数据包格式进行报告。系统会向请求客户端返回一个功能代码,该代码与原始功能代码相同,但其最高有效位被置为1。这相当于在原始功能代码的值上加 0x80。
该字段可用于屏蔽原始 Modbus 数据包中“功能”字段的异常位。
相关非成员
QDataStream &operator<<(QDataStream &stream, const QModbusPdu &pdu)
将一个pdu 写入stream ,并返回该流的引用。
QDebug operator<<(QDebug debug, const QModbusPdu &pdu)
将 Modbus 数据包pdu 写入debug 流。
© 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.