QModbusClient Class

Die Klasse QModbusClient ist die Schnittstelle zum Senden von Modbus-Anfragen. Mehr...

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

QModbusRtuSerialClient und QModbusTcpClient

Öffentliche Funktionen

QModbusClient(QObject *parent = nullptr)
int numberOfRetries() const
QModbusReply *sendRawRequest(const QModbusRequest &request, int serverAddress)
QModbusReply *sendReadRequest(const QModbusDataUnit &read, int serverAddress)
QModbusReply *sendReadWriteRequest(const QModbusDataUnit &read, const QModbusDataUnit &write, int serverAddress)
QModbusReply *sendWriteRequest(const QModbusDataUnit &write, int serverAddress)
void setNumberOfRetries(int number)
void setTimeout(int newTimeout)
int timeout() const

Signale

void timeoutChanged(int newTimeout)

Geschützte Funktionen

virtual bool processPrivateResponse(const QModbusResponse &response, QModbusDataUnit *data)
virtual bool processResponse(const QModbusResponse &response, QModbusDataUnit *data)

Detaillierte Beschreibung

Die QModbusClient-API ist um ein QModbusClient-Objekt herum aufgebaut, das die allgemeine Konfiguration und die Einstellungen für die von ihm gesendeten Anfragen enthält. Ein QModbusClient sollte für die gesamte Qt-Anwendung ausreichend sein.

Sobald ein QModbusClient-Objekt erstellt wurde, kann die Anwendung es zum Senden von Anfragen verwenden. Das zurückgegebene Objekt wird verwendet, um alle Daten zu erhalten, die als Antwort auf die entsprechende Anfrage zurückgegeben werden.

QModbusClient hat eine asynchrone API. Wenn der fertige Slot aufgerufen wird, wird als Parameter das Objekt QModbusReply übergeben, das die PDU sowie Metadaten (Adressierung usw.) enthält.

Hinweis: QModbusClient stellt die empfangenen Anfragen in eine Warteschlange. Die Anzahl der parallel ausgeführten Anfragen ist vom Protokoll abhängig. Das HTTP-Protokoll auf Desktop-Plattformen gibt z. B. 6 Anfragen parallel für eine Host/Port-Kombination aus.

Dokumentation der Mitgliedsfunktionen

[explicit] QModbusClient::QModbusClient(QObject *parent = nullptr)

Konstruiert ein Modbus-Client-Gerät mit der angegebenen parent.

int QModbusClient::numberOfRetries() const

Gibt die Anzahl der Wiederholungsversuche zurück, die ein Client durchführt, bevor eine Anfrage fehlschlägt. Der Standardwert ist auf 3 festgelegt.

Siehe auch setNumberOfRetries().

[virtual protected] bool QModbusClient::processPrivateResponse(const QModbusResponse &response, QModbusDataUnit *data)

Muss von einer benutzerdefinierten Modbus-Client-Implementierung implementiert werden. Die Standardimplementierung ignoriert response und data. Sie gibt immer false zurück, um einen Fehler anzuzeigen.

[virtual protected] bool QModbusClient::processResponse(const QModbusResponse &response, QModbusDataUnit *data)

Verarbeitet einen Modbus-Server response und speichert die dekodierten Informationen in data. Gibt bei Erfolg true zurück; andernfalls false.

Hinweis: Die Standardimplementierung unterstützt nicht alle FunctionCodes. Überschreiben Sie diese Methode in einer benutzerdefinierten Modbus-Client-Implementierung, um die benötigten Funktionen zu behandeln.

QModbusReply *QModbusClient::sendRawRequest(const QModbusRequest &request, int serverAddress)

Sendet einen rohen Modbus request. Eine Rohanfrage kann alles enthalten, was in den Modbus-PDU-Datenbereich passt und einen gültigen Funktionscode hat. Die einzige Prüfung, die vor dem Senden durchgeführt wird, ist daher die Gültigkeitsprüfung, siehe QModbusPdu::isValid. Wenn kein Fehler aufgetreten ist, gibt die Funktion ein neues gültiges QModbusReply zurück; andernfalls nullptr. Modbus-Netzwerke können mehrere Server haben, jeder Server hat eine eindeutige serverAddress.

Siehe auch QModbusReply::rawResult().

QModbusReply *QModbusClient::sendReadRequest(const QModbusDataUnit &read, int serverAddress)

Sendet eine Anfrage zum Lesen des Inhalts der Daten, auf die read zeigt. Gibt ein neues gültiges QModbusReply Objekt zurück, wenn kein Fehler aufgetreten ist, ansonsten nullptr. Ein Modbus-Netzwerk kann mehrere Server haben, jeder Server hat eine eigene serverAddress.

QModbusReply *QModbusClient::sendReadWriteRequest(const QModbusDataUnit &read, const QModbusDataUnit &write, int serverAddress)

Sendet eine Anfrage zum Lesen des Inhalts der Daten, auf die read zeigt, und zum Ändern des Inhalts der Daten, auf die write zeigt, unter Verwendung des Modbus-Funktionscodes QModbusPdu::ReadWriteMultipleRegisters. Gibt ein neues gültiges QModbusReply Objekt zurück, wenn kein Fehler aufgetreten ist, ansonsten nullptr. Ein Modbus-Netzwerk kann mehrere Server haben, jeder Server hat eine eindeutige serverAddress.

Anmerkung: : Das Senden dieser Art von Anfrage ist nur gültig, wenn sowohl read als auch write vom Typ QModbusDataUnit::HoldingRegisters sind.

QModbusReply *QModbusClient::sendWriteRequest(const QModbusDataUnit &write, int serverAddress)

Sendet eine Anfrage zur Änderung des Inhalts der Daten, auf die write zeigt. Gibt ein neues gültiges QModbusReply Objekt zurück, wenn kein Fehler aufgetreten ist, ansonsten nullptr. Ein Modbus-Netzwerk kann mehrere Server haben, jeder Server hat eine eigene serverAddress.

void QModbusClient::setNumberOfRetries(int number)

Legt die number Anzahl der Wiederholungsversuche fest, die ein Client durchführt, bevor eine Anfrage fehlschlägt. Der Standardwert ist auf 3 festgelegt.

Hinweis: Der neue Wert muss größer als oder gleich 0 sein. Das Ändern dieser Eigenschaft wirkt sich nur auf neue Anfragen aus, nicht auf bereits geplante Anfragen.

Siehe auch numberOfRetries().

void QModbusClient::setTimeout(int newTimeout)

Legt die newTimeout für diese QModbusClient Instanz fest. Der minimale Timeout beträgt 10 ms.

Die Zeitüberschreitung wird vom Client verwendet, um zu bestimmen, wie lange er auf eine Antwort des Servers wartet. Wird die Antwort nicht innerhalb der erforderlichen Zeitspanne empfangen, wird die TimeoutError gesetzt.

Bereits aktive/laufende Timeouts sind von solchen Änderungen der Timeout-Dauer nicht betroffen.

Siehe auch timeout und timeoutChanged().

int QModbusClient::timeout() const

Gibt den von dieser QModbusClient -Instanz verwendeten Timeout-Wert in ms zurück. Eine Zeitüberschreitung wird durch ein TimeoutError angezeigt. Der Standardwert ist 1000 ms.

Siehe auch setTimeout und timeoutChanged().

[signal] void QModbusClient::timeoutChanged(int newTimeout)

Dieses Signal wird ausgegeben, wenn der von dieser QModbusClient Instanz verwendete Timeout geändert wird. Das neue Antwort-Timeout für das Gerät wird als newTimeout übergeben.

Siehe auch setTimeout().

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