Auf dieser Seite

QModbusServer Class

Die Klasse „QModbusServer“ dient als Schnittstelle zum Empfangen und Verarbeiten von Modbus-Anfragen. Mehr...

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

QModbusRtuSerialServer und QModbusTcpServer

Ö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)

Ausführliche Beschreibung

Modbus-Netzwerke können mehrere Modbus-Server enthalten. Modbus-Server werden von einem Modbus-Client gelesen und beschrieben, der durch ` QModbusClient` repräsentiert wird. `QModbusServer` kommuniziert mit einem Modbus-Backend und stellt Benutzern eine komfortable API zur Verfügung.

Dokumentation zu den Mitgliedstypen

enum QModbusServer::Option

Jedem Modbus-Server ist eine Reihe von Werten zugeordnet, für die jeweils eine eigene Option vorhanden ist.

Die allgemeinen Optionen (und die zugehörigen Typen) lauten:

KonstanteWertBeschreibung
QModbusServer::DiagnosticRegister0Das Diagnoseregister des Servers. quint16
QModbusServer::ExceptionStatusOffset1Der Offset des Ausnahmestatus-Bytes des Servers. quint16
QModbusServer::DeviceBusy2Flag, das anzeigt, dass der Server gerade einen lang andauernden Programmbefehl verarbeitet. quint16
QModbusServer::AsciiInputDelimiter3Das Modbus-ASCII-Trennzeichen für das Ende einer Nachricht. char
QModbusServer::ListenOnlyMode4Flag zum Aktivieren des reinen Empfangsmodus des Servers. Diese Funktion wird in der Regel nur von seriellen Modbus-Geräten unterstützt. bool
QModbusServer::ServerIdentifier5Die Kennung des Servers, nicht die Serveradresse. quint8
QModbusServer::RunIndicatorStatus6Die Betriebsanzeige des Servers. quint8
QModbusServer::AdditionalData7Die Zusatzdaten des Servers. QByteArray
QModbusServer::DeviceIdentification8Die physikalische und funktionale Beschreibung des Servers. QModbusDeviceIdentification

Benutzeroptionen:

KonstanteWertBeschreibung
QModbusServer::UserOption0x100Die erste Option, die für benutzerspezifische Zwecke verwendet werden kann.

Bei Benutzeroptionen obliegt es dem Entwickler, zu entscheiden, welche Typen verwendet werden sollen, und sicherzustellen, dass Komponenten beim Abrufen und Festlegen von Werten die richtigen Typen verwenden.

Dokumentation der Member-Funktionen

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

Erstellt einen Modbus-Server mit der angegebenen Adresse „ parent “.

bool QModbusServer::data(QModbusDataUnit *newData) const

Gibt die Werte im durch ` newData` angegebenen Registerbereich zurück.

newData Es müssen ein gültiger Registertyp, eine Startadresse und „valueCount“ angegeben werden. Das zurückgegebene „ newData “ enthält die Registerwerte, die dem angegebenen Bereich zugeordnet sind.

Enthält ` newData ` einen gültigen Registertyp, aber eine negative Startadresse, wird die gesamte Registerzuordnung zurückgegeben und ` newData ` entsprechend angepasst.

Siehe auch ` setData()`.

bool QModbusServer::data(QModbusDataUnit::RegisterType table, quint16 address, quint16 *data) const

Liest die im Modbus-Server gespeicherten Daten aus. Ein Modbus-Server verfügt über vier Tabellen (table), von denen jede ein eindeutiges Feld „ address “ enthält, das zum Auslesen von „ data “ aus dem gewünschten Feld verwendet wird. Weitere Informationen zu den verschiedenen Tabellen finden Sie unter QModbusDataUnit::RegisterType. Gibt „ false “ zurück, wenn die Adresse außerhalb des Zuordnungsbereichs 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 zu den geschriebenen Feldern:

  • den Typ des Registers (table), das geschrieben wurde,
  • address des ersten geschriebenen Feldes,
  • sowie die size der aufeinanderfolgenden Felder, die ab address geschrieben wurden.

