QModbusPdu Class

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

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

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 ermöglicht den Zugriff auf die rohen Modbus-Protokollpakete, wie sie in der Modbus Application Protocol Specification 1.1b definiert sind.

Member Type Dokumentation

enum QModbusPdu::ExceptionCode

Diese Aufzählung beschreibt alle möglichen Fehlerbedingungen, die durch Modbus Exception Codes definiert sind. Sie werden vom Server nach Prüfung der entsprechenden Fehlerbedingungen in der Antwort auf eine Anfrage gesetzt und müssen vom Client dekodiert werden, um den Ausnahmecode zu bearbeiten.

KonstanteWertBeschreibung
QModbusPdu::IllegalFunction0x01Funktionscode wird vom Gerät nicht unterstützt.
QModbusPdu::IllegalDataAddress0x02Die empfangene Datenadresse in der Anfrage ist keine zulässige Adresse für den Modbus-Server.
QModbusPdu::IllegalDataValue0x03Der im Datenfeld der Anfrage enthaltene Wert ist kein zulässiger Wert für den Modbus-Server.
QModbusPdu::ServerDeviceFailure0x04Ein nicht behebbarer Fehler ist aufgetreten, während der Server versucht hat, die angeforderte Aktion auszuführen.
QModbusPdu::Acknowledge0x05Spezieller Einsatz in Verbindung mit Programmierbefehlen.
QModbusPdu::ServerDeviceBusy0x06Der Server ist mit der Verarbeitung eines lang andauernden Programmbefehls beschäftigt.
QModbusPdu::NegativeAcknowledge0x07Der Server kann die in der Abfrage 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 die Paritätseinstellungen der Übertragungsleitung, sondern nur auf den internen Speicher des Servers für Dateisätze.
QModbusPdu::GatewayPathUnavailable0x0AZeigt an, dass das Gateway nicht in der Lage war, einen internen Kommunikationspfad vom Eingangsport zum Ausgangsport für die Bearbeitung der Anfrage zuzuweisen.
QModbusPdu::GatewayTargetDeviceFailedToRespond0x0BZeigt an, dass von dem Zielgerät hinter einem Gateway keine Antwort erhalten wurde. In der Regel bedeutet dies, dass das Zielgerät im Netz 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 anderweitig näher beschrieben ist.

enum QModbusPdu::FunctionCode

Legt den Funktionscode und die implizite Art der vom Server geforderten Aktion fest. Nicht alle Modbus-Geräte können denselben Satz an Funktionscodes verarbeiten.

KonstanteWertBeschreibung
QModbusPdu::Invalid0x00Wird durch den Standardkonstruktor gesetzt, nicht verwenden.
QModbusPdu::ReadCoils0x01Fragt den Status einer oder mehrerer Spulen von einem Gerät ab.
QModbusPdu::ReadDiscreteInputs0x02Fordert den Status von einem oder mehreren Eingangsregistern von einem Gerät an.
QModbusPdu::ReadHoldingRegisters0x03Fordert den Status eines oder mehrerer Halteregisterwerte von einem Gerät an.
QModbusPdu::ReadInputRegisters0x04Fordert den Status eines oder mehrerer Eingangsregisterwerte von einem Gerät an.
QModbusPdu::WriteSingleCoil0x05Fordert das Schreiben einer einzelnen Spule auf einem Gerät an.
QModbusPdu::WriteSingleRegister0x06Fordert das Schreiben eines einzelnen Halteregisters auf einem Gerät an.
QModbusPdu::ReadExceptionStatus0x07Fragt den Status der acht Ausnahmestatusausgä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 Funktionen durchzuführen.
QModbusPdu::GetCommEventCounter0x0BFordert ein Statuswort und einen Ereigniszähler aus dem Kommunikationsereigniszähler des Geräts an.
QModbusPdu::GetCommEventLog0x0CFordert ein Statuswort, einen Ereigniszähler, einen Nachrichtenzähler und ein Feld mit Ereignisbytes von einem Gerät an.
QModbusPdu::WriteMultipleCoils0x0FFordert das Schreiben einer oder mehrerer Spulen auf einem Gerät an.
QModbusPdu::WriteMultipleRegisters0x10Fordert das Schreiben eines oder mehrerer Halteregister auf einem Gerät an.
QModbusPdu::ReportServerId0x11Fordert die Beschreibung des Typs, den aktuellen Status und andere gerätespezifische Informationen an.
QModbusPdu::ReadFileRecord0x14Fordert das Lesen eines Dateisatzes an.
QModbusPdu::WriteFileRecord0x15Fordert das Schreiben eines Dateisatzes an.
QModbusPdu::MaskWriteRegister0x16Fordert an, den Inhalt eines bestimmten Holding-Registers mit einer Kombination aus einer UND- oder ODER-Maske und dem aktuellen Inhalt des Registers zu ändern.
QModbusPdu::ReadWriteMultipleRegisters0x17Fordert den Status eines oder mehrerer Holding-Register an und schreibt gleichzeitig ein oder mehrere Holding-Register auf ein Gerät.
QModbusPdu::ReadFifoQueue0x18Anforderung, den Inhalt einer First-In-First-Out (FIFO)-Warteschlange von Registern in einem entfernten Gerät zu lesen.
QModbusPdu::EncapsulatedInterfaceTransport0x2BBitte beachten Sie Anhang A der Modbus-Spezifikation.
QModbusPdu::UndefinedFunctionCode0x100Nicht verwenden.

Dokumentation der Mitgliedsfunktionen

[constexpr noexcept] QModbusPdu::QModbusPdu()

Konstruiert ein ungültiges QModbusPdu.

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

Konstruiert ein QModbusPdu mit dem Funktionscode code und der Nutzlast data. Die Daten sollten bereits in Big-Endian-Byte-Reihenfolge gespeichert sein.

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

Konstruiert ein QModbusPdu, das eine Kopie von other ist.

[virtual noexcept] QModbusPdu::~QModbusPdu()

Zerstört eine QModbusPdu.

QByteArray QModbusPdu::data() const

Gibt die Nutzlast der PDU zurück, ohne den Funktionscode. Die Nutzlast wird 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

Konvertiert die Nutzdaten in die Host-Endianness 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 nur auf quint8 und quint16 beschränkt. Dies liegt daran, dass die QDataStream Stream-Operatoren nicht nur Rohdaten anhängen, sondern auch z. B. Größe, Anzahl usw. für komplexe Typen.

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

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

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

Hinweis: Die Verwendung ist nur auf quint8 und quint16 beschränkt. Dies liegt daran, dass die QDataStream Stream-Operatoren nicht nur Rohdaten anhängen, sondern auch z. B. Größe, Anzahl usw. für komplexe Typen.

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 zusammengesetzte Größe der PDU (Funktionscode + Daten) 253 Bytes nicht überschreitet. Eine standardmäßig erstellte PDU ist ungültig.

void QModbusPdu::setData(const QByteArray &data)

Setzt die Funktionsnutzlast der PDU auf data. Es wird erwartet, 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 vollständige Größe der PDU zurück, einschließlich Funktionscode und Datengröße.

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

Erstellt eine Kopie von other und ordnet sie diesem QModbusPdu Objekt zu.

Dokumentation der Mitgliedsvariablen

const quint8 QModbusPdu::ExceptionByte

Die Variable ist auf 0x80 initialisiert.

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

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

Verwandte Nicht-Mitglieder

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

Schreibt eine pdu in die stream und gibt einen Verweis auf den Stream zurück.

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

Schreibt den Modbus pdu in den Stream debug.

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