Sur cette page

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 :

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

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.

ConstanteValeurDescription
QModbusPdu::IllegalFunction0x01Le code de fonction n'est pas pris en charge par le périphérique.
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 par le serveur Modbus.
QModbusPdu::ServerDeviceFailure0x04Une erreur irrémédiable s'est produite alors que le serveur tentait d'effectuer l'action demandée.
QModbusPdu::Acknowledge0x05Utilisation spécifique en association avec des commandes de programmation.
QModbusPdu::ServerDeviceBusy0x06Le serveur est en train de traiter 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é en cas d’échec d’une requête de programmation. Le client doit demander des informations de diagnostic ou d’erreur au serveur.
QModbusPdu::MemoryParityError0x08Indique 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::GatewayPathUnavailable0x0AIndique 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::GatewayTargetDeviceFailedToRespond0x0BIndique 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::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 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.

ConstanteValeurDescription
QModbusPdu::Invalid0x00Définie par le constructeur par défaut, ne pas utiliser.
QModbusPdu::ReadCoils0x01Demande l'état d'une ou plusieurs bobines à un périphérique.
QModbusPdu::ReadDiscreteInputs0x02Demande l'état d'un ou plusieurs registres d'entrée d'un périphérique.
QModbusPdu::ReadHoldingRegisters0x03Demande l'état d'une ou plusieurs valeurs de registres de maintien d'un périphérique.
QModbusPdu::ReadInputRegisters0x04Demande l'état d'une ou plusieurs valeurs de registres d'entrée d'un périphérique.
QModbusPdu::WriteSingleCoil0x05Demande l'écriture d'une seule bobine sur un périphérique.
QModbusPdu::WriteSingleRegister0x06Demande d'écriture d'un seul registre de maintien sur un périphérique.
QModbusPdu::ReadExceptionStatus0x07Demande l'état des huit sorties d'état d'exception d'un périphérique.
QModbusPdu::Diagnostics0x08Utilisé 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::GetCommEventCounter0x0BDemande un mot d’état et un compteur d’événements provenant du compteur d’événements de communication du périphérique.
QModbusPdu::GetCommEventLog0x0CDemande 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::WriteMultipleCoils0x0FDemande d’écriture d’une ou plusieurs bobines sur un appareil.
QModbusPdu::WriteMultipleRegisters0x10Demande l'écriture d'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 périphérique.
QModbusPdu::ReadFileRecord0x14Demande la lecture d’un enregistrement de fichier.
QModbusPdu::WriteFileRecord0x15Demande l'écriture d'un enregistrement de fichier.
QModbusPdu::MaskWriteRegister0x16Demande 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::ReadWriteMultipleRegisters0x17Demande 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::ReadFifoQueue0x18Demande 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::EncapsulatedInterfaceTransport0x2BVeuillez vous reporter à l’annexe A de la spécification Modbus.
QModbusPdu::UndefinedFunctionCode0x100Ne 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.