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: |
Ö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) |
Verwandte Nicht-Mitglieder
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.
Konstante | Wert | Beschreibung |
---|---|---|
QModbusPdu::IllegalFunction | 0x01 | Funktionscode wird vom Gerät nicht unterstützt. |
QModbusPdu::IllegalDataAddress | 0x02 | Die empfangene Datenadresse in der Anfrage ist keine zulässige Adresse für den Modbus-Server. |
QModbusPdu::IllegalDataValue | 0x03 | Der im Datenfeld der Anfrage enthaltene Wert ist kein zulässiger Wert für den Modbus-Server. |
QModbusPdu::ServerDeviceFailure | 0x04 | Ein nicht behebbarer Fehler ist aufgetreten, während der Server versucht hat, die angeforderte Aktion auszuführen. |
QModbusPdu::Acknowledge | 0x05 | Spezieller Einsatz in Verbindung mit Programmierbefehlen. |
QModbusPdu::ServerDeviceBusy | 0x06 | Der Server ist mit der Verarbeitung eines lang andauernden Programmbefehls beschäftigt. |
QModbusPdu::NegativeAcknowledge | 0x07 | Der 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::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 die Paritätseinstellungen der Übertragungsleitung, sondern nur auf den internen Speicher des Servers für Dateisätze. |
QModbusPdu::GatewayPathUnavailable | 0x0A | Zeigt an, dass das Gateway nicht in der Lage war, einen internen Kommunikationspfad vom Eingangsport zum Ausgangsport für die Bearbeitung der Anfrage zuzuweisen. |
QModbusPdu::GatewayTargetDeviceFailedToRespond | 0x0B | Zeigt 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::ExtendedException | 0xFF | Dies 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.
Konstante | Wert | Beschreibung |
---|---|---|
QModbusPdu::Invalid | 0x00 | Wird durch den Standardkonstruktor gesetzt, nicht verwenden. |
QModbusPdu::ReadCoils | 0x01 | Fragt den Status einer oder mehrerer Spulen von einem Gerät ab. |
QModbusPdu::ReadDiscreteInputs | 0x02 | Fordert den Status von einem oder mehreren Eingangsregistern von einem Gerät an. |
QModbusPdu::ReadHoldingRegisters | 0x03 | Fordert den Status eines oder mehrerer Halteregisterwerte von einem Gerät an. |
QModbusPdu::ReadInputRegisters | 0x04 | Fordert den Status eines oder mehrerer Eingangsregisterwerte von einem Gerät an. |
QModbusPdu::WriteSingleCoil | 0x05 | Fordert das Schreiben einer einzelnen Spule auf einem Gerät an. |
QModbusPdu::WriteSingleRegister | 0x06 | Fordert das Schreiben eines einzelnen Halteregisters auf einem Gerät an. |
QModbusPdu::ReadExceptionStatus | 0x07 | Fragt den Status der acht Ausnahmestatusausgä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 Funktionen durchzuführen. |
QModbusPdu::GetCommEventCounter | 0x0B | Fordert ein Statuswort und einen Ereigniszähler aus dem Kommunikationsereigniszähler des Geräts an. |
QModbusPdu::GetCommEventLog | 0x0C | Fordert ein Statuswort, einen Ereigniszähler, einen Nachrichtenzähler und ein Feld mit Ereignisbytes von einem Gerät an. |
QModbusPdu::WriteMultipleCoils | 0x0F | Fordert das Schreiben einer oder mehrerer Spulen auf einem Gerät an. |
QModbusPdu::WriteMultipleRegisters | 0x10 | Fordert das Schreiben eines oder mehrerer Halteregister auf einem Gerät an. |
QModbusPdu::ReportServerId | 0x11 | Fordert die Beschreibung des Typs, den aktuellen Status und andere 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 | Fordert 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::ReadWriteMultipleRegisters | 0x17 | Fordert den Status eines oder mehrerer Holding-Register an und schreibt gleichzeitig ein oder mehrere Holding-Register auf ein Gerät. |
QModbusPdu::ReadFifoQueue | 0x18 | Anforderung, den Inhalt einer First-In-First-Out (FIFO)-Warteschlange von Registern in einem entfernten Gerät zu lesen. |
QModbusPdu::EncapsulatedInterfaceTransport | 0x2B | Bitte beachten Sie Anhang A der Modbus-Spezifikation. |
QModbusPdu::UndefinedFunctionCode | 0x100 | Nicht 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.