En esta página

QModbusPdu Class

QModbusPdu es una clase contenedor abstracto que contiene el código de función y la carga útil que se almacena dentro de un Modbus ADU. Más...

Cabecera: #include <QModbusPdu>
CMake: find_package(Qt6 REQUIRED COMPONENTS SerialBus)
target_link_libraries(mytarget PRIVATE Qt6::SerialBus)
qmake: QT += serialbus
Heredado por:

QModbusRequest y QModbusResponse

Tipos Públicos

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

Funciones Públicas

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

Miembros públicos estáticos

const quint8 ExceptionByte

Funciones protegidas

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)

Descripción detallada

Esta clase proporciona acceso a los paquetes sin procesar del protocolo Modbus tal y como se define en la Especificación del Protocolo de Aplicación Modbus 1.1b.

Documentación del tipo de miembro

enum QModbusPdu::ExceptionCode

Este enum describe todas las posibles condiciones de error definidas por los Códigos de Excepción Modbus. Son establecidos por el servidor después de comprobar las condiciones de error apropiadas en la respuesta a una petición y deben ser decodificados por el cliente para operar sobre el código de excepción.

ConstanteValorDescripción
QModbusPdu::IllegalFunction0x01El dispositivo no admite el código de función.
QModbusPdu::IllegalDataAddress0x02La dirección de datos recibida en la consulta no es una dirección permitida para el servidor Modbus.
QModbusPdu::IllegalDataValue0x03El valor contenido en el campo de datos de la petición no es un valor permitido para el servidor Modbus.
QModbusPdu::ServerDeviceFailure0x04Se ha producido un error irrecuperable mientras el servidor intentaba realizar la acción solicitada.
QModbusPdu::Acknowledge0x05Uso especializado junto con comandos de programación.
QModbusPdu::ServerDeviceBusy0x06El servidor está procesando un comando de programa de larga duración.
QModbusPdu::NegativeAcknowledge0x07El servidor no puede realizar la función de programa recibida en la consulta. Este código se devuelve para una solicitud de programación fallida. El cliente debe solicitar información de diagnóstico o de error al servidor.
QModbusPdu::MemoryParityError0x08Indica que el área de archivo extendida no ha superado una comprobación de consistencia. Se utiliza junto con los códigos de función 20 y 21. El código de excepción no se refiere a ninguna configuración de paridad de la línea de transmisión, sino sólo a la memoria interna de registros de archivos del servidor.
QModbusPdu::GatewayPathUnavailable0x0AIndica que la pasarela no pudo asignar una ruta de comunicación interna desde el puerto de entrada al puerto de salida para procesar la solicitud.
QModbusPdu::GatewayTargetDeviceFailedToRespond0x0BIndica que no se obtuvo respuesta del dispositivo de destino detrás de una pasarela. Por lo general, esto significa que el dispositivo de destino no está en línea en la red.
QModbusPdu::ExtendedException0xFFEsta es una excepción extendida según la especificación Modbus. Generalmente este código se utiliza para describir una excepción que se describe más adelante.

enum QModbusPdu::FunctionCode

Define el código de función y el tipo implícito de acción requerida por el servidor. No todos los dispositivos Modbus pueden manejar el mismo conjunto de códigos de función.

ConstanteValorDescripción
QModbusPdu::Invalid0x00Establecida por el constructor por defecto, no utilizar.
QModbusPdu::ReadCoils0x01Solicita el estado de una o más bobinas de un dispositivo.
QModbusPdu::ReadDiscreteInputs0x02Solicita el estado de uno o más registros de entrada de un dispositivo.
QModbusPdu::ReadHoldingRegisters0x03Solicita el estado de uno o más valores de registro de retención de un dispositivo.
QModbusPdu::ReadInputRegisters0x04Solicita el estado de uno o más valores de registro de entrada de un dispositivo.
QModbusPdu::WriteSingleCoil0x05Solicita escribir una sola bobina en un dispositivo.
QModbusPdu::WriteSingleRegister0x06Solicita escribir un único registro de retención en un dispositivo.
QModbusPdu::ReadExceptionStatus0x07Solicita el estado de las ocho salidas de estado de excepción de un dispositivo.
QModbusPdu::Diagnostics0x08Se utiliza para proporcionar una serie de pruebas para comprobar el sistema de comunicación cliente-servidor o para comprobar el estado interno de un dispositivo.
QModbusPdu::GetCommEventCounter0x0BSolicita una palabra de estado y un recuento de eventos del contador de eventos de comunicación del dispositivo.
QModbusPdu::GetCommEventLog0x0CSolicita una palabra de estado, un recuento de eventos, un recuento de mensajes y un campo de bytes de eventos de un dispositivo.
QModbusPdu::WriteMultipleCoils0x0FSolicita escribir una o más bobinas en un dispositivo.
QModbusPdu::WriteMultipleRegisters0x10Solicita escribir uno o más registros de retención en un dispositivo.
QModbusPdu::ReportServerId0x11Solicita la descripción del tipo, el estado actual y otra información específica de un dispositivo.
QModbusPdu::ReadFileRecord0x14Solicita la lectura de un registro de archivo.
QModbusPdu::WriteFileRecord0x15Solicita la escritura de un registro de archivo.
QModbusPdu::MaskWriteRegister0x16Solicita modificar el contenido de un registro de almacenamiento especificado utilizando una combinación de una máscara AND u OR y el contenido actual del registro.
QModbusPdu::ReadWriteMultipleRegisters0x17Solicita el estado de uno o más registros de retención y, al mismo tiempo, escribe uno o más registros de retención en un dispositivo.
QModbusPdu::ReadFifoQueue0x18Solicita leer el contenido de una cola de registro FIFO (First-In-First-Out) en un dispositivo remoto.
QModbusPdu::EncapsulatedInterfaceTransport0x2BConsulte el anexo A de la especificación Modbus.
QModbusPdu::UndefinedFunctionCode0x100No utilizar.

