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 : |
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 :
| Constante | Valeur | Description de l'option |
|---|---|---|
QModbusServer::DiagnosticRegister | 0 | Registre de diagnostic du serveur. quint16 |
QModbusServer::ExceptionStatusOffset | 1 | Le décalage de l'octet d'état d'exception du serveur. quint16 |
QModbusServer::DeviceBusy | 2 | Drapeau signalant que le serveur est engagé dans le traitement d'une commande de programme de longue durée. quint16 |
QModbusServer::AsciiInputDelimiter | 3 | Délimiteur de fin de message Modbus ASCII. char |
QModbusServer::ListenOnlyMode | 4 | Indicateur 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::ServerIdentifier | 5 | L'identifiant du serveur, et non l'adresse du serveur. quint8 |
QModbusServer::RunIndicatorStatus | 6 | L'indicateur d'exécution du serveur. quint8 |
QModbusServer::AdditionalData | 7 | Les données supplémentaires du serveur. QByteArray |
QModbusServer::DeviceIdentification | 8 | La description physique et fonctionnelle du serveur. QModbusDeviceIdentification |
Options utilisateur :
| Constante | Valeur | Description de l'option |
|---|---|---|
QModbusServer::UserOption | 0x100 | La 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::DiagnosticRegister | Dé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::ExceptionStatusOffset | Dé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 |
| QModbusServer::DeviceBusy | Dé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::AsciiInputDelimiter | newValue devient le délimiteur de fin de message pour les futurs messages Modbus ASCII. La valeur par défaut est \n. |
| QModbusServer::ListenOnlyMode | newValueSi 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::ServerIdentifier | Dé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::RunIndicatorStatus | Attribue 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::AdditionalData | Dé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::DeviceIdentification | Dé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::UserOption | Dé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.
| Option | Description de l'option |
|---|---|
| QModbusServer::DiagnosticRegister | Renvoie 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::ExceptionStatusOffset | Renvoie l'adresse de décalage de l'emplacement de l'octet d'état d'exception dans le registre des bobines. |
| QModbusServer::DeviceBusy | Renvoie un drapeau qui signale si le serveur est engagé dans le traitement d'une commande de programme de longue durée. |
| QModbusServer::AsciiInputDelimiter | Renvoie un délimiteur de fin de message des messages Modbus ASCII. |
| QModbusServer::ListenOnlyMode | Renvoie l'état d'écoute du serveur. Les messages sont surveillés mais aucune réponse n'est envoyée. |
| QModbusServer::ServerIdentifier | Renvoie le code d'identification du fabricant du serveur. Il peut s'agir d'une valeur arbitraire comprise entre 0x00 et 0xff. |
| QModbusServer::RunIndicatorStatus | Renvoie 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::AdditionalData | Renvoie les données supplémentaires du serveur. Ces données sont utilisées comme addendum par le code de la fonction QModbusPdu::ReportServerId. |
| QModbusServer::DeviceIdentification | Renvoie la description physique et fonctionnelle du serveur. |
| QModbusServer::UserOption | Renvoie 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.