Sur cette page

QModbusServer Class

La classe QModbusServer sert d'interface pour recevoir et traiter les requêtes Modbus. En savoir plus...

En-tête : #include <QModbusServer>
CMake : find_package(Qt6 REQUIRED COMPONENTS SerialBus)
target_link_libraries(mytarget PRIVATE Qt6::SerialBus)
qmake : QT += serialbus
Hérite de : QModbusDevice
Hérité par :

QModbusRtuSerialServer et QModbusTcpServer

Types publics

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

Fonctions publiques

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

Signaux

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

Fonctions protégées

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

Description détaillée

Les réseaux Modbus peuvent comporter plusieurs serveurs Modbus. Les serveurs Modbus sont lus et écrits par un client Modbus représenté par l'interface QModbusClient. QModbusServer communique avec un backend Modbus, offrant ainsi aux utilisateurs une API pratique.

Documentation sur les types de membres

enum QModbusServer::Option

Chaque serveur Modbus est associé à un ensemble de valeurs, chacune disposant de sa propre option.

Les options d'usage général (et les types associés) sont les suivantes :

ConstanteValeurDescription
QModbusServer::DiagnosticRegister0Registre de diagnostic du serveur. quint16
QModbusServer::ExceptionStatusOffset1Décalage de l’octet d’état d’exception du serveur. quint16
QModbusServer::DeviceBusy2Indicateur signalant que le serveur est en train de traiter une commande de programme de longue durée. quint16
QModbusServer::AsciiInputDelimiter3Le délimiteur de fin de message Modbus ASCII. char
QModbusServer::ListenOnlyMode4Indicateur permettant de définir le mode « écoute seule » du serveur. Cette fonction n’est généralement prise en charge que par les périphériques Modbus série. bool
QModbusServer::ServerIdentifier5L'identifiant du serveur, et non son adresse. quint8
QModbusServer::RunIndicatorStatus6L'indicateur d’exécution du serveur. quint8
QModbusServer::AdditionalData7Les données supplémentaires du serveur. QByteArray
QModbusServer::DeviceIdentification8La description physique et fonctionnelle du serveur. QModbusDeviceIdentification

Options utilisateur :

ConstanteValeurDescription
QModbusServer::UserOption0x100Première option pouvant être utilisée à des fins spécifiques à l'utilisateur.

Pour les options utilisateur, il appartient au développeur de décider quels types utiliser et de s'assurer que les composants utilisent les types appropriés lors de l'accès aux valeurs et de leur définition.

Documentation sur les fonctions membres

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

Crée un serveur Modbus avec l'parent spécifiée.

bool QModbusServer::data(QModbusDataUnit *newData) const

Renvoie les valeurs de la plage de registres indiquée par ` newData`.

newData Il est nécessaire de fournir un type de registre valide, une adresse de départ et un nombre de valeurs (valueCount). Le paramètre « newData » renvoyé contiendra les valeurs des registres associés à la plage indiquée.

Si ` newData ` contient un type de registre valide mais une adresse de départ négative, la carte des registres entière est renvoyée et ` newData ` est redimensionné en conséquence.

Voir également setData().

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

Lit les données stockées dans le serveur Modbus. Un serveur Modbus comporte quatre tables (table) ; chacune dispose d’un champ unique « address », qui sert à lire la valeur « data » à partir du champ souhaité. Consultez QModbusDataUnit::RegisterType pour plus d’informations sur les différentes tables. Renvoie « false » si l’adresse se trouve en dehors de la plage de la carte ou si le type de registre n’est pas défini.

Voir également QModbusDataUnit::RegisterType et setData().

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

Ce signal est émis lorsqu'un client Modbus a écrit un ou plusieurs champs de données sur le serveur Modbus. Le signal contient des informations sur les champs qui ont été écrits :

  • le type de registre (table) qui a été écrit,
  • address du premier champ qui a été écrit,
  • et l'size des champs consécutifs qui ont été écrits à partir de address.

Le signal n’est pas émis lorsque les champs à écrire n’ont pas changé en raison d’une absence de modification de leur valeur.

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

Cette fonction doit être implémentée par les serveurs Modbus personnalisés. Elle est appelée par la fonction ` processRequest()` si l'request on fournie n'est pas une requête Modbus standard.

La redéfinition de cette fonction permet de gérer des codes de fonction et des codes de sous-fonction supplémentaires non spécifiés dans la spécification du protocole d'application Modbus 1.1b. Les réimplémentations doivent appeler à nouveau cette fonction afin de garantir qu’une réponse d’exception soit renvoyée pour tous les codes de fonction inconnus que l’implémentation Modbus personnalisée ne gère pas.

Cette implémentation par défaut renvoie une instance de ` QModbusExceptionResponse ` dont le code de fonction ` request ` et le code d'erreur sont définis sur « fonction illégale ».

