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: |
Ö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.