Das Signal wird nicht ausgegeben, wenn sich die zu schreibenden Felder aufgrund einer unveränderten Wertlage nicht geändert haben.

[virtual protected] QModbusResponse QModbusServer::processPrivateRequest(const QModbusPdu &request)

Diese Funktion sollte von benutzerdefinierten Modbus-Servern implementiert werden. Sie wird von ` processRequest()` aufgerufen, wenn der angegebene ` request ` keine Standard-Modbus-Anfrage ist.

Durch Überschreiben dieser Funktion können zusätzliche Funktionscodes und Unterfunktionscodes verarbeitet werden, die nicht in der Modbus-Anwendungsprotokollspezifikation 1.1b festgelegt sind. Neuimplementierungen sollten diese Funktion erneut aufrufen, um sicherzustellen, dass für alle unbekannten Funktionscodes, die von der benutzerdefinierten Modbus-Implementierung nicht verarbeitet werden, eine Ausnahmemeldung zurückgegeben wird.

Diese Standardimplementierung gibt ein ` QModbusExceptionResponse ` zurück, bei dem der Funktionscode ` request ` und der Fehlercode auf „unzulässige Funktion“ gesetzt sind.

Siehe auch ` processRequest()`.

[virtual protected] QModbusResponse QModbusServer::processRequest(const QModbusPdu &request)

Verarbeitet eine Modbus-Client- request und gibt eine Modbus-Antwort zurück. Diese Funktion gibt je nach Art der Anfrage entweder „ QModbusResponse “ oder „ QModbusExceptionResponse “ zurück.

Die Standardimplementierung dieser Funktion verarbeitet alle Standard-Modbus-Funktionscodes gemäß der Modbus Application Protocol Specification 1.1b. Alle anderen Modbus-Funktionscodes, die nicht in der Spezifikation enthalten sind, werden an processPrivateRequest() weitergeleitet.

Die Standardbehandlung der Anfragen mit Standard-Modbus-Funktionscodes kann durch eine Neuimplementierung dieser Funktion überschrieben werden. Die Überschreibung muss den betreffenden Anforderungstyp verarbeiten und den entsprechenden ` QModbusResponse` zurückgeben. Ein häufiger Grund hierfür könnte darin bestehen, Funktionscode-Anforderungen für Datenwerte herauszufiltern, um den Lese-/Schreibzugriff einzuschränken, sowie Funktionscodes, die in bestimmten Implementierungen unerwünscht sind, wie z. B. die Diagnose der seriellen Schnittstelle über Ethernet oder Modbus-Plus-Transportschichten. Alle anderen Anforderungstypen sollten an diese Standardimplementierung weitergeleitet werden.

Hinweis: Diese Funktion sollte nicht überschrieben werden, um eine benutzerdefinierte Implementierung für nicht standardmäßige Modbus-Anforderungstypen 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 es sich bei der aktuell verarbeiteten Anfrage um eine Broadcast-Anfrage handelt; andernfalls „ false “. Die Standardimplementierung gibt immer „ false “ zurück.

Hinweis: Der Rückgabewert dieser Funktion ist nur innerhalb von ` processRequest()` oder ` processPrivateRequest()` aussagekräftig; andernfalls gibt er lediglich an, dass die zuletzt verarbeitete Anfrage eine Broadcast-Anfrage war.

[virtual protected] bool QModbusServer::readData(QModbusDataUnit *newData) const

Liest die Werte im durch ` newData ` angegebenen Registerbereich und schreibt die Daten zurück in ` newData`. Gibt bei Erfolg ` true ` zurück oder ` false `, wenn ` newData ` ` 0` ist, der Bereich ` newData ` außerhalb des Zuordnungsbereichs liegt oder `registerType()` nicht existiert.

Hinweis: Unterklassen , die das Lesen aus einem anderen als dem Standard-Backing-Store implementieren, müssen ebenfalls 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-Zuordnung. Gibt „ false “ zurück, wenn der Bereich „ newData “ außerhalb des Zuordnungsbereichs liegt.

