QModbusPdu Class
QModbusPdu est une classe conteneur abstraite qui regroupe le code de fonction et la charge utile stockés dans une ADU Modbus. En savoir plus...
| En-tête : | #include <QModbusPdu> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS SerialBus) target_link_libraries(mytarget PRIVATE Qt6::SerialBus) |
| qmake : | QT += serialbus |
| Hérité par : |
Types publics
| enum | ExceptionCode { IllegalFunction, IllegalDataAddress, IllegalDataValue, ServerDeviceFailure, Acknowledge, …, ExtendedException } |
| enum | FunctionCode { Invalid, ReadCoils, ReadDiscreteInputs, ReadHoldingRegisters, ReadInputRegisters, …, UndefinedFunctionCode } |
Fonctions publiques
| 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 |
Membres publics statiques
| const quint8 | ExceptionByte |
Fonctions protégées
| QModbusPdu(QModbusPdu::FunctionCode code, const QByteArray &data) | |
| QModbusPdu(const QModbusPdu &other) | |
| QModbusPdu & | operator=(const QModbusPdu &other) |
Éléments non-membres associés
| QDataStream & | operator<<(QDataStream &stream, const QModbusPdu &pdu) |
| QDebug | operator<<(QDebug debug, const QModbusPdu &pdu) |
Description détaillée
La classe permet d'accéder aux paquets bruts du protocole Modbus tels que définis par la spécification 1.1b du protocole d'application Modbus.
Documentation sur les types de membres
enum QModbusPdu::ExceptionCode
Cette énumération décrit toutes les conditions d'erreur possibles telles que définies par les codes d'exception Modbus. Elles sont définies par le serveur après vérification des conditions d'erreur appropriées dans la réponse à une requête et doivent être décodées par le client pour pouvoir traiter le code d'exception.
| Constante | Valeur | Description |
|---|---|---|
QModbusPdu::IllegalFunction | 0x01 | Le code de fonction n'est pas pris en charge par le périphérique. |
QModbusPdu::IllegalDataAddress | 0x02 | L'adresse des données reçues dans la requête n'est pas une adresse autorisée par le serveur Modbus. |
QModbusPdu::IllegalDataValue | 0x03 | La valeur contenue dans le champ de données de la requête n’est pas une valeur autorisée par le serveur Modbus. |
QModbusPdu::ServerDeviceFailure | 0x04 | Une erreur irrémédiable s'est produite alors que le serveur tentait d'effectuer l'action demandée. |
QModbusPdu::Acknowledge | 0x05 | Utilisation spécifique en association avec des commandes de programmation. |
QModbusPdu::ServerDeviceBusy | 0x06 | Le serveur est en train de traiter une commande de programmation de longue durée. |
QModbusPdu::NegativeAcknowledge | 0x07 | Le serveur ne peut pas exécuter la fonction de programme reçue dans la requête. Ce code est renvoyé en cas d’échec d’une requête de programmation. Le client doit demander des informations de diagnostic ou d’erreur au serveur. |
QModbusPdu::MemoryParityError | 0x08 | Indique que la zone de fichiers étendue n'a pas passé le contrôle de cohérence. Utilisé en conjonction avec les codes de fonction 20 et 21. Le code d'exception ne fait référence à aucun paramètre de parité de la ligne de transmission, mais uniquement à la mémoire interne des enregistrements de fichiers du serveur. |
QModbusPdu::GatewayPathUnavailable | 0x0A | Indique que la passerelle n’a pas pu allouer un chemin de communication interne entre le port d’entrée et le port de sortie pour traiter la requête. |
QModbusPdu::GatewayTargetDeviceFailedToRespond | 0x0B | Indique qu’aucune réponse n’a été obtenue de la part du dispositif cible situé derrière une passerelle. Cela signifie généralement que le dispositif cible n’est pas en ligne sur le réseau. |
QModbusPdu::ExtendedException | 0xFF | Il s'agit d'une exception étendue conformément à la spécification Modbus. En général, ce code est utilisé pour décrire une exception qui fait l'objet d'une description plus détaillée par ailleurs. |
enum QModbusPdu::FunctionCode
Définit le code de fonction et le type d'action implicite requis par le serveur. Tous les périphériques Modbus ne prennent pas en charge le même ensemble de codes de fonction.
| Constante | Valeur | Description |
|---|---|---|
QModbusPdu::Invalid | 0x00 | Définie par le constructeur par défaut, ne pas utiliser. |
QModbusPdu::ReadCoils | 0x01 | Demande l'état d'une ou plusieurs bobines à un périphérique. |
QModbusPdu::ReadDiscreteInputs | 0x02 | Demande l'état d'un ou plusieurs registres d'entrée d'un périphérique. |
QModbusPdu::ReadHoldingRegisters | 0x03 | Demande l'état d'une ou plusieurs valeurs de registres de maintien d'un périphérique. |
QModbusPdu::ReadInputRegisters | 0x04 | Demande l'état d'une ou plusieurs valeurs de registres d'entrée d'un périphérique. |
QModbusPdu::WriteSingleCoil | 0x05 | Demande l'écriture d'une seule bobine sur un périphérique. |
QModbusPdu::WriteSingleRegister | 0x06 | Demande d'écriture d'un seul registre de maintien sur un périphérique. |
QModbusPdu::ReadExceptionStatus | 0x07 | Demande l'état des huit sorties d'état d'exception d'un périphérique. |
QModbusPdu::Diagnostics | 0x08 | Utilisé pour effectuer une série de tests visant à vérifier le système de communication client-serveur ou à contrôler les éléments internes |
QModbusPdu::GetCommEventCounter | 0x0B | Demande un mot d’état et un compteur d’événements provenant du compteur d’événements de communication du périphérique. |
QModbusPdu::GetCommEventLog | 0x0C | Demande un mot d’état, un compteur d’événements, un compteur de messages et un champ d’octets d’événements à un périphérique. |
QModbusPdu::WriteMultipleCoils | 0x0F | Demande d’écriture d’une ou plusieurs bobines sur un appareil. |
QModbusPdu::WriteMultipleRegisters | 0x10 | Demande l'écriture d'un ou plusieurs registres de maintien sur un dispositif. |
QModbusPdu::ReportServerId | 0x11 | Demande la description du type, l’état actuel et d’autres informations spécifiques à un périphérique. |
QModbusPdu::ReadFileRecord | 0x14 | Demande la lecture d’un enregistrement de fichier. |
QModbusPdu::WriteFileRecord | 0x15 | Demande l'écriture d'un enregistrement de fichier. |
QModbusPdu::MaskWriteRegister | 0x16 | Demande de modification du contenu d’un registre de maintien spécifié à l’aide d’une combinaison d’un masque ET ou OU et du contenu actuel du registre. |
QModbusPdu::ReadWriteMultipleRegisters | 0x17 | Demande l'état d'un ou plusieurs registres de maintien et, simultanément, l'écriture dans un ou plusieurs registres de maintien sur un périphérique. |
QModbusPdu::ReadFifoQueue | 0x18 | Demande la lecture du contenu d’une file d’attente de type « premier entré, premier sorti » (FIFO) de registres dans un périphérique distant. |
QModbusPdu::EncapsulatedInterfaceTransport | 0x2B | Veuillez vous reporter à l’annexe A de la spécification Modbus. |
QModbusPdu::UndefinedFunctionCode | 0x100 | Ne pas utiliser. |
Documentation des fonctions membres
[constexpr noexcept default] QModbusPdu::QModbusPdu()
Crée un objet QModbusPdu non valide.
[protected] QModbusPdu::QModbusPdu(QModbusPdu::FunctionCode code, const QByteArray &data)
Crée un objet `QModbusPdu` dont le code de fonction est défini sur « code » et dont la charge utile est définie sur « data ». Les données doivent déjà être stockées selon l'ordre des octets « big-endian ».
[noexcept protected default] QModbusPdu::QModbusPdu(const QModbusPdu &other)
Crée un objet QModbusPdu qui est une copie de other.
[virtual noexcept] QModbusPdu::~QModbusPdu()
Supprime un objet de type « QModbusPdu ».
QByteArray QModbusPdu::data() const
Renvoie la charge utile de la PDU, à l'exclusion du code de fonction. La charge utile est stockée selon l'ordre des octets « big-endian ».
Voir également setData().
qint16 QModbusPdu::dataSize() const
Renvoie la taille des données de la PDU, hors code de fonction.
template <typename... Args> void QModbusPdu::decodeData(Args &&... data) const
Convertit la charge utile selon l'endianness de l'hôte et la lit dans ` data`. Les données peuvent correspondre à une liste d'arguments de longueur variable.
QModbusResponsePdu response(QModbusPdu::ReportServerId);
response.encodeData(quint8(0x02), quint8(0x01), quint8(0xff));
quint8 count, id, run;
response.decodeData(&count, &id, &run);Remarque : l'utilisation est limitée à ` quint8 ` et ` quint16 ` uniquement. En effet, les opérateurs de flux ` QDataStream ` n'ajoutent pas seulement les données brutes, mais aussi, par exemple, la taille, le nombre d'éléments, etc. pour les types complexes.
template <typename... Args> void QModbusPdu::encodeData(Args... data)
Définit la charge utile sur data. Les données sont converties et stockées selon l'ordre des octets « big-endian ».
QModbusRequestPdu request(QModbusPdu::ReadCoils);
// starting address and quantity of coils
request.encodeData(quint16(0x0c), quint16(0x0a));Remarque : l’utilisation est limitée aux sites quint8 et quint16 uniquement. En effet, les opérateurs de flux QDataStream n’ajoutent pas seulement les données brutes, mais également, par exemple, la taille, le nombre, etc. pour les types complexes.
QModbusPdu::ExceptionCode QModbusPdu::exceptionCode() const
Renvoie le code d'exception de la réponse.
QModbusPdu::FunctionCode QModbusPdu::functionCode() const
Renvoie le code de fonction de la PDU.
Voir également setFunctionCode().
bool QModbusPdu::isException() const
Renvoie « true » si la PDU contient un code d'exception ; sinon, « false ».
bool QModbusPdu::isValid() const
Renvoie « true » si la PDU est valide ; sinon, « false ».
Une PDU est considérée comme valide si le code de message est compris entre 1 et 255 (en décimal) et si la taille totale de la PDU (code de fonction + données) ne dépasse pas 253 octets. Une PDU construite par défaut n'est pas valide.
void QModbusPdu::setData(const QByteArray &data)
Définit la charge utile de fonction de la PDU sur data. Les données doivent déjà être stockées selon l'ordre des octets « big-endian ».
Voir également data().
[virtual] void QModbusPdu::setFunctionCode(QModbusPdu::FunctionCode code)
Définit le code de fonction de la PDU sur « code ».
Voir également functionCode().
qint16 QModbusPdu::size() const
Renvoie la taille totale de la PDU, y compris le code de fonction et la taille des données.
[noexcept protected default] QModbusPdu &QModbusPdu::operator=(const QModbusPdu &other)
Crée une copie de l'other et l'attribue à cet objet QModbusPdu.
Documentation sur les variables membres
const quint8 QModbusPdu::ExceptionByte
La variable est initialisée à 0x80.
Les exceptions sont signalées dans un format de paquet défini. Un code de fonction est renvoyé au client demandeur ; il est identique au code de fonction d'origine, à l'exception de son bit de poids fort qui est activé. Cela revient à ajouter 0x80 à la valeur du code de fonction d'origine.
Ce champ peut être utilisé pour masquer le bit d'exception dans le champ de fonction d'un paquet Modbus brut.
Éléments non membres associés
QDataStream &operator<<(QDataStream &stream, const QModbusPdu &pdu)
Écrit un fichier « pdu » dans le répertoire « stream » et renvoie une référence à ce flux.
QDebug operator<<(QDebug debug, const QModbusPdu &pdu)
Écrit l'pdu Modbus dans le flux 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.