QModbusPdu Class
QModbusPdu est une classe conteneur abstraite contenant le code de fonction et la charge utile stockés à l'intérieur d'un ADU Modbus. Plus d'informations...
| En-tête : | #include <QModbusPdu> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS SerialBus)target_link_libraries(mytarget PRIVATE Qt6::SerialBus) |
| qmake : | QT += serialbus |
| Héritée de : |
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) |
Non-membres apparentés
| QDataStream & | operator<<(QDataStream &stream, const QModbusPdu &pdu) |
| QDebug | operator<<(QDebug debug, const QModbusPdu &pdu) |
Description détaillée
Cette classe permet d'accéder aux paquets bruts du protocole Modbus tels que définis par la spécification du protocole d'application Modbus 1.1b.
Type de membre Documentation
enum QModbusPdu::ExceptionCode
Cette énumération décrit toutes les conditions d'erreur possibles définies par les codes d'exception Modbus. Ils sont définis 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és par le client pour agir sur le code d'exception.
| Constante | Valeur | Description du code de fonction |
|---|---|---|
QModbusPdu::IllegalFunction | 0x01 | Le code de fonction n'est pas pris en charge par le dispositif. |
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 pour le serveur Modbus. |
QModbusPdu::ServerDeviceFailure | 0x04 | Une erreur irrécupérable s'est produite pendant que le serveur tentait d'effectuer l'action demandée. |
QModbusPdu::Acknowledge | 0x05 | Utilisation spécialisée en conjonction avec des commandes de programmation. |
QModbusPdu::ServerDeviceBusy | 0x06 | Le serveur est engagé dans le traitement d'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é lorsque la demande de programmation n'a pas abouti. Le client doit demander au serveur des informations de diagnostic ou d'erreur. |
QModbusPdu::MemoryParityError | 0x08 | Indique que la zone de fichier étendue n'a pas passé le contrôle de cohérence. Utilisé conjointement avec les codes de fonction 20 et 21. Le code d'exception ne se réfère pas aux paramètres 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 été en mesure d'allouer un chemin de communication interne entre le port d'entrée et le port de sortie pour traiter la demande. |
QModbusPdu::GatewayTargetDeviceFailedToRespond | 0x0B | Indique qu'aucune réponse n'a été obtenue du dispositif cible derrière une passerelle. En général, cela signifie 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 est par ailleurs décrite plus en détail. |
enum QModbusPdu::FunctionCode
Définit le code de fonction et le type d'action implicite requis par le serveur. Tous les dispositifs Modbus ne peuvent pas gérer 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 appareil. |
QModbusPdu::ReadDiscreteInputs | 0x02 | Demande l'état d'un ou plusieurs registres d'entrée d'un dispositif. |
QModbusPdu::ReadHoldingRegisters | 0x03 | Demande l'état d'une ou plusieurs valeurs de registre de maintien d'un dispositif. |
QModbusPdu::ReadInputRegisters | 0x04 | Demande l'état d'une ou plusieurs valeurs de registre d'entrée d'un dispositif. |
QModbusPdu::WriteSingleCoil | 0x05 | Demande d'écriture d'une seule bobine sur un dispositif. |
QModbusPdu::WriteSingleRegister | 0x06 | Demande d'écriture d'un seul registre de maintien sur un dispositif. |
QModbusPdu::ReadExceptionStatus | 0x07 | Demande l'état des huit sorties d'état d'exception d'un appareil. |
QModbusPdu::Diagnostics | 0x08 | Utilisé pour fournir une série de tests pour vérifier le système de communication client-serveur, ou pour vérifier le fonctionnement interne de l'appareil. |
QModbusPdu::GetCommEventCounter | 0x0B | Demande un mot d'état et un compte d'événements à partir du compteur d'événements de communication de l'appareil. |
QModbusPdu::GetCommEventLog | 0x0C | Demande un mot d'état, un compte d'événements, un compte de messages et un champ d'octets d'événements à un dispositif. |
QModbusPdu::WriteMultipleCoils | 0x0F | Demande d'écriture d'une ou plusieurs bobines sur un dispositif. |
QModbusPdu::WriteMultipleRegisters | 0x10 | Demande d'écrire 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 dispositif. |
QModbusPdu::ReadFileRecord | 0x14 | Demande la lecture d'un enregistrement de fichier. |
QModbusPdu::WriteFileRecord | 0x15 | Demande d'écriture d'un enregistrement de fichier. |
QModbusPdu::MaskWriteRegister | 0x16 | Demande de modifier le contenu d'un registre de maintien spécifié en utilisant une combinaison d'un masque ET ou OU et le contenu actuel du registre. |
QModbusPdu::ReadWriteMultipleRegisters | 0x17 | Demande l'état d'un ou de plusieurs registres de maintien et, en même temps, l'écriture d'un ou de plusieurs registres de maintien sur un appareil. |
QModbusPdu::ReadFifoQueue | 0x18 | Demande de lire le contenu d'une file d'attente de registres premier entré-premier sorti (FIFO) dans un dispositif distant. |
QModbusPdu::EncapsulatedInterfaceTransport | 0x2B | Se référer à l'annexe A de la spécification Modbus. |
QModbusPdu::UndefinedFunctionCode | 0x100 | Ne pas utiliser. |
Documentation des fonctions membres
[constexpr noexcept] QModbusPdu::QModbusPdu()
Construit un QModbusPdu invalide.
[protected] QModbusPdu::QModbusPdu(QModbusPdu::FunctionCode code, const QByteArray &data)
Construit un QModbusPdu dont le code de fonction est code et la charge utile data. Les données sont censées être déjà stockées dans l'ordre des octets big-endian.
[noexcept protected] QModbusPdu::QModbusPdu(const QModbusPdu &other)
Construit un QModbusPdu qui est une copie de other.
[virtual noexcept] QModbusPdu::~QModbusPdu()
Détruit un QModbusPdu.
QByteArray QModbusPdu::data() const
Renvoie la charge utile de la PDU, à l'exclusion du code de la fonction. La charge utile est stockée dans l'ordre des octets big-endian.
Voir aussi setData().
qint16 QModbusPdu::dataSize() const
Renvoie la taille des données de la PDU, à l'exclusion du code de fonction.
template <typename... Args> void QModbusPdu::decodeData(Args &&... data) const
Convertit la charge utile en langage hôte et la lit dans data. Les données peuvent être 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. En effet, les opérateurs de flux de QDataStream n'ajoutent pas seulement des données brutes, mais aussi, par exemple, la taille, le nombre, etc. pour les types complexes.
template <typename... Args> void QModbusPdu::encodeData(Args... data)
Définit la charge utile à data. Les données sont converties et stockées dans 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 à quint8 et quint16. En effet, les opérateurs de flux de QDataStream n'ajoutent pas seulement les données brutes, mais aussi, 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 aussi setFunctionCode().
bool QModbusPdu::isException() const
Retourne true si la PDU contient un code d'exception, sinon false.
bool QModbusPdu::isValid() const
Retourne true si la PDU est valide, sinon false.
Une PDU est considérée comme valide si le code du message est compris entre 1 et 255 en décimal et si la taille composée 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 la fonction de la PDU à data. Les données sont censées être déjà stockées dans l'ordre des octets big-endian.
Voir aussi data().
[virtual] void QModbusPdu::setFunctionCode(QModbusPdu::FunctionCode code)
Définit le code de fonction de la PDU à code.
Voir aussi functionCode().
qint16 QModbusPdu::size() const
Renvoie la taille complète de la PDU, y compris le code de fonction et la taille des données.
[noexcept protected] QModbusPdu &QModbusPdu::operator=(const QModbusPdu &other)
Fait une copie de l'objet other et l'affecte à l'objet QModbusPdu.
Documentation des 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 égal au code de fonction d'origine est renvoyé au client demandeur, sauf que son bit le plus significatif est activé. Cela équivaut à ajouter 0x80 à la valeur du code de fonction original.
Ce champ peut être utilisé pour masquer le bit d'exception dans le champ de fonction d'un paquet Modbus brut.
Non-membres apparentés
QDataStream &operator<<(QDataStream &stream, const QModbusPdu &pdu)
Écrit une page pdu sur le site stream et renvoie une référence au flux.
QDebug operator<<(QDebug debug, const QModbusPdu &pdu)
Écrit le Modbus pdu 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.