QModbusPdu 类

QModbusPdu 是一个抽象容器类,包含存储在 Modbus ADU 内部的功能代码和有效负载。 更多...

头文件 #include <QModbusPdu>
CMakefind_package(Qt6 REQUIRED COMPONENTS SerialBus)
target_link_libraries(mytarget PRIVATE Qt6::SerialBus)
qmakeQT += serialbus
继承自

QModbusRequestQModbusResponse

公共类型

枚举ExceptionCode { IllegalFunction, IllegalDataAddress, IllegalDataValue, ServerDeviceFailure, Acknowledge, …, ExtendedException }
枚举FunctionCode { Invalid, ReadCoils, ReadDiscreteInputs, ReadHoldingRegisters, ReadInputRegisters, …, UndefinedFunctionCode }

公共函数

QModbusPdu()
virtual~QModbusPdu()
QByteArraydata() const
qint16dataSize() const
voiddecodeData(Args &&... data) const
voidencodeData(Args... data)
QModbusPdu::ExceptionCodeexceptionCode() const
QModbusPdu::FunctionCodefunctionCode() const
boolisException() const
boolisValid() const
voidsetData(const QByteArray &data)
virtual voidsetFunctionCode(QModbusPdu::FunctionCode code)
qint16size() const

静态公共成员

const quint8ExceptionByte

保护函数

QModbusPdu(QModbusPdu::FunctionCode code, const QByteArray &data)
QModbusPdu(const QModbusPdu &other)
QModbusPdu &operator=(const QModbusPdu &other)
QDebugoperator<<(QDebug debug, const QModbusPdu &pdu)
QDataStream &operator<<(QDataStream &stream, const QModbusPdu &pdu)

详细描述

该类提供对 Modbus 应用协议规范 1.1b 指定的原始 Modbus 协议数据包的访问。

成员类型文档

枚举 QModbusPdu::ExceptionCode

此枚举描述了Modbus异常代码定义的所有可能的错误条件。它们由服务器在检查对请求的响应中适当的错误条件后设置,并且必须由客户端解码以在该异常代码上进行操作。

常量描述
QModbusPdu::IllegalFunction0x01功能码不支持设备。
QModbusPdu::IllegalDataAddress0x02查询中接收到的数据地址不是Modbus服务器的允许地址。
QModbusPdu::IllegalDataValue0x03请求数据字段中包含的值不是Modbus服务器的允许值。
QModbusPdu::ServerDeviceFailure0x04在服务器尝试执行请求的操作时发生了不可恢复的错误。
QModbusPdu::Acknowledge0x05与编程命令一起专用使用。
QModbusPdu::ServerDeviceBusy0x06服务器正在处理长时间程序命令。
QModbusPdu::NegativeAcknowledge0x07服务器无法执行在查询中收到的程序功能。此代码用于不成功的编程请求。客户端应从服务器请求诊断或错误信息。
QModbusPdu::MemoryParityError0x08表示扩展文件区域未能通过一致性检查。与功能码20和21一起使用。异常代码不指任何传输线的奇偶校验设置,仅指服务器的文件记录内部内存。
QModbusPdu::GatewayPathUnavailable0x0A表示网关无法从输入端口到输出端口分配内部通信路径以处理请求。
QModbusPdu::GatewayTargetDeviceFailedToRespond0x0B表示无法从网关后面的目标设备获得响应。通常这意味着目标设备没有在网络中在线。
QModbusPdu::ExtendedException0xFF这是Modbus规范中的一种扩展异常。通常,此代码用于描述另一代码进一步描述的异常。

enum QModbusPdu::FunctionCode

定义由服务器请求的功能码和隐式动作类型。并非所有Modbus设备都能处理相同的功能码集合。

常量描述
QModbusPdu::Invalid0x00由默认构造函数设置,不要使用。
QModbusPdu::ReadCoils0x01请求从设备读取一个或多个线圈的状态。
QModbusPdu::ReadDiscreteInputs0x02请求读取设备的一个或多个离散输入的状态。
QModbusPdu::ReadHoldingRegisters0x03请求从设备读取一个或多个保持寄存器的值。
QModbusPdu::ReadInputRegisters0x04请求从设备读取一个或多个输入寄存器的值。
QModbusPdu::WriteSingleCoil0x05请求在设备上写入单个线圈。
QModbusPdu::WriteSingleRegister0x06请求在设备上写入单个保持寄存器。
QModbusPdu::ReadExceptionStatus0x07请求设备上八个异常状态输出的状态。
QModbusPdu::Diagnostics0x08用于提供一系列测试,以检查客户端服务器通信系统,或检查内部
QModbusPdu::GetCommEventCounter0x0B请求从设备的通信事件计数器请求状态字和事件计数。
QModbusPdu::GetCommEventLog0x0C请求从设备请求状态字、事件计数、消息计数和事件字节字段。
QModbusPdu::WriteMultipleCoils0x0F请求在设备上写入一个或多个线圈。
QModbusPdu::WriteMultipleRegisters0x10请求在设备上写入一个或多个保持寄存器。
QModbusPdu::ReportServerId0x11请求请求类型的描述、当前状态以及特定于设备的其他信息。
QModbusPdu::ReadFileRecord0x14请求文件记录读取。
QModbusPdu::WriteFileRecord0x15请求文件记录写入。
QModbusPdu::MaskWriteRegister0x16请求使用AND或OR掩码以及寄存器的当前内容,修改指定保持寄存器的内容。
QModbusPdu::ReadWriteMultipleRegisters0x17请求一个或多个保持寄存器的状态,并同时在一个设备上写入一个或多个保持寄存器。
QModbusPdu::ReadFifoQueue0x18请求读取远程设备中寄存器的先进先出(FIFO)队列的内容。
QModbusPdu::EncapsulatedInterfaceTransport0x2B请参阅Modbus规范的附录A。
QModbusPdu::UndefinedFunctionCode0x100不要使用。

成员函数文档

[constexpr noexcept] QModbusPdu::QModbusPdu()

构造一个无效的QModbusPdu。

[protected] QModbusPdu::QModbusPdu(QModbusPdu::FunctionCode code, const QByteArray &data)

构造一个具有功能码设置为code和有效载荷设置为data的QModbusPdu。数据应按大端字节顺序存储。

[noexcept protected] QModbusPdu::QModbusPdu(const QModbusPdu &other)

构造一个与other相同的QModbusPdu。

[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);

注意:使用限制在quint8quint16。这是因为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));

注意:使用限制在quint8quint16。这是因为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。

PDU被认为有效,如果消息代码在1到255的范围内,并且PDU的复合大小(功能码+数据)不超过253字节。默认构造的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] QModbusPdu &QModbusPdu::operator=(const QModbusPdu &other)

复制other并将其分配到此QModbusPdu对象。

成员变量文档

const quint8 QModbusPdu::ExceptionByte

该变量初始化为0x80。

异常以定义的包格式报告。将原功能码返回给请求客户端,但其最高位被设置。这相当于将0x80加到原始功能码的值上。

此字段可用于屏蔽原始Modbus数据包功能字段中的异常位。

相关非成员

QDebug operator<<(QDebug debug, const QModbusPdu &pdu)

将Modbus pdu写入debug流。

QDataStream &operator<<(QDataStream &stream, const QModbusPdu &pdu)

pdu写入stream并返回对流的引用。

© 2024 Qt公司。此处包含的文档贡献版权属于其各自的所有者。此处提供的文档在自由软件基金会的GNU自由文档许可证版本1.3的条款下发布。Qt及其相应标志在芬兰和/或其他国家和地区是Qt公司的商标。所有其他商标均为其各自所有者的财产。