Sur cette page

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 :

QModbusRequest et QModbusResponse

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)
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.

ConstanteValeurDescription du code de fonction
QModbusPdu::IllegalFunction0x01Le code de fonction n'est pas pris en charge par le dispositif.
QModbusPdu::IllegalDataAddress0x02L'adresse des données reçues dans la requête n'est pas une adresse autorisée par le serveur Modbus.
QModbusPdu::IllegalDataValue0x03La valeur contenue dans le champ de données de la requête n'est pas une valeur autorisée pour le serveur Modbus.
QModbusPdu::ServerDeviceFailure0x04Une erreur irrécupérable s'est produite pendant que le serveur tentait d'effectuer l'action demandée.
QModbusPdu::Acknowledge0x05Utilisation spécialisée en conjonction avec des commandes de programmation.
QModbusPdu::ServerDeviceBusy0x06Le serveur est engagé dans le traitement d'une commande de programmation de longue durée.
QModbusPdu::NegativeAcknowledge0x07Le 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::MemoryParityError0x08Indique 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::GatewayPathUnavailable0x0AIndique 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::GatewayTargetDeviceFailedToRespond0x0BIndique 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::ExtendedException0xFFIl 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.

ConstanteValeurDescription
QModbusPdu::Invalid0x00Définie par le constructeur par défaut, ne pas utiliser.
QModbusPdu::ReadCoils0x01Demande l'état d'une ou plusieurs bobines à un appareil.
QModbusPdu::ReadDiscreteInputs0x02Demande l'état d'un ou plusieurs registres d'entrée d'un dispositif.
QModbusPdu::ReadHoldingRegisters0x03Demande l'état d'une ou plusieurs valeurs de registre de maintien d'un dispositif.
QModbusPdu::ReadInputRegisters0x04Demande l'état d'une ou plusieurs valeurs de registre d'entrée d'un dispositif.
QModbusPdu::WriteSingleCoil0x05Demande d'écriture d'une seule bobine sur un dispositif.
QModbusPdu::WriteSingleRegister0x06Demande d'écriture d'un seul registre de maintien sur un dispositif.
QModbusPdu::ReadExceptionStatus0x07Demande l'état des huit sorties d'état d'exception d'un appareil.
QModbusPdu::Diagnostics0x08Utilisé 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::GetCommEventCounter0x0BDemande un mot d'état et un compte d'événements à partir du compteur d'événements de communication de l'appareil.
QModbusPdu::GetCommEventLog0x0CDemande un mot d'état, un compte d'événements, un compte de messages et un champ d'octets d'événements à un dispositif.
QModbusPdu::WriteMultipleCoils0x0FDemande d'écriture d'une ou plusieurs bobines sur un dispositif.
QModbusPdu::WriteMultipleRegisters0x10Demande d'écrire un ou plusieurs registres de maintien sur un dispositif.
QModbusPdu::ReportServerId0x11Demande la description du type, l'état actuel et d'autres informations spécifiques à un dispositif.
QModbusPdu::ReadFileRecord0x14Demande la lecture d'un enregistrement de fichier.
QModbusPdu::WriteFileRecord0x15Demande d'écriture d'un enregistrement de fichier.
QModbusPdu::MaskWriteRegister0x16Demande 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::ReadWriteMultipleRegisters0x17Demande 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::ReadFifoQueue0x18Demande de lire le contenu d'une file d'attente de registres premier entré-premier sorti (FIFO) dans un dispositif distant.
QModbusPdu::EncapsulatedInterfaceTransport0x2BSe référer à l'annexe A de la spécification Modbus.
QModbusPdu::UndefinedFunctionCode0x100Ne 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.