Auf dieser Seite

QModbusPdu Class

QModbusPdu ist eine abstrakte Containerklasse, die den Funktionscode und die Nutzdaten enthält, die in einer Modbus-ADU gespeichert sind. Mehr...

Header: #include <QModbusPdu>
CMake: find_package(Qt6 REQUIRED COMPONENTS SerialBus)
target_link_libraries(mytarget PRIVATE Qt6::SerialBus)
qmake: QT += serialbus
Vererbt an:

QModbusRequest und QModbusResponse

Öffentliche Typen

enum ExceptionCode { IllegalFunction, IllegalDataAddress, IllegalDataValue, ServerDeviceFailure, Acknowledge, …, ExtendedException }
enum FunctionCode { Invalid, ReadCoils, ReadDiscreteInputs, ReadHoldingRegisters, ReadInputRegisters, …, UndefinedFunctionCode }

Öffentliche Funktionen

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

Statische öffentliche Mitglieder

const quint8 ExceptionByte

Geschützte Funktionen

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)

Detaillierte Beschreibung

Die Klasse bietet Zugriff auf die Rohdaten der Modbus-Protokollpakete, wie sie in der Modbus Application Protocol Specification 1.1b definiert sind.

Dokumentation zum Mitgliedstyp

enum QModbusPdu::ExceptionCode

Diese Enumeration beschreibt alle möglichen Fehlerzustände, wie sie durch die Modbus-Ausnahmecodes definiert sind. Sie werden vom Server nach Überprüfung der entsprechenden Fehlerzustände in der Antwort auf eine Anfrage gesetzt und müssen vom Client decodiert werden, um den Ausnahmecode weiterverarbeiten zu können.

KonstanteWertBeschreibung
QModbusPdu::IllegalFunction0x01Funktionscode wird vom Gerät nicht unterstützt.
QModbusPdu::IllegalDataAddress0x02Die in der Abfrage empfangene Datenadresse ist für den Modbus-Server keine zulässige Adresse.
QModbusPdu::IllegalDataValue0x03Der im Feld „Anfragedaten“ enthaltene Wert ist für den Modbus-Server nicht zulässig.
QModbusPdu::ServerDeviceFailure0x04Beim Versuch des Servers, die angeforderte Aktion auszuführen, ist ein nicht behebbarer Fehler aufgetreten.
QModbusPdu::Acknowledge0x05Spezielle Verwendung in Verbindung mit Programmierbefehlen.
QModbusPdu::ServerDeviceBusy0x06Der Server ist gerade mit der Verarbeitung eines lang andauernden Programmbefehls beschäftigt.
QModbusPdu::NegativeAcknowledge0x07Der Server kann die in der Anfrage empfangene Programmfunktion nicht ausführen. Dieser Code wird bei einer fehlgeschlagenen Programmieranfrage zurückgegeben. Der Client sollte Diagnose- oder Fehlerinformationen vom Server anfordern.
QModbusPdu::MemoryParityError0x08Zeigt an, dass der erweiterte Dateibereich eine Konsistenzprüfung nicht bestanden hat. Wird in Verbindung mit den Funktionscodes 20 und 21 verwendet. Der Ausnahmecode bezieht sich nicht auf Paritätseinstellungen der Übertragungsleitung, sondern ausschließlich auf den internen Speicher des Servers für Dateisätze.
QModbusPdu::GatewayPathUnavailable0x0AZeigt an, dass das Gateway keinen internen Kommunikationspfad vom Eingangsport zum Ausgangsport zur Bearbeitung der Anfrage zuweisen konnte.
QModbusPdu::GatewayTargetDeviceFailedToRespond0x0BZeigt an, dass keine Antwort vom Zielgerät hinter einem Gateway empfangen wurde. In der Regel bedeutet dies, dass das Zielgerät im Netzwerk nicht online ist.
QModbusPdu::ExtendedException0xFFDies ist eine erweiterte Ausnahme gemäß der Modbus-Spezifikation. Im Allgemeinen wird dieser Code verwendet, um eine Ausnahme zu beschreiben, die an anderer Stelle näher erläutert wird.

enum QModbusPdu::FunctionCode

Definiert den Funktionscode und den impliziten Aktionstyp, den der Server benötigt. Nicht alle Modbus-Geräte können denselben Satz an Funktionscodes verarbeiten.