Documentación de la función miembro

[constexpr noexcept] QModbusPdu::QModbusPdu()

Construye un QModbusPdu inválido.

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

Construye un QModbusPdu con el código de función establecido en code y la carga útil establecida en data. Se espera que los datos ya estén almacenados en orden big-endian de bytes.

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

Construye un QModbusPdu que es una copia de other.

[virtual noexcept] QModbusPdu::~QModbusPdu()

Destruye un QModbusPdu.

QByteArray QModbusPdu::data() const

Devuelve la carga útil de la PDU, excluyendo el código de función. La carga se almacena en orden big-endian.

Véase también setData().

qint16 QModbusPdu::dataSize() const

Devuelve el tamaño de los datos de la PDU, excluyendo el código de función.

template <typename... Args> void QModbusPdu::decodeData(Args &&... data) const

Convierte la carga útil al formato del host y la lee en data. Los datos pueden ser una lista de argumentos de longitud variable.

QModbusResponsePdu response(QModbusPdu::ReportServerId);
response.encodeData(quint8(0x02), quint8(0x01), quint8(0xff));
quint8 count, id, run;
response.decodeData(&count, &id, &run);

Nota: El uso está limitado a quint8 y quint16 solamente. Esto se debe a que los operadores de flujo de QDataStream no sólo añadirán datos sin procesar, sino también, por ejemplo, tamaño, recuento, etc. para tipos complejos.

template <typename... Args> void QModbusPdu::encodeData(Args... data)

Establece la carga útil en data. Los datos se convierten y almacenan en orden big-endian de bytes.

QModbusRequestPdu request(QModbusPdu::ReadCoils);
// starting address and quantity of coils
request.encodeData(quint16(0x0c), quint16(0x0a));

Nota: El uso está limitado a quint8 y quint16 solamente. Esto se debe a que los operadores de flujo QDataStream no sólo añadirán datos sin procesar, sino también, por ejemplo, tamaño, recuento, etc. para tipos complejos.

QModbusPdu::ExceptionCode QModbusPdu::exceptionCode() const

Devuelve el código de excepción de la respuesta.

QModbusPdu::FunctionCode QModbusPdu::functionCode() const

Devuelve el código de función de la PDU.

Véase también setFunctionCode().

bool QModbusPdu::isException() const

Devuelve true si la PDU contiene un código de excepción; en caso contrario, false.

bool QModbusPdu::isValid() const

Devuelve true si la PDU es válida; en caso contrario, false.

Una PDU se considera válida si el código del mensaje está en el rango de 1 a 255 decimal y el tamaño compuesto de la PDU (código de función + datos) no supera los 253 bytes. Una PDU construida por defecto no es válida.

void QModbusPdu::setData(const QByteArray &data)

Establece la carga útil de la función PDU en data. Se espera que los datos ya estén almacenados en orden big-endian de bytes.

Véase también data().

[virtual] void QModbusPdu::setFunctionCode(QModbusPdu::FunctionCode code)

Establece el código de función de la PDU en code.

Véase también functionCode().

qint16 QModbusPdu::size() const

Devuelve el tamaño completo de la PDU, incluyendo el código de función y el tamaño de los datos.

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

Hace una copia de other y la asigna a este objeto QModbusPdu.

Documentación de variables miembro

const quint8 QModbusPdu::ExceptionByte

La variable se inicializa a 0x80.

Las excepciones se notifican en un formato de paquete definido. Se devuelve al cliente solicitante un código de función igual al código de función original, excepto con su bit más significativo activado. Esto equivale a añadir 0x80 al valor del código de función original.

Este campo puede utilizarse para enmascarar el bit de excepción en el campo de función de un paquete Modbus sin procesar.

No miembros relacionados

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

Escribe un pdu en stream y devuelve una referencia al flujo.

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

Escribe el Modbus pdu en el flujo 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.