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: |
Ö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) |
Zugehörige Nicht-Mitglieder
| 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.
| Konstante | Wert | Beschreibung |
|---|---|---|
QModbusPdu::IllegalFunction | 0x01 | Funktionscode wird vom Gerät nicht unterstützt. |
QModbusPdu::IllegalDataAddress | 0x02 | Die in der Abfrage empfangene Datenadresse ist für den Modbus-Server keine zulässige Adresse. |
QModbusPdu::IllegalDataValue | 0x03 | Der im Feld „Anfragedaten“ enthaltene Wert ist für den Modbus-Server nicht zulässig. |
QModbusPdu::ServerDeviceFailure | 0x04 | Beim Versuch des Servers, die angeforderte Aktion auszuführen, ist ein nicht behebbarer Fehler aufgetreten. |
QModbusPdu::Acknowledge | 0x05 | Spezielle Verwendung in Verbindung mit Programmierbefehlen. |
QModbusPdu::ServerDeviceBusy | 0x06 | Der Server ist gerade mit der Verarbeitung eines lang andauernden Programmbefehls beschäftigt. |
QModbusPdu::NegativeAcknowledge | 0x07 | Der 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::MemoryParityError | 0x08 | Zeigt 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::GatewayPathUnavailable | 0x0A | Zeigt an, dass das Gateway keinen internen Kommunikationspfad vom Eingangsport zum Ausgangsport zur Bearbeitung der Anfrage zuweisen konnte. |
QModbusPdu::GatewayTargetDeviceFailedToRespond | 0x0B | Zeigt 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::ExtendedException | 0xFF | Dies 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.
| Konstante | Wert | Beschreibung |
|---|---|---|
QModbusPdu::Invalid | 0x00 | Wird vom Standardkonstruktor gesetzt, nicht verwenden. |
QModbusPdu::ReadCoils | 0x01 | Fragt den Status einer oder mehrerer Spulen von einem Gerät ab. |
QModbusPdu::ReadDiscreteInputs | 0x02 | Fragt den Status eines oder mehrerer Eingangsregister von einem Gerät ab. |
QModbusPdu::ReadHoldingRegisters | 0x03 | Fragt den Status eines oder mehrerer Halteregisterwerte von einem Gerät ab. |
QModbusPdu::ReadInputRegisters | 0x04 | Fragt den Status eines oder mehrerer Eingangsregisterwerte von einem Gerät ab. |
QModbusPdu::WriteSingleCoil | 0x05 | Fordert das Schreiben einer einzelnen Spule auf ein Gerät an. |
QModbusPdu::WriteSingleRegister | 0x06 | Fordert das Schreiben eines einzelnen Halteregisters an ein Gerät an. |
QModbusPdu::ReadExceptionStatus | 0x07 | Fragt den Status der acht Ausnahmenstatus-Ausgänge eines Geräts ab. |
QModbusPdu::Diagnostics | 0x08 | Wird verwendet, um eine Reihe von Tests zur Überprüfung des Client-Server-Kommunikationssystems oder zur Überprüfung interner |
QModbusPdu::GetCommEventCounter | 0x0B | Fordert ein Statuswort und eine Ereigniszählung vom Kommunikationsereigniszähler des Geräts an. |
QModbusPdu::GetCommEventLog | 0x0C | Fordert ein Statuswort, die Ereigniszahl, die Nachrichtenanzahl und ein Feld mit Ereignisbytes von einem Gerät an. |
QModbusPdu::WriteMultipleCoils | 0x0F | Fordert das Schreiben in eine oder mehrere Spulen eines Geräts an. |
QModbusPdu::WriteMultipleRegisters | 0x10 | Fordert das Schreiben in ein oder mehrere Halteregister an einem Gerät an. |
QModbusPdu::ReportServerId | 0x11 | Fordert die Beschreibung des Typs, den aktuellen Status und weitere gerätespezifische Informationen an. |
QModbusPdu::ReadFileRecord | 0x14 | Fordert das Lesen eines Dateisatzes an. |
QModbusPdu::WriteFileRecord | 0x15 | Fordert das Schreiben eines Dateisatzes an. |
QModbusPdu::MaskWriteRegister | 0x16 | Anforderung zur Änderung des Inhalts eines angegebenen Halteregisters unter Verwendung einer Kombination aus einer UND- oder ODER-Maske und dem aktuellen Inhalt des Registers. |
QModbusPdu::ReadWriteMultipleRegisters | 0x17 | Fordert den Status eines oder mehrerer Halteregister an und schreibt gleichzeitig in ein oder mehrere Halteregister auf einem Gerät. |
QModbusPdu::ReadFifoQueue | 0x18 | Fordert das Auslesen des Inhalts einer First-In-First-Out-Warteschlange (FIFO) in einem Remote-Gerät an. |
QModbusPdu::EncapsulatedInterfaceTransport | 0x2B | Siehe Anhang A der Modbus-Spezifikation. |
QModbusPdu::UndefinedFunctionCode | 0x100 | Nicht 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.