Sur cette page

QModbusServer Class

La classe QModbusServer est l'interface permettant de recevoir et de traiter les requêtes Modbus. Plus d'informations...

En-tête : #include <QModbusServer>
CMake : find_package(Qt6 REQUIRED COMPONENTS SerialBus)
target_link_libraries(mytarget PRIVATE Qt6::SerialBus)
qmake : QT += serialbus
Hérite : QModbusDevice
Héritée 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/écrits par un client Modbus représenté par QModbusClient. QModbusServer communique avec un backend Modbus, fournissant aux utilisateurs une API pratique.

Type de membre Documentation

enum QModbusServer::Option

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

Les options générales (et les types associés) sont les suivantes :

ConstanteValeurDescription de l'option
QModbusServer::DiagnosticRegister0Registre de diagnostic du serveur. quint16
QModbusServer::ExceptionStatusOffset1Le décalage de l'octet d'état d'exception du serveur. quint16
QModbusServer::DeviceBusy2Drapeau signalant que le serveur est engagé dans le traitement d'une commande de programme de longue durée. quint16
QModbusServer::AsciiInputDelimiter3Délimiteur de fin de message Modbus ASCII. char
QModbusServer::ListenOnlyMode4Indicateur permettant d'activer le mode écoute seule du serveur. Cette fonction n'est généralement prise en charge que par les dispositifs série Modbus. bool
QModbusServer::ServerIdentifier5L'identifiant du serveur, et non l'adresse du serveur. 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 de l'option
QModbusServer::UserOption0x100La première option qui peut être utilisée à des fins spécifiques à l'utilisateur.

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 lorsqu'ils accèdent aux valeurs et les définissent.

Documentation sur les fonctions membres

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

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

bool QModbusServer::data(QModbusDataUnit *newData) const

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

newData doit fournir un type de registre, une adresse de départ et un nombre de valeurs valides. L'adresse newData renvoyée contiendra les valeurs de registre associées à la plage donnée.

Si newData contient un type de registre valide mais une adresse de départ négative, la carte de registre complète est renvoyée et newData est dimensionné de manière appropriée.

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 possède quatre tables (table) et chacune possède un champ address unique, qui est utilisé pour lire data à partir du champ désiré. Voir QModbusDataUnit::RegisterType pour plus d'informations sur les différentes tables. Renvoie false si l'adresse est en dehors de la plage de la carte ou si le type de registre n'est même 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 au 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 écrit,
  • et 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 de l'absence de changement de 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 processRequest() si l'adresse request n'est pas une requête Modbus standard.

L'écrasement de cette fonction permet de gérer des codes et sous-codes de fonctions supplémentaires non spécifiés dans la spécification du protocole d'application Modbus 1.1b. Les réimplémentations doivent rappeler cette fonction pour s'assurer qu'une réponse d'exception est renvoyée pour tous les codes de fonction inconnus que l'implémentation personnalisée de Modbus ne gère pas.

Cette implémentation par défaut renvoie une adresse QModbusExceptionResponse avec le code de fonction request et le code d'erreur défini comme fonction illégale.

Voir aussi processRequest().

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

Traite une demande de client Modbus request et renvoie une réponse Modbus. Cette fonction renvoie une réponse QModbusResponse ou QModbusExceptionResponse selon la nature de la demande.

L'implémentation par défaut de cette fonction traite 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 transmis à processPrivateRequest().

Le traitement par défaut des demandes de codes de fonction Modbus standard peut être remplacé par la réimplémentation de cette fonction. Le remplacement doit traiter le type de demande en question et renvoyer l'adresse QModbusResponse appropriée. Une raison courante pourrait être de filtrer les demandes de code de fonction pour les valeurs de données afin de limiter l'accès en lecture/écriture et les codes de fonction non souhaités dans des implémentations particulières telles que les diagnostics de ligne série sur les couches de transport Ethernet ou Modbus Plus. Tous les autres types de demandes doivent être transmis à cette implémentation par défaut.

Note : Cette fonction ne doit pas être surchargée pour fournir une implémentation personnalisée pour les types de requêtes Modbus non standard.

Voir aussi processPrivateRequest().

[virtual] bool QModbusServer::processesBroadcast() const