KonstanteWertBeschreibung
QModbusPdu::Invalid0x00Wird vom Standardkonstruktor gesetzt, nicht verwenden.
QModbusPdu::ReadCoils0x01Fragt den Status einer oder mehrerer Spulen von einem Gerät ab.
QModbusPdu::ReadDiscreteInputs0x02Fragt den Status eines oder mehrerer Eingangsregister von einem Gerät ab.
QModbusPdu::ReadHoldingRegisters0x03Fragt den Status eines oder mehrerer Halteregisterwerte von einem Gerät ab.
QModbusPdu::ReadInputRegisters0x04Fragt den Status eines oder mehrerer Eingangsregisterwerte von einem Gerät ab.
QModbusPdu::WriteSingleCoil0x05Fordert das Schreiben einer einzelnen Spule auf ein Gerät an.
QModbusPdu::WriteSingleRegister0x06Fordert das Schreiben eines einzelnen Halteregisters an ein Gerät an.
QModbusPdu::ReadExceptionStatus0x07Fragt den Status der acht Ausnahmenstatus-Ausgänge eines Geräts ab.
QModbusPdu::Diagnostics0x08Wird verwendet, um eine Reihe von Tests zur Überprüfung des Client-Server-Kommunikationssystems oder zur Überprüfung interner
QModbusPdu::GetCommEventCounter0x0BFordert ein Statuswort und eine Ereigniszählung vom Kommunikationsereigniszähler des Geräts an.
QModbusPdu::GetCommEventLog0x0CFordert ein Statuswort, die Ereigniszahl, die Nachrichtenanzahl und ein Feld mit Ereignisbytes von einem Gerät an.
QModbusPdu::WriteMultipleCoils0x0FFordert das Schreiben in eine oder mehrere Spulen eines Geräts an.
QModbusPdu::WriteMultipleRegisters0x10Fordert das Schreiben in ein oder mehrere Halteregister an einem Gerät an.
QModbusPdu::ReportServerId0x11Fordert die Beschreibung des Typs, den aktuellen Status und weitere gerätespezifische Informationen an.
QModbusPdu::ReadFileRecord0x14Fordert das Lesen eines Dateisatzes an.
QModbusPdu::WriteFileRecord0x15Fordert das Schreiben eines Dateisatzes an.
QModbusPdu::MaskWriteRegister0x16Anforderung zur Änderung des Inhalts eines angegebenen Halteregisters unter Verwendung einer Kombination aus einer UND- oder ODER-Maske und dem aktuellen Inhalt des Registers.
QModbusPdu::ReadWriteMultipleRegisters0x17Fordert den Status eines oder mehrerer Halteregister an und schreibt gleichzeitig in ein oder mehrere Halteregister auf einem Gerät.
QModbusPdu::ReadFifoQueue0x18Fordert das Auslesen des Inhalts einer First-In-First-Out-Warteschlange (FIFO) in einem Remote-Gerät an.
QModbusPdu::EncapsulatedInterfaceTransport0x2BSiehe Anhang A der Modbus-Spezifikation.
QModbusPdu::UndefinedFunctionCode0x100Nicht verwenden.

Dokumentation der Member-Funktionen

[constexpr noexcept default] QModbusPdu::QModbusPdu()

Erstellt eine ungültige QModbusPdu.

[protected] QModbusPdu::QModbusPdu(QModbusPdu::FunctionCode code, const QByteArray &data)

Erstellt ein `QModbusPdu`-Objekt, dessen Funktionscode auf „ code “ und dessen Nutzdaten auf „ data “ gesetzt sind. Es wird davon ausgegangen, dass die Daten bereits in Big-Endian-Byte-Reihenfolge gespeichert sind.

[noexcept protected default] QModbusPdu::QModbusPdu(const QModbusPdu &other)

Erstellt ein `QModbusPdu`-Objekt, das eine Kopie von ` other` ist.

[virtual noexcept] QModbusPdu::~QModbusPdu()

Löscht ein „ QModbusPdu “.

QByteArray QModbusPdu::data() const

Gibt die Nutzdaten der PDU zurück, ohne den Funktionscode. Die Nutzdaten werden in Big-Endian-Byte-Reihenfolge gespeichert.

Siehe auch ` setData()`.

