En esta página

QModbusServer Class

La clase QModbusServer es la interfaz para recibir y procesar peticiones Modbus. Más...

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

QModbusRtuSerialServer y QModbusTcpServer

Tipos Públicos

enum Option { DiagnosticRegister, ExceptionStatusOffset, DeviceBusy, AsciiInputDelimiter, ListenOnlyMode, …, UserOption }

Funciones públicas

QModbusServer(QObject *parent = nullptr)
bool data(QModbusDataUnit *newData) const
bool data(QModbusDataUnit::RegisterType table, quint16 address, quint16 *data) const
virtual bool processesBroadcast() const
int serverAddress() const
bool setData(const QModbusDataUnit &newData)
bool setData(QModbusDataUnit::RegisterType table, quint16 address, quint16 data)
virtual bool setMap(const QModbusDataUnitMap &map)
void setServerAddress(int serverAddress)
virtual bool setValue(int option, const QVariant &newValue)
virtual QVariant value(int option) const

Señales

void dataWritten(QModbusDataUnit::RegisterType table, int address, int size)

Funciones protegidas

virtual QModbusResponse processPrivateRequest(const QModbusPdu &request)
virtual QModbusResponse processRequest(const QModbusPdu &request)
virtual bool readData(QModbusDataUnit *newData) const
virtual bool writeData(const QModbusDataUnit &newData)

Descripción Detallada

Las redes Modbus pueden tener múltiples servidores Modbus. Los Servidores Modbus son leídos/escritos por un cliente Modbus representado por QModbusClient. QModbusServer se comunica con un backend Modbus, proporcionando a los usuarios una API conveniente.

Documentación de tipos de miembros

enum QModbusServer::Option

Cada servidor Modbus tiene un conjunto de valores asociados, cada uno con su propia opción.

Las opciones de propósito general (y los tipos asociados) son:

ConstanteValorDescripción
QModbusServer::DiagnosticRegister0El registro de diagnóstico del servidor. quint16
QModbusServer::ExceptionStatusOffset1Desplazamiento del byte de estado de excepción del servidor. quint16
QModbusServer::DeviceBusy2Indicador para señalar que el servidor está procesando un comando de programa de larga duración. quint16
QModbusServer::AsciiInputDelimiter3El delimitador de fin de mensaje Modbus ASCII. char
QModbusServer::ListenOnlyMode4Indicador para establecer el modo de sólo escucha del servidor. Esta función sólo la soportan normalmente los dispositivos serie Modbus. bool
QModbusServer::ServerIdentifier5El identificador del servidor, no la dirección del servidor. quint8
QModbusServer::RunIndicatorStatus6El indicador de ejecución del servidor. quint8
QModbusServer::AdditionalData7Los datos adicionales del servidor. QByteArray
QModbusServer::DeviceIdentification8La descripción física y funcional del servidor. QModbusDeviceIdentification

Las opciones de usuario:

ConstanteValorDescripción
QModbusServer::UserOption0x100La primera opción que puede utilizarse para fines específicos del usuario.

En el caso de las opciones de usuario, corresponde al desarrollador decidir qué tipos utilizar y asegurarse de que los componentes utilizan los tipos correctos al acceder a los valores y establecerlos.

Documentación de las funciones miembro

[explicit] QModbusServer::QModbusServer(QObject *parent = nullptr)

Construye un servidor Modbus con la dirección parent especificada.

bool QModbusServer::data(QModbusDataUnit *newData) const

Devuelve los valores en el rango de registro dado por newData.

newData debe proporcionar un tipo de registro válido, la dirección de inicio y valueCount. El newData devuelto contendrá los valores de registro asociados con el rango dado.

Si newData contiene un tipo de registro válido pero una dirección de inicio negativa, se devolverá el mapa de registros completo y newData tendrá el tamaño adecuado.

Véase también setData().

bool QModbusServer::data(QModbusDataUnit::RegisterType table, quint16 address, quint16 *data) const

Lee los datos almacenados en el servidor Modbus. Un servidor Modbus tiene cuatro tablas (table) y cada una tiene un único campo address, que se utiliza para leer data del campo deseado. Ver QModbusDataUnit::RegisterType para más información sobre las diferentes tablas. Devuelve false si la dirección está fuera del rango del mapa o el tipo de registro ni siquiera está definido.

Véase también QModbusDataUnit::RegisterType y setData().

[signal] void QModbusServer::dataWritten(QModbusDataUnit::RegisterType table, int address, int size)

Esta señal se emite cuando un cliente Modbus ha escrito uno o más campos de datos en el servidor Modbus. La señal contiene información sobre los campos que se escribieron:

  • Tipo de registro (table) que se ha escrito,
  • address del primer campo que se escribió,
  • y size de los campos consecutivos que se escribieron a partir de address.

La señal no se emite cuando los campos que se van a escribir no han cambiado debido a que no se ha modificado su valor.

[virtual protected] QModbusResponse QModbusServer::processPrivateRequest(const QModbusPdu &request)