Les sous-classes doivent implémenter cette fonction si la couche transport doit gérer les diffusions. L'implémentation doit alors renvoyer true si la demande en cours de traitement est une demande 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 processPrivateRequest(), sinon elle peut seulement indiquer que la dernière demande traitée était une demande de diffusion.

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

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

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

Voir aussi setMap() et writeData().

int QModbusServer::serverAddress() const

Renvoie l'adresse de cette instance de serveur Modbus.

Voir aussi setServerAddress().

bool QModbusServer::setData(const QModbusDataUnit &newData)

Écrit newData dans la carte du serveur Modbus. Retourne false si la plage newData est en dehors de la plage de la carte.

Si l'appel a réussi, 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 aussi data().

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

Écrit des données sur le serveur Modbus. Un serveur Modbus a quatre tables (table) et chacune a un champ address unique, qui est utilisé pour écrire data dans le champ désiré. Renvoie false si l'adresse est en dehors de la plage de la carte.

Si l'appel a réussi, 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 ce cas.

Voir aussi QModbusDataUnit::RegisterType, data(), et dataWritten().

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

Définit la structure de carte enregistrée pour les demandes d'autres clients ModBus à map. Les valeurs de registre sont initialisées à zéro. Retourne true en cas de succès, sinon false.

Si cette fonction n'est pas appelée avant la connexion, un registre par défaut avec zéro entrée est configuré.

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

void QModbusServer::setServerAddress(int serverAddress)

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

Voir aussi serverAddress().

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

Définit 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 conversation échouera.

CléDescription de l'option
QModbusServer::DiagnosticRegisterDéfinit le registre de diagnostic du serveur dans un codage spécifique au périphérique à newValue. La valeur par défaut prédéfinie est 0x0000. Les valeurs des bits du registre nécessitent une documentation spécifique à l'appareil.
QModbusServer::ExceptionStatusOffsetDéfinit l'octet de décalage de l'état d'exception du serveur à newValue, qui est l'adresse de décalage absolue dans les bobines (registre 0x). Tableau des registres Modbus commençant par 0x0000h. La valeur par défaut prédéfinie est 0x0000, en utilisant les bobines d'état d'exception similaires aux CPU Modicon 984 (bobines 1-8).

La fonction renvoie true si le registre des bobines contient les 8 bits nécessaires pour stocker et récupérer les bobines d'état, sinon false.

QModbusServer::DeviceBusyDéfinit un drapeau qui signale que le serveur est engagé dans le traitement d'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::AsciiInputDelimiternewValue devient le délimiteur de fin de message pour les futurs messages Modbus ASCII. La valeur par défaut est \n.
QModbusServer::ListenOnlyModenewValueSi le mode écoute seule est réglé 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::RunIndicatorStatusAttribue la valeur newValue à l'état de l'indicateur de fonctionnement du serveur. Cette donnée est utilisée comme addendum 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 addendum par le code de fonction QModbusPdu::ReportServerId. La taille maximale des données ne peut excéder 249 octets afin de respecter les restrictions relatives à la 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, il n'y a pas de données supplémentaires d'identification du dispositif.
QModbusServer::UserOptionDéfinit la valeur d'une option utilisateur à newValue.

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

Voir également value().

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

Renvoie la valeur de option ou une valeur invalide de QVariant si l'option n'est pas définie.

OptionDescription de l'option
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 drapeau qui signale si le serveur est engagé dans le traitement d'une commande de programme de longue durée.
QModbusServer::AsciiInputDelimiterRenvoie un délimiteur de fin de message des messages Modbus ASCII.
QModbusServer::ListenOnlyModeRenvoie l'état d'écoute 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 d'exécution du serveur. Ces données sont utilisées comme complément par le code de la fonction QModbusPdu::ReportServerId.
QModbusServer::AdditionalDataRenvoie les données supplémentaires du serveur. Ces données sont utilisées comme addendum par le code de la 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 veiller à ce que les composants utilisent les types corrects lorsqu'ils accèdent aux valeurs et les définissent.

Voir également setValue().

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

Écrit newData dans la carte du serveur Modbus. Retourne true en cas de succès, ou false si la plage newData est en dehors de la plage de la carte ou si le type registerType() n'existe pas.

Remarque : les sous-classes qui implémentent l'écriture dans un backing store différent de celui par défaut doivent également implémenter setMap() et readData(). Le signal dataWritten() doit également être émis à partir de l'implémentation de la fonction.

Voir aussi 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.