qint16 QModbusPdu::dataSize() const

Gibt die Datengröße der PDU zurück, ohne den Funktionscode.

template <typename... Args> void QModbusPdu::decodeData(Args &&... data) const

Wandelt die Nutzdaten in die Endianness des Hosts um und liest sie in ` data` ein. Die Daten können eine Argumentliste variabler Länge sein.

QModbusResponsePdu response(QModbusPdu::ReportServerId);
response.encodeData(quint8(0x02), quint8(0x01), quint8(0xff));
quint8 count, id, run;
response.decodeData(&count, &id, &run);

Hinweis: Die Verwendung ist ausschließlich auf ` quint8 ` und ` quint16 ` beschränkt. Der Grund dafür ist, dass die Stream-Operatoren von QDataStream nicht nur Rohdaten anhängen, sondern bei komplexen Typen auch z. B. Größe, Anzahl usw.

template <typename... Args> void QModbusPdu::encodeData(Args... data)

Setzt die Nutzlast auf data. Die Daten werden konvertiert und in Big-Endian-Byte-Reihenfolge gespeichert.

QModbusRequestPdu request(QModbusPdu::ReadCoils);
// starting address and quantity of coils
request.encodeData(quint16(0x0c), quint16(0x0a));

Hinweis: Die Verwendung ist ausschließlich auf quint8 und quint16 beschränkt. Der Grund dafür ist, dass die Stream-Operatoren von QDataStream nicht nur Rohdaten anhängen, sondern bei komplexen Typen auch z. B. Größe, Anzahl usw.

QModbusPdu::ExceptionCode QModbusPdu::exceptionCode() const

Gibt den Ausnahmecode der Antwort zurück.

QModbusPdu::FunctionCode QModbusPdu::functionCode() const

Gibt den Funktionscode der PDU zurück.

Siehe auch ` setFunctionCode()`.

bool QModbusPdu::isException() const

Gibt „true“ zurück, wenn die PDU einen Ausnahmecode enthält; andernfalls „false“.

bool QModbusPdu::isValid() const

Gibt „true“ zurück, wenn die PDU gültig ist; andernfalls „false“.

Eine PDU gilt als gültig, wenn der Nachrichtencode im Bereich von 1 bis 255 (dezimal) liegt und die Gesamtgröße der PDU (Funktionscode + Daten) 253 Byte nicht überschreitet. Eine standardmäßig erstellte PDU ist ungültig.

void QModbusPdu::setData(const QByteArray &data)

Setzt die Funktionsnutzdaten der PDU auf „ data “. Es wird davon ausgegangen, dass die Daten bereits in Big-Endian-Byte-Reihenfolge gespeichert sind.

Siehe auch data().

[virtual] void QModbusPdu::setFunctionCode(QModbusPdu::FunctionCode code)

Setzt den Funktionscode der PDU auf „ code “.

Siehe auch „ functionCode()“.

qint16 QModbusPdu::size() const

Gibt die Gesamtgröße der PDU zurück, einschließlich Funktionscode und Datengröße.

[noexcept protected default] QModbusPdu &QModbusPdu::operator=(const QModbusPdu &other)

Erstellt eine Kopie des Objekts „ other “ und weist sie diesem „ QModbusPdu “-Objekt zu.

Dokumentation zu Member-Variablen

const quint8 QModbusPdu::ExceptionByte

Die Variable wird auf 0x80 initialisiert.

Ausnahmen werden in einem definierten Paketformat gemeldet. An den anfragenden Client wird ein Funktionscode zurückgegeben, der dem ursprünglichen Funktionscode entspricht, wobei jedoch sein höchstwertiges Bit gesetzt ist. Dies entspricht der Addition von 0x80 zum Wert des ursprünglichen Funktionscodes.

Dieses Feld kann verwendet werden, um das Ausnahmebit im Funktionsfeld eines „Raw“-Modbus-Pakets zu maskieren.

Verwandte Nicht-Mitglieder

QDataStream &operator<<(QDataStream &stream, const QModbusPdu &pdu)

Schreibt eine „ pdu “ in die „ stream “ und gibt eine Referenz auf den Stream zurück.

QDebug operator<<(QDebug debug, const QModbusPdu &pdu)

Schreibt die Modbus- pdu en in den „ debug “-Stream.

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