Esta función debería ser implementada por servidores Modbus personalizados. Es llamada por processRequest() si la request dada no es una petición Modbus estándar.

Sobrescribir esta función permite el manejo de códigos de función y subcódigos de función adicionales no especificados en la Especificación del Protocolo de Aplicación Modbus 1.1b. Las reimplementaciones deben llamar a esta función de nuevo para asegurarse de que se devuelve una respuesta de excepción para todos los códigos de función desconocidos que la implementación Modbus personalizada no maneja.

Esta implementación por defecto devuelve un QModbusExceptionResponse con el código de función request y el código de error establecido a función ilegal.

Véase también processRequest().

[virtual protected] QModbusResponse QModbusServer::processRequest(const QModbusPdu &request)

Procesa un cliente Modbus request y devuelve una respuesta Modbus. Esta función devuelve un QModbusResponse o QModbusExceptionResponse dependiendo de la naturaleza de la solicitud.

La implementación por defecto de esta función maneja todos los códigos de función Modbus estándar definidos por la Especificación del Protocolo de Aplicación Modbus 1.1b. Todos los demás códigos de función Modbus no incluidos en la especificación se reenvían a processPrivateRequest().

El manejo por defecto de las peticiones de código de función Modbus estándar puede sobrescribirse reimplementando esta función. La sobreescritura debe manejar el tipo de petición en cuestión y devolver el QModbusResponse apropiado. Una razón común podría ser filtrar solicitudes de código de función para valores de datos para limitar el acceso de lectura/escritura y códigos de función no deseados en implementaciones particulares como diagnósticos de línea serie en capas de transporte ethernet o Modbus Plus. Cualquier otro tipo de petición debería ser reenviada a esta implementación por defecto.

Nota: Esta función no debe ser sobrescrita para proporcionar una implementación personalizada para tipos de petición Modbus no estándar.

Véase también processPrivateRequest().

[virtual] bool QModbusServer::processesBroadcast() const

Las subclases deberían implementar esta función si la capa de transporte debe gestionar las difusiones. La implementación debería entonces devolver true si la petición actualmente procesada es una petición de difusión; en caso contrario false. La implementación por defecto devuelve siempre false.

Nota: El valor de retorno de esta función sólo tiene sentido desde dentro de processRequest() o processPrivateRequest(), de lo contrario sólo puede decir que la última petición procesada fue una petición de difusión.

[virtual protected] bool QModbusServer::readData(QModbusDataUnit *newData) const

Lee los valores en el rango de registro dado por newData y escribe los datos de vuelta a newData. Devuelve true en caso de éxito o false si newData es 0, el rango newData está fuera del rango del mapa o registerType() no existe.

Nota: Las subclases que implementan la lectura desde un almacén de respaldo diferente al predeterminado, también necesitan implementar setMap() y writeData().

Véase también setMap() y writeData().

int QModbusServer::serverAddress() const

Devuelve la dirección de esta instancia de servidor Modbus.

Véase también setServerAddress().

bool QModbusServer::setData(const QModbusDataUnit &newData)

Escribe newData en el mapa del servidor Modbus. Devuelve false si el rango newData está fuera del rango del mapa.

Si la llamada se ha realizado correctamente, se emite la señal dataWritten(). Tenga en cuenta que la señal no se emite cuando el registro direccionado no ha cambiado. Esto puede ocurrir cuando newData ya contiene exactamente los mismos valores que el registro. No obstante, esta función devuelve true en tales casos.

Véase también data().

bool QModbusServer::setData(QModbusDataUnit::RegisterType table, quint16 address, quint16 data)

Escribe datos en el servidor Modbus. Un servidor Modbus tiene cuatro tablas (table) y cada una tiene un único campo address, que se utiliza para escribir data en el campo deseado. Devuelve false si la dirección está fuera del rango del mapa.

Si la llamada ha tenido éxito se emite la señal dataWritten(). Tenga en cuenta que la señal no se emite cuando data no ha cambiado. No obstante, esta función devuelve true en tales casos.

Véase también QModbusDataUnit::RegisterType, data(), y dataWritten().

[virtual] bool QModbusServer::setMap(const QModbusDataUnitMap &map)

Establece la estructura de mapa registrada para peticiones de otros clientes ModBus a map. Los valores de registro se inicializan con cero. Devuelve true en caso de éxito; en caso contrario false.

Si no se llama a esta función antes de conectarse, se configura un registro por defecto con cero entradas.

Nota: Llamar a esta función descarta cualquier valor de registro que haya sido establecido previamente.

void QModbusServer::setServerAddress(int serverAddress)

Establece la dirección para esta instancia de servidor Modbus en serverAddress.

Véase también serverAddress().

[virtual] bool QModbusServer::setValue(int option, const QVariant &newValue)

Establece newValue para option y devuelve true en caso de éxito; false en caso contrario.

Nota: Si el tipo asociado a la opción es quint8 o quint16 y el tipo de newValue es mayor, los datos se truncarán o la conversación fallará.

