QModbusServer Class
Die Klasse QModbusServer ist die Schnittstelle zum Empfang und zur Verarbeitung von Modbus-Anfragen. Mehr...
Kopfzeile: | #include <QModbusServer> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS SerialBus) target_link_libraries(mytarget PRIVATE Qt6::SerialBus) |
qmake: | QT += serialbus |
Vererbt: | QModbusDevice |
Vererbt von: |
Öffentliche Typen
enum | Option { DiagnosticRegister, ExceptionStatusOffset, DeviceBusy, AsciiInputDelimiter, ListenOnlyMode, …, UserOption } |
Öffentliche Funktionen
QModbusServer(QObject *parent = nullptr) | |
bool | data(QModbusDataUnit *newData) const |
bool | data(QModbusDataUnit::RegisterType table, quint16 address, quint16 *data) const |
virtual bool | processesBroadcast() const |
int | serverAddress() const |
bool | setData(const QModbusDataUnit &newData) |
bool | setData(QModbusDataUnit::RegisterType table, quint16 address, quint16 data) |
virtual bool | setMap(const QModbusDataUnitMap &map) |
void | setServerAddress(int serverAddress) |
virtual bool | setValue(int option, const QVariant &newValue) |
virtual QVariant | value(int option) const |
Signale
void | dataWritten(QModbusDataUnit::RegisterType table, int address, int size) |
Geschützte Funktionen
virtual QModbusResponse | processPrivateRequest(const QModbusPdu &request) |
virtual QModbusResponse | processRequest(const QModbusPdu &request) |
virtual bool | readData(QModbusDataUnit *newData) const |
virtual bool | writeData(const QModbusDataUnit &newData) |
Detaillierte Beschreibung
Modbus-Netzwerke können mehrere Modbus-Server haben. Modbus-Server werden von einem Modbus-Client gelesen/geschrieben, der durch QModbusClient repräsentiert wird. QModbusServer kommuniziert mit einem Modbus-Backend und bietet dem Benutzer eine praktische API.
Dokumentation der Mitgliedstypen
enum QModbusServer::Option
Jedem Modbus-Server ist eine Reihe von Werten zugeordnet, für die es jeweils eine eigene Option gibt.
Die Optionen für allgemeine Zwecke (und die zugehörigen Typen) sind:
Konstante | Wert | Beschreibung |
---|---|---|
QModbusServer::DiagnosticRegister | 0 | Das Diagnoseregister des Servers. quint16 |
QModbusServer::ExceptionStatusOffset | 1 | Der Byte-Offset des Ausnahmestatus des Servers. quint16 |
QModbusServer::DeviceBusy | 2 | Flagge, die signalisiert, dass der Server mit der Verarbeitung eines lang andauernden Programmbefehls beschäftigt ist. quint16 |
QModbusServer::AsciiInputDelimiter | 3 | Das Modbus-ASCII-Nachrichtenende-Begrenzungszeichen. char |
QModbusServer::ListenOnlyMode | 4 | Flagge zum Setzen des Listen-Only-Modus des Servers. Diese Funktion wird normalerweise nur von seriellen Modbus-Geräten unterstützt. bool |
QModbusServer::ServerIdentifier | 5 | Die Kennung des Servers, nicht die Serveradresse. quint8 |
QModbusServer::RunIndicatorStatus | 6 | Das Laufkennzeichen des Servers. quint8 |
QModbusServer::AdditionalData | 7 | Die zusätzlichen Daten des Servers. QByteArray |
QModbusServer::DeviceIdentification | 8 | Die physikalische und funktionale Beschreibung des Servers. QModbusDeviceIdentification |
Benutzeroptionen:
Konstante | Wert | Beschreibung |
---|---|---|
QModbusServer::UserOption | 0x100 | Die erste Option, die für benutzerspezifische Zwecke verwendet werden kann. |
Bei Benutzeroptionen muss der Entwickler entscheiden, welche Typen verwendet werden sollen, und sicherstellen, dass die Komponenten beim Zugriff auf und beim Setzen von Werten die richtigen Typen verwenden.
Dokumentation der Mitgliedsfunktionen
[explicit]
QModbusServer::QModbusServer(QObject *parent = nullptr)
Konstruiert einen Modbus-Server mit dem angegebenen parent.
bool QModbusServer::data(QModbusDataUnit *newData) const
Gibt die Werte in dem durch newData angegebenen Registerbereich zurück.
newData muss einen gültigen Registertyp, eine Startadresse und valueCount angeben. Die zurückgegebene newData enthält die mit dem angegebenen Bereich verbundenen Registerwerte.
Wenn newData einen gültigen Registertyp, aber eine negative Startadresse enthält, wird die gesamte Registerkarte zurückgegeben und newData entsprechend dimensioniert.
Siehe auch setData().
bool QModbusServer::data(QModbusDataUnit::RegisterType table, quint16 address, quint16 *data) const
Liest die im Modbus-Server gespeicherten Daten. Ein Modbus-Server hat vier Tabellen (table) und jede hat ein eindeutiges address Feld, das verwendet wird, um data aus dem gewünschten Feld zu lesen. Siehe QModbusDataUnit::RegisterType für weitere Informationen über die verschiedenen Tabellen. Gibt false
zurück, wenn die Adresse außerhalb des Map-Bereichs liegt oder der Registertyp gar nicht definiert ist.
Siehe auch QModbusDataUnit::RegisterType und setData().
[signal]
void QModbusServer::dataWritten(QModbusDataUnit::RegisterType table, int address, int size)
Dieses Signal wird ausgegeben, wenn ein Modbus-Client ein oder mehrere Datenfelder an den Modbus-Server geschrieben hat. Das Signal enthält Informationen über die Felder, die geschrieben wurden:
- Registertyp (table), der geschrieben wurde,
- address des ersten Feldes, das geschrieben wurde,
- und size von aufeinanderfolgenden Feldern, die ab address geschrieben wurden.
Das Signal wird nicht ausgegeben, wenn sich die zu beschreibenden Felder nicht geändert haben, weil sich der Wert nicht geändert hat.
[virtual protected]
QModbusResponse QModbusServer::processPrivateRequest(const QModbusPdu &request)
Diese Funktion sollte von benutzerdefinierten Modbus-Servern implementiert werden. Sie wird von processRequest() aufgerufen, wenn die angegebene request keine Standard-Modbus-Anfrage ist.
Das Überschreiben dieser Funktion ermöglicht die Behandlung zusätzlicher Funktionscodes und Unterfunktionscodes, die in der Modbus Application Protocol Specification 1.1b nicht spezifiziert sind. Neuimplementierungen sollten diese Funktion erneut aufrufen, um sicherzustellen, dass für alle unbekannten Funktionscodes, die die benutzerdefinierte Modbus-Implementierung nicht behandelt, eine Ausnahmeantwort zurückgegeben wird.
Diese Standardimplementierung gibt ein QModbusExceptionResponse
mit dem Funktionscode request und dem Fehlercode illegal function zurück.
Siehe auch processRequest().
[virtual protected]
QModbusResponse QModbusServer::processRequest(const QModbusPdu &request)
Verarbeitet eine Modbus-Client-Anfrage request und gibt eine Modbus-Antwort zurück. Diese Funktion gibt ein QModbusResponse oder QModbusExceptionResponse zurück, je nach Art der Anfrage.
Die Standardimplementierung dieser Funktion verarbeitet alle Standard-Modbus-Funktionscodes, die in der Modbus Application Protocol Specification 1.1b definiert sind. Alle anderen Modbus-Funktionscodes, die nicht in der Spezifikation enthalten sind, werden an processPrivateRequest() weitergeleitet.
Die Standardbehandlung der Standard-Modbus-Funktionscode-Anfragen kann durch Neuimplementierung dieser Funktion überschrieben werden. Die Überschreibung muss den betreffenden Anforderungstyp behandeln und die entsprechende QModbusResponse zurückgeben. Ein häufiger Grund könnte sein, Funktionscode-Anfragen für Datenwerte herauszufiltern, um den Lese-/Schreibzugriff zu begrenzen, sowie Funktionscodes, die in bestimmten Implementierungen nicht erwünscht sind, wie z. B. die Diagnose serieller Leitungen auf Ethernet- oder Modbus Plus-Transportschichten. Jeder andere Anforderungstyp sollte an diese Standardimplementierung weitergeleitet werden.
Hinweis: Diese Funktion sollte nicht überschrieben werden, um eine benutzerdefinierte Implementierung für nicht standardmäßige Modbus-Anfragetypen bereitzustellen.
Siehe auch processPrivateRequest().
[virtual]
bool QModbusServer::processesBroadcast() const
Unterklassen sollten diese Funktion implementieren, wenn die Transportschicht Broadcasts verarbeiten soll. Die Implementierung sollte dann true
zurückgeben, wenn die aktuell verarbeitete Anfrage eine Broadcast-Anfrage ist; andernfalls false
. Die Standardimplementierung gibt immer false
zurück.
Hinweis: Der Rückgabewert dieser Funktion ist nur innerhalb von processRequest() oder processPrivateRequest() sinnvoll, andernfalls kann er nur anzeigen, dass die letzte bearbeitete Anfrage eine Broadcast-Anfrage war.
[virtual protected]
bool QModbusServer::readData(QModbusDataUnit *newData) const
Liest die Werte in dem durch newData angegebenen Registerbereich und schreibt die Daten zurück nach newData. Gibt bei Erfolg true
zurück oder false
, wenn newData 0
ist, der Bereich newData außerhalb des Map-Bereichs liegt oder der RegisterType() nicht existiert.
Hinweis: Unterklassen, die das Lesen aus einem anderen Sicherungsspeicher als dem Standardspeicher implementieren, müssen auch setMap() und writeData() implementieren.
Siehe auch setMap() und writeData().
int QModbusServer::serverAddress() const
Gibt die Adresse dieser Modbus-Server-Instanz zurück.
Siehe auch setServerAddress().
bool QModbusServer::setData(const QModbusDataUnit &newData)
Schreibt newData in die Modbus-Server-Map. Gibt false
zurück, wenn der Bereich newData außerhalb des Map-Bereichs liegt.
Wenn der Aufruf erfolgreich war, wird das Signal dataWritten() ausgegeben. Beachten Sie, dass das Signal nicht ausgegeben wird, wenn sich das adressierte Register nicht geändert hat. Dies kann der Fall sein, wenn newData genau die gleichen Werte wie das Register enthält. Dennoch gibt diese Funktion in solchen Fällen true
zurück.
Siehe auch data().
bool QModbusServer::setData(QModbusDataUnit::RegisterType table, quint16 address, quint16 data)
Schreibt Daten an den Modbus-Server. Ein Modbus-Server hat vier Tabellen (table) und jede hat ein eindeutiges address Feld, das verwendet wird, um data in das gewünschte Feld zu schreiben. Gibt false
zurück, wenn die Adresse außerhalb des Map-Bereichs liegt.
Wenn der Aufruf erfolgreich war, wird das Signal dataWritten() ausgegeben. Beachten Sie, dass das Signal nicht ausgegeben wird, wenn sich data nicht geändert hat. Dennoch gibt diese Funktion in solchen Fällen true
zurück.
Siehe auch QModbusDataUnit::RegisterType, data(), und dataWritten().
[virtual]
bool QModbusServer::setMap(const QModbusDataUnitMap &map)
Setzt die registrierte Map-Struktur für Anfragen von anderen ModBus-Clients auf map. Die Registerwerte werden mit Null initialisiert. Gibt bei Erfolg true
zurück, andernfalls false
.
Wenn diese Funktion nicht vor dem Verbindungsaufbau aufgerufen wird, wird ein Standardregister mit Nulleinträgen eingerichtet.
Hinweis: Der Aufruf dieser Funktion verwirft jeden Registerwert, der zuvor gesetzt wurde.
void QModbusServer::setServerAddress(int serverAddress)
Setzt die Adresse für diese Modbus-Server-Instanz auf serverAddress.
Siehe auch serverAddress().
[virtual]
bool QModbusServer::setValue(int option, const QVariant &newValue)
Setzt die newValue für option und gibt bei Erfolg true
zurück; andernfalls false
.
Hinweis: Wenn der zugehörige Typ der Option quint8
oder quint16
ist und der Typ von newValue größer ist, werden die Daten abgeschnitten oder die Konversation schlägt fehl.
Schlüssel | Beschreibung |
---|---|
QModbusServer::DiagnosticRegister | Setzt das Diagnoseregister des Servers in einer gerätespezifischen Kodierung auf newValue. Als Standardwert ist 0x0000 voreingestellt. Die Bitwerte des Registers müssen gerätespezifisch dokumentiert werden. |
QModbusServer::ExceptionStatusOffset | Setzt den Byte-Offset für den Ausnahmestatus des Servers auf newValue, was der absoluten Offset-Adresse in den Coils entspricht (0x-Register). Modbus-Registertabelle beginnend mit 0x0000h . Der voreingestellte Wert ist 0x0000 , wobei die Ausnahmestatus-Spulen ähnlich wie bei Modicon 984 CPUs (Spulen 1-8) verwendet werden.Die Funktion gibt |
QModbusServer::DeviceBusy | Setzt ein Flag, das signalisiert, dass der Server mit der Verarbeitung eines lang andauernden Programmbefehls beschäftigt ist. Gültige Werte sind 0x0000 (nicht beschäftigt) und 0xffff (beschäftigt). Als Standardwert ist 0x0000 voreingestellt. |
QModbusServer::AsciiInputDelimiter | Der Wert newValue wird zum Begrenzungszeichen für das Ende der Nachricht für zukünftige Modbus-ASCII-Nachrichten. Als Standardwert ist \n voreingestellt. |
QModbusServer::ListenOnlyMode | Setzt den Listen-Only-Status des Servers auf newValue. Wenn der Listen-Only-Modus auf true eingestellt ist, werden die Nachrichten zwar überwacht, aber es wird keine Antwort gesendet. Als Standardwert ist false voreingestellt. |
QModbusServer::ServerIdentifier | Setzt den Herstellerbezeichner des Servers auf newValue. Mögliche Werte liegen im Bereich von 0x00 bis 0xff. Der voreingestellte Standardwert ist 0x0a . |
QModbusServer::RunIndicatorStatus | Setzt den Status der Laufanzeige des Servers auf newValue. Diese Daten werden von dem Funktionscode QModbusPdu::ReportServerId als Zusatz verwendet. Gültige Werte sind 0x00 (AUS) und 0xff (EIN). Der voreingestellte Wert ist 0xff (EIN). |
QModbusServer::AdditionalData | Setzt die Zusatzdaten des Servers auf newValue. Diese Daten werden vom Funktionscode QModbusPdu::ReportServerId als Addendum verwendet. Die maximale Datengröße darf 249 Byte nicht überschreiten, um den Größenbeschränkungen für Antwortnachrichten zu entsprechen. Der voreingestellte Wert ist Qt Modbus Server . |
QModbusServer::DeviceIdentification | Legt die physische und funktionale Beschreibung des Servers fest. Standardmäßig sind keine zusätzlichen Daten zur Geräteidentifikation eingestellt. |
QModbusServer::UserOption | Setzt den Wert einer Benutzeroption auf newValue. Hinweis: Für Benutzeroptionen muss der Entwickler entscheiden, welche Typen verwendet werden sollen, und sicherstellen, dass die Komponenten beim Zugriff auf und beim Setzen von Werten die richtigen Typen verwenden. |
Siehe auch value().
[virtual]
QVariant QModbusServer::value(int option) const
Gibt den Wert für option oder eine ungültige QVariant
zurück, wenn die Option nicht gesetzt ist.
Option | Beschreibung |
---|---|
QModbusServer::DiagnosticRegister | Gibt den Wert des Diagnoseregisters des Servers zurück. Das Diagnoseregister enthält gerätespezifische Inhalte, wobei jedes Bit eine bestimmte Bedeutung hat. |
QModbusServer::ExceptionStatusOffset | Liefert die Offset-Adresse des Bytes für den Ausnahmestatus im Coils-Register. |
QModbusServer::DeviceBusy | Gibt ein Flag zurück, das anzeigt, ob der Server mit der Verarbeitung eines Langzeitprogrammbefehls beschäftigt ist. |
QModbusServer::AsciiInputDelimiter | Gibt einen Begrenzer für das Nachrichtenende von Modbus-ASCII-Nachrichten zurück. |
QModbusServer::ListenOnlyMode | Gibt den Listen-Only-Status des Servers zurück. Die Nachrichten werden überwacht, aber es wird keine Antwort gesendet. |
QModbusServer::ServerIdentifier | Gibt den Identifizierungscode des Serverherstellers zurück. Dies kann ein beliebiger Wert im Bereich von 0x00 bis 0xff sein. |
QModbusServer::RunIndicatorStatus | Gibt den Status der Laufanzeige des Servers zurück. Diese Daten werden von dem Funktionscode QModbusPdu::ReportServerId als Zusatz verwendet. |
QModbusServer::AdditionalData | Gibt die zusätzlichen Daten des Servers zurück. Diese Daten werden als Zusatz für den Funktionscode QModbusPdu::ReportServerId verwendet. |
QModbusServer::DeviceIdentification | Gibt die physische und funktionale Beschreibung des Servers zurück. |
QModbusServer::UserOption | Gibt den Wert einer Benutzeroption zurück. Hinweis: Bei Benutzeroptionen muss der Entwickler entscheiden, welche Typen verwendet werden sollen, und sicherstellen, dass die Komponenten beim Zugriff auf und Setzen von Werten die richtigen Typen verwenden. |
Siehe auch setValue().
[virtual protected]
bool QModbusServer::writeData(const QModbusDataUnit &newData)
Schreibt newData in die Modbus-Server-Map. Gibt bei Erfolg true
zurück, oder false
, wenn der Bereich newData außerhalb des Map-Bereichs liegt oder der registerType() nicht existiert.
Hinweis: Unterklassen, die das Schreiben in einen anderen Sicherungsspeicher als den Standardspeicher implementieren, müssen auch setMap() und readData() implementieren. Das Signal dataWritten() muss auch innerhalb der Funktionsimplementierung ausgegeben werden.
Siehe auch setMap(), readData(), und dataWritten().
© 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.