Voir également processRequest().

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

Traite une requête Modbus ( request ) et renvoie une réponse Modbus. Cette fonction renvoie un objet de type « QModbusResponse » ou « QModbusExceptionResponse » selon la nature de la requête.

L'implémentation par défaut de cette fonction gère tous les codes de fonction Modbus standard tels que définis par la spécification du protocole d'application Modbus 1.1b. Tous les autres codes de fonction Modbus non inclus dans la spécification sont redirigés vers processPrivateRequest().

Le traitement par défaut des requêtes de codes de fonction Modbus standard peut être redéfini en réimplémentant cette fonction. La redéfinition doit traiter le type de requête en question et renvoyer l’ QModbusResponse approprié. Une raison courante peut être de filtrer les requêtes de codes de fonction portant sur des valeurs de données afin de limiter l’accès en lecture/écriture, ainsi que les codes de fonction indésirables dans certaines implémentations, telles que les diagnostics de ligne série sur Ethernet ou les couches de transport Modbus Plus. Tout autre type de requête doit être transmis à cette implémentation par défaut.

Remarque : cette fonction ne doit pas être redéfinie pour fournir une implémentation personnalisée pour des types de requêtes Modbus non standard.

Voir également processPrivateRequest().

[virtual] bool QModbusServer::processesBroadcast() const

Les sous-classes doivent implémenter cette fonction si la couche de transport doit gérer les diffusions. L'implémentation doit alors renvoyer ` true ` si la requête en cours de traitement est une requête de diffusion ; sinon, ` false`. L'implémentation par défaut renvoie toujours ` false`.

Remarque : la valeur de retour de cette fonction n’a de sens qu’à l’intérieur de processRequest() ou de processPrivateRequest(), sinon elle permet uniquement de savoir que la dernière requête traitée était une requête de diffusion.

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

Lit les valeurs dans la plage de registres indiquée par newData et réécrit les données dans newData. Renvoie true en cas de succès ou false si newData est 0, si la plage newData se trouve en dehors de la plage de la carte ou si registerType() n'existe pas.

Remarque : les sous-classes qui implémentent la lecture à partir d'un magasin de sauvegarde différent de celui par défaut doivent également implémenter les méthodes setMap() et writeData().

Voir également setMap() et writeData().

int QModbusServer::serverAddress() const

Renvoie l'adresse de cette instance de serveur Modbus.

Voir également setServerAddress().

bool QModbusServer::setData(const QModbusDataUnit &newData)

Écrit la valeur « newData » dans la table du serveur Modbus. Renvoie « false » si la plage de l’ newData e se situe en dehors de la plage de la table.

Si l'appel a abouti, le signal dataWritten() est émis. Notez que le signal n'est pas émis lorsque le registre adressé n'a pas changé. Cela peut se produire lorsque newData contient exactement les mêmes valeurs que le registre. Néanmoins, cette fonction renvoie true dans de tels cas.

Voir également data().

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

Écrit des données sur le serveur Modbus. Un serveur Modbus comporte quatre tables (table) et chacune d’entre elles possède un champ « address » unique, qui sert à écrire des données de type « data » dans le champ souhaité. Renvoie « false » si l’adresse se trouve en dehors de la plage de la carte.

Si l’appel a abouti, le signal dataWritten() est émis. Notez que le signal n’est pas émis lorsque data n’a pas changé. Néanmoins, cette fonction renvoie true dans de tels cas.

Voir également QModbusDataUnit::RegisterType, data() et dataWritten().

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

Définit la structure de la table d'adresses enregistrée pour les requêtes provenant d'autres clients ModBus adressées à map. Les valeurs des registres sont initialisées à zéro. Renvoie true en cas de succès ; sinon, false.

Si cette fonction n’est pas appelée avant la connexion, un registre par défaut ne contenant aucune entrée est configuré.

Remarque : l’appel de cette fonction efface toute valeur de registre précédemment définie.

void QModbusServer::setServerAddress(int serverAddress)

Définit l'adresse de cette instance de serveur Modbus sur serverAddress.

Voir également serverAddress().

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

Définit l'newValue pour option et renvoie true en cas de succès ; false dans le cas contraire.

Remarque : si le type associé à l’option est quint8 ou quint16 et que le type de newValue est plus grand, les données seront tronquées ou la conversion échouera.

CléDescription
QModbusServer::DiagnosticRegisterDéfinit le registre de diagnostic du serveur dans un encodage spécifique à l’appareil sur newValue. La valeur par défaut est 0x0000. Les valeurs binaires du registre nécessitent une documentation spécifique à l’appareil.
QModbusServer::ExceptionStatusOffsetDéfinit le décalage de l’octet d’état d’exception du serveur sur « newValue », qui correspond à l’adresse de décalage absolue dans les bobines (registre 0x). Tableau des registres Modbus commençant par « 0x0000h ». La valeur par défaut est « 0x0000 », utilisant les bobines d’état d’exception similaires à celles des automates Modicon 984 (bobines 1 à 8).

