QModbusPdu 类
QModbusPdu 是一个抽象容器类,包含存储在 Modbus ADU 内部的功能代码和有效负载。 更多...
头文件 | #include <QModbusPdu> |
CMake | find_package(Qt6 REQUIRED COMPONENTS SerialBus) target_link_libraries(mytarget PRIVATE Qt6::SerialBus) |
qmake | QT += serialbus |
继承自 |
公共类型
枚举 | ExceptionCode { IllegalFunction, IllegalDataAddress, IllegalDataValue, ServerDeviceFailure, Acknowledge, …, ExtendedException } |
枚举 | 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) |
相关非成员函数
QDebug | operator<<(QDebug debug, const QModbusPdu &pdu) |
QDataStream & | operator<<(QDataStream &stream, const QModbusPdu &pdu) |
成员类型文档
枚举 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 | 请求使用AND或OR掩码以及寄存器的当前内容,修改指定保持寄存器的内容。 |
QModbusPdu::ReadWriteMultipleRegisters | 0x17 | 请求一个或多个保持寄存器的状态,并同时在一个设备上写入一个或多个保持寄存器。 |
QModbusPdu::ReadFifoQueue | 0x18 | 请求读取远程设备中寄存器的先进先出(FIFO)队列的内容。 |
QModbusPdu::EncapsulatedInterfaceTransport | 0x2B | 请参阅Modbus规范的附录A。 |
QModbusPdu::UndefinedFunctionCode | 0x100 | 不要使用。 |
成员函数文档
[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);
注意:使用限制在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。
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公司的商标。所有其他商标均为其各自所有者的财产。