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: |
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) |
No miembros relacionados
| 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.
| Constante | Valor | Descripción |
|---|---|---|
QModbusPdu::IllegalFunction | 0x01 | El dispositivo no admite el código de función. |
QModbusPdu::IllegalDataAddress | 0x02 | La dirección de datos recibida en la consulta no es una dirección permitida para el servidor Modbus. |
QModbusPdu::IllegalDataValue | 0x03 | El valor contenido en el campo de datos de la petición no es un valor permitido para el servidor Modbus. |
QModbusPdu::ServerDeviceFailure | 0x04 | Se ha producido un error irrecuperable mientras el servidor intentaba realizar la acción solicitada. |
QModbusPdu::Acknowledge | 0x05 | Uso especializado junto con comandos de programación. |
QModbusPdu::ServerDeviceBusy | 0x06 | El servidor está procesando un comando de programa de larga duración. |
QModbusPdu::NegativeAcknowledge | 0x07 | El 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::MemoryParityError | 0x08 | Indica 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::GatewayPathUnavailable | 0x0A | Indica 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::GatewayTargetDeviceFailedToRespond | 0x0B | Indica 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::ExtendedException | 0xFF | Esta 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.
| Constante | Valor | Descripción |
|---|---|---|
QModbusPdu::Invalid | 0x00 | Establecida por el constructor por defecto, no utilizar. |
QModbusPdu::ReadCoils | 0x01 | Solicita el estado de una o más bobinas de un dispositivo. |
QModbusPdu::ReadDiscreteInputs | 0x02 | Solicita el estado de uno o más registros de entrada de un dispositivo. |
QModbusPdu::ReadHoldingRegisters | 0x03 | Solicita el estado de uno o más valores de registro de retención de un dispositivo. |
QModbusPdu::ReadInputRegisters | 0x04 | Solicita el estado de uno o más valores de registro de entrada de un dispositivo. |
QModbusPdu::WriteSingleCoil | 0x05 | Solicita escribir una sola bobina en un dispositivo. |
QModbusPdu::WriteSingleRegister | 0x06 | Solicita escribir un único registro de retención en un dispositivo. |
QModbusPdu::ReadExceptionStatus | 0x07 | Solicita el estado de las ocho salidas de estado de excepción de un dispositivo. |
QModbusPdu::Diagnostics | 0x08 | Se 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::GetCommEventCounter | 0x0B | Solicita una palabra de estado y un recuento de eventos del contador de eventos de comunicación del dispositivo. |
QModbusPdu::GetCommEventLog | 0x0C | Solicita una palabra de estado, un recuento de eventos, un recuento de mensajes y un campo de bytes de eventos de un dispositivo. |
QModbusPdu::WriteMultipleCoils | 0x0F | Solicita escribir una o más bobinas en un dispositivo. |
QModbusPdu::WriteMultipleRegisters | 0x10 | Solicita escribir uno o más registros de retención en un dispositivo. |
QModbusPdu::ReportServerId | 0x11 | Solicita la descripción del tipo, el estado actual y otra información específica de un dispositivo. |
QModbusPdu::ReadFileRecord | 0x14 | Solicita la lectura de un registro de archivo. |
QModbusPdu::WriteFileRecord | 0x15 | Solicita la escritura de un registro de archivo. |
QModbusPdu::MaskWriteRegister | 0x16 | Solicita 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::ReadWriteMultipleRegisters | 0x17 | Solicita 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::ReadFifoQueue | 0x18 | Solicita leer el contenido de una cola de registro FIFO (First-In-First-Out) en un dispositivo remoto. |
QModbusPdu::EncapsulatedInterfaceTransport | 0x2B | Consulte el anexo A de la especificación Modbus. |
QModbusPdu::UndefinedFunctionCode | 0x100 | No 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.