Bei erfolgreichem Aufruf wird das Signal „ dataWritten()“ ausgelöst. Beachten Sie, dass das Signal nicht ausgelöst wird, wenn sich das adressierte Register nicht geändert hat. Dies kann passieren, wenn „ newData “ bereits genau dieselben 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 verfügt über vier Tabellen (table), von denen jede ein eindeutiges Feld „ address “ enthält, das zum Schreiben von „ data “ in das gewünschte Feld verwendet wird. Gibt „ false “ zurück, wenn die Adresse außerhalb des Zuordnungsbereichs liegt.

War der Aufruf erfolgreich, wird das Signal „ dataWritten()“ ausgelöst. Beachten Sie, dass das Signal nicht ausgelöst 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)

Legt die registrierte Map-Struktur für Anfragen anderer Modbus-Clients an „ map “ fest. Die Registerwerte werden auf Null initialisiert. Gibt bei Erfolg „ true “ zurück; andernfalls „ false “.

Wird diese Funktion nicht vor dem Verbindungsaufbau aufgerufen, wird ein Standardregister mit null Einträgen eingerichtet.

Hinweis: Durch den Aufruf dieser Funktion werden alle zuvor festgelegten Registerwerte verworfen.

void QModbusServer::setServerAddress(int serverAddress)

Legt die Adresse für diese Modbus-Server-Instanz auf serverAddress fest.

Siehe auch serverAddress().

[virtual] bool QModbusServer::setValue(int option, const QVariant &newValue)

Legt den „ newValue “ für „ option “ fest 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 gekürzt oder die Konvertierung schlägt fehl.

SchlüsselBeschreibung
QModbusServer::DiagnosticRegisterSetzt das Diagnoseregister des Servers in einer gerätespezifischen Kodierung auf „ newValue “. Der voreingestellte Standardwert ist „ 0x0000 “. Die Bitwerte des Registers müssen der gerätespezifischen Dokumentation entnommen werden.
QModbusServer::ExceptionStatusOffsetSetzt den Offset des Ausnahmestatus-Bytes des Servers auf „ newValue “, was der absolute Offset-Adresswert in den Coils (0x-Register) ist. Die Modbus-Registriertabelle beginnt mit „ 0x0000h “. Der voreingestellte Standardwert ist „ 0x0000 “, wobei die Ausnahmestatus-Coils ähnlich wie bei Modicon-984-CPUs (Coils 1–8) verwendet werden.

Die Funktion gibt „ true “ zurück, wenn das Spulenregister die 8 Bits enthält, die zum Speichern und Abrufen der Status-Spulen erforderlich sind, andernfalls „ false “.

QModbusServer::DeviceBusySetzt ein Flag, das anzeigt, dass der Server gerade einen lang andauernden Programmbefehl verarbeitet. Gültige Werte sind „ 0x0000 “ (nicht beschäftigt) und „ 0xffff “ (beschäftigt). Der voreingestellte Standardwert ist „ 0x0000 “.
QModbusServer::AsciiInputDelimiter„ newValue “ wird zum Endzeichen für zukünftige Modbus-ASCII-Nachrichten. Der voreingestellte Standardwert ist „ \n “.
QModbusServer::ListenOnlyModeStellt den „Listen-only“-Modus des Servers auf „ newValue “ ein. Ist der „Listen-only“-Modus auf „ true “ eingestellt, werden Nachrichten überwacht, es werden jedoch keine Antworten gesendet. Der voreingestellte Standardwert ist „ false “.
QModbusServer::ServerIdentifierSetzt die Hersteller-ID des Servers auf „ newValue “. Mögliche Werte liegen im Bereich von „ 0x00 “ bis „0xff“. Der voreingestellte Standardwert ist „ 0x0a “.
QModbusServer::RunIndicatorStatusSetzt den Status der Betriebsanzeige des Servers auf „ newValue “. Diese Daten werden vom Funktionscode „ QModbusPdu::ReportServerId “ als Zusatz verwendet. Gültige Werte sind „ 0x00 “ (AUS) und „ 0xff “ (EIN). Der voreingestellte Standardwert ist „ 0xff “ (EIN).
QModbusServer::AdditionalDataSetzt die Zusatzdaten des Servers auf „ newValue “. Diese Daten werden vom Funktionscode „ QModbusPdu::ReportServerId “ als Ergänzung verwendet. Die maximale Datengröße darf 249 Byte nicht überschreiten, um den Beschränkungen für die Größe von Antwortnachrichten zu entsprechen. Der voreingestellte Standardwert ist „ Qt Modbus Server “.
QModbusServer::DeviceIdentificationLegt die physikalische und funktionale Beschreibung des Servers fest. Standardmäßig sind keine zusätzlichen Daten zur Geräteidentifikation festgelegt.
QModbusServer::UserOptionLegt den Wert einer Benutzeroption auf „ newValue “ fest.