La fonction renvoie true si le registre des bobines contient les 8 bits nécessaires au stockage et à la récupération des bobines d’état, sinon false.

QModbusServer::DeviceBusyDéfinit un indicateur signalant que le serveur est occupé à traiter une commande de programme de longue durée. Les valeurs valides sont 0x0000 (non occupé) et 0xffff (occupé). La valeur par défaut est 0x0000.
QModbusServer::AsciiInputDelimiterLe caractère « newValue » devient le délimiteur de fin de message pour les futurs messages Modbus ASCII. La valeur par défaut est « \n ».
QModbusServer::ListenOnlyModeDéfinit l'état « écoute seule » du serveur sur newValue. Si le mode « écoute seule » est défini sur true, les messages sont surveillés mais aucune réponse n'est envoyée. La valeur par défaut est false.
QModbusServer::ServerIdentifierDéfinit l’identifiant du fabricant du serveur sur newValue. Les valeurs possibles sont comprises entre 0x00 et 0xff. La valeur par défaut est 0x0a.
QModbusServer::RunIndicatorStatusDéfinit l’état de l’indicateur de fonctionnement du serveur sur newValue. Ces données sont utilisées en complément par le code de fonction QModbusPdu::ReportServerId. Les valeurs valides sont 0x00 (OFF) et 0xff (ON). La valeur par défaut est 0xff (ON).
QModbusServer::AdditionalDataDéfinit les données supplémentaires du serveur sur newValue. Ces données sont utilisées comme complément par le code de fonction QModbusPdu::ReportServerId. La taille maximale des données ne doit pas dépasser 249 octets afin de respecter les restrictions de taille des messages de réponse. La valeur par défaut est Qt Modbus Server.
QModbusServer::DeviceIdentificationDéfinit la description physique et fonctionnelle du serveur. Par défaut, aucune donnée d’identification supplémentaire du périphérique n’est définie.
QModbusServer::UserOptionDéfinit la valeur d’une option utilisateur sur newValue.

Remarque : pour les options utilisateur, il appartient au développeur de décider des types à utiliser et de s’assurer que les composants utilisent les types corrects lors de l’accès aux valeurs et de leur définition.

Voir également value().

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

Renvoie la valeur de l'option « option » ou une valeur « QVariant » non valide si l'option n'est pas définie.

OptionDescription
QModbusServer::DiagnosticRegisterRenvoie la valeur du registre de diagnostic du serveur. Le registre de diagnostic contient des informations spécifiques au périphérique, chaque bit ayant une signification particulière.
QModbusServer::ExceptionStatusOffsetRenvoie l'adresse de décalage de l'emplacement de l'octet d'état d'exception dans le registre des bobines.
QModbusServer::DeviceBusyRenvoie un indicateur signalant si le serveur est en train de traiter une commande de programme de longue durée.
QModbusServer::AsciiInputDelimiterRenvoie un délimiteur de fin de message pour les messages Modbus ASCII.
QModbusServer::ListenOnlyModeRenvoie l'état « écoute seule » du serveur. Les messages sont surveillés, mais aucune réponse n'est envoyée.
QModbusServer::ServerIdentifierRenvoie le code d'identification du fabricant du serveur. Il peut s'agir d'une valeur arbitraire comprise entre 0x00 et 0xff.
QModbusServer::RunIndicatorStatusRenvoie l’état de l’indicateur de fonctionnement du serveur. Ces données sont utilisées en complément du code de fonction « QModbusPdu::ReportServerId ».
QModbusServer::AdditionalDataRenvoie les données supplémentaires du serveur. Ces données sont utilisées en complément du code de fonction « QModbusPdu::ReportServerId ».
QModbusServer::DeviceIdentificationRenvoie la description physique et fonctionnelle du serveur.
QModbusServer::UserOptionRenvoie la valeur d’une option utilisateur.

Remarque : pour les options utilisateur, il appartient au développeur de décider des types à utiliser et de s’assurer que les composants utilisent les types appropriés lors de l’accès aux valeurs et de leur définition.

Voir aussi setValue().

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

Écrit la valeur « newData » dans la table du serveur Modbus. Renvoie « true » en cas de réussite, ou « false » si la plage de l’ newData e est en dehors de la plage de la table ou si la fonction registerType() n’existe pas.

Remarque : les sous-classes qui implémentent l’écriture dans un magasin de sauvegarde différent de celui par défaut doivent également implémenter les fonctions setMap() et readData(). Le signal dataWritten() doit également être émis depuis l’implémentation de ces fonctions.

Voir également setMap(), readData() et 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.