ClaveDescripción
QModbusServer::DiagnosticRegisterEstablece el registro de diagnóstico del servidor en una codificación específica del dispositivo en newValue. El valor predeterminado preestablecido es 0x0000. Los valores de bit del registro necesitan documentación específica del dispositivo.
QModbusServer::ExceptionStatusOffsetEstablece el desplazamiento del byte de estado de excepción del servidor en newValue, que es la dirección de desplazamiento absoluta en las bobinas (registro 0x). Tabla de registros Modbus empezando por 0x0000h. El valor por defecto preestablecido es 0x0000, utilizando las bobinas de estado de excepción similares a las CPUs Modicon 984 (bobinas 1-8).

La función devuelve true si el registro coils contiene los 8 bits necesarios para almacenar y recuperar las bobinas de estado, en caso contrario false.

QModbusServer::DeviceBusyEstablece un indicador que señala que el servidor está ocupado procesando un comando de programa de larga duración. Los valores válidos son 0x0000 (no ocupado) y 0xffff (ocupado). El valor por defecto preestablecido es 0x0000.
QModbusServer::AsciiInputDelimiternewValue se convierte en el delimitador de fin de mensaje para futuros mensajes Modbus ASCII. El valor por defecto preestablecido es \n.
QModbusServer::ListenOnlyModeSs el estado de sólo escucha del servidor a newValue. Si el modo de sólo escucha se establece en true, los mensajes son monitorizados pero no se enviará ninguna respuesta. El valor por defecto preestablecido es false.
QModbusServer::ServerIdentifierEstablece el identificador de fabricante del servidor en newValue. Los valores posibles están en el rango de 0x00 a 0xff. El valor por defecto preestablecido es 0x0a.
QModbusServer::RunIndicatorStatusEstablece el estado del indicador de ejecución del servidor en newValue. Este dato es utilizado como adenda por el código de función QModbusPdu::ReportServerId. Los valores válidos son 0x00 (OFF) y 0xff (ON). El valor por defecto preestablecido es 0xff (ON).
QModbusServer::AdditionalDataEstablece los datos adicionales del servidor en newValue. Estos datos son utilizados como addendum por el código de función QModbusPdu::ReportServerId. El tamaño máximo de los datos no puede superar los 249 bytes para ajustarse a las restricciones de tamaño de los mensajes de respuesta. El valor por defecto preestablecido es Qt Modbus Server.
QModbusServer::DeviceIdentificationEstablece la descripción física y funcional del servidor. Por defecto no hay datos adicionales de identificación del dispositivo.
QModbusServer::UserOptionEstablece el valor de una opción de usuario en newValue.

Nota: En el caso de las opciones de usuario, corresponde al desarrollador decidir qué tipos utilizar y asegurarse de que los componentes utilizan los tipos correctos al acceder a los valores y establecerlos.

Véase también value().

[virtual] QVariant QModbusServer::value(int option) const

Devuelve el valor de option o un QVariant no válido si la opción no está configurada.

OpciónDescripción
QModbusServer::DiagnosticRegisterDevuelve el valor del registro de diagnóstico del servidor. El registro de diagnóstico contiene contenidos específicos del dispositivo donde cada bit tiene un significado específico.
QModbusServer::ExceptionStatusOffsetDevuelve la dirección offset de la ubicación del byte de estado de excepción en el registro de bobinas.
QModbusServer::DeviceBusyDevuelve un indicador que señala si el servidor está procesando un comando de programa de larga duración.
QModbusServer::AsciiInputDelimiterDevuelve un delimitador de fin de mensaje de los mensajes Modbus ASCII.
QModbusServer::ListenOnlyModeDevuelve el estado de sólo escucha del servidor. Los mensajes son monitorizados pero no se enviará ninguna respuesta.
QModbusServer::ServerIdentifierDevuelve el código identificador del fabricante del servidor. Puede ser un valor arbitrario en el rango de 0x00 a 0xff.
QModbusServer::RunIndicatorStatusDevuelve el estado del indicador de ejecución del servidor. Este dato es utilizado como complemento por el código de función QModbusPdu::ReportServerId.
QModbusServer::AdditionalDataDevuelve los datos adicionales del servidor. Estos datos son utilizados como complemento por el código de función QModbusPdu::ReportServerId.
QModbusServer::DeviceIdentificationDevuelve la descripción física y funcional del servidor.
QModbusServer::UserOptionDevuelve el valor de una opción de usuario.

Nota: En el caso de las opciones de usuario, corresponde al desarrollador decidir qué tipos utilizar y asegurarse de que los componentes utilizan los tipos correctos al acceder a los valores y establecerlos.

Véase también setValue().

[virtual protected] bool QModbusServer::writeData(const QModbusDataUnit &newData)

Escribe newData en el mapa del servidor Modbus. Devuelve true en caso de éxito, o false si el rango newData está fuera del rango del mapa o registerType() no existe.

Nota: Las subclases que implementan la escritura en un almacén de respaldo diferente al predeterminado, también necesitan implementar setMap() y readData(). La señal dataWritten() también debe emitirse desde la implementación de las funciones.

Véase también setMap(), readData(), y dataWritten().

© 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.