Hinweis: Bei Benutzeroptionen obliegt es dem Entwickler, zu entscheiden, welche Typen verwendet werden sollen, und sicherzustellen, dass die Komponenten beim Abrufen und Setzen von Werten die richtigen Typen verwenden.

Siehe auch ` value()`

[virtual] QVariant QModbusServer::value(int option) const

Gibt den Wert für „ option “ zurück oder einen ungültigen Wert „ QVariant “, falls die Option nicht festgelegt ist.

OptionBeschreibung
QModbusServer::DiagnosticRegisterGibt den Wert des Diagnoseregisters des Servers zurück. Das Diagnoseregister enthält gerätespezifische Daten, wobei jedes Bit eine bestimmte Bedeutung hat.
QModbusServer::ExceptionStatusOffsetGibt die Offset-Adresse der Position des Ausnahmestatus-Bytes im Coils-Register zurück.
QModbusServer::DeviceBusyGibt ein Flag zurück, das anzeigt, ob der Server gerade einen lang andauernden Programmbefehl verarbeitet.
QModbusServer::AsciiInputDelimiterGibt ein Trennzeichen für das Ende von Modbus-ASCII-Nachrichten zurück.
QModbusServer::ListenOnlyModeGibt den „Listen-only“-Zustand des Servers zurück. Nachrichten werden überwacht, es wird jedoch keine Antwort gesendet.
QModbusServer::ServerIdentifierGibt den Identifikationscode des Serverherstellers zurück. Dies kann ein beliebiger Wert im Bereich von 0x00 bis 0xff sein.
QModbusServer::RunIndicatorStatusGibt den Status der Betriebsanzeige des Servers zurück. Diese Daten werden als Ergänzung zum Funktionscode „ QModbusPdu::ReportServerId “ verwendet.
QModbusServer::AdditionalDataGibt die Zusatzdaten des Servers zurück. Diese Daten werden vom Funktionscode „ QModbusPdu::ReportServerId “ als Zusatz verwendet.
QModbusServer::DeviceIdentificationGibt die physikalische und funktionale Beschreibung des Servers zurück.
QModbusServer::UserOptionGibt den Wert einer Benutzeroption zurück.

Hinweis: Bei Benutzeroptionen obliegt es dem Entwickler, zu entscheiden, welche Typen verwendet werden sollen, und sicherzustellen, dass die Komponenten beim Abrufen 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-Zuordnung. Gibt bei Erfolg „ true “ zurück, andernfalls „ false “, wenn der Bereich „ newData “ außerhalb des Zuordnungsbereichs liegt oder die Funktion „registerType()“ nicht existiert.

Hinweis: Unterklassen , die das Schreiben in einen anderen als den Standard-Backing-Store implementieren, müssen ebenfalls die Funktionen ` setMap()` und ` readData()` implementieren. Das Signal ` dataWritten()` muss ebenfalls innerhalb der Funktionsimplementierung ausgelöst werden.

Siehe auch setMap(), readData() und dataWritten().

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