Benutzerdefinierte Objektmodelle
Es gibt zwei Situationen, in denen Sie DPIs basierend auf einem benutzerdefinierten Objektmodell erstellen möchten:
- Wenn Sie das gesamte Modbus-Gerät als Datenpunkt mit Eigenschaften modellieren können, die Register darstellen.
- Wenn Sie ein Register als Datenpunkt mit Eigenschaften modellieren können, die Teile der Bytes des Registers darstellen. Unter Wahl benutzerdefinierter Objektmodelle gegenüber Standard-Objektmodellen im Abschnitt Zusätzliche Konfigurationsparameter wird ein Anwendungsfall beschrieben.
In beiden Fällen müssen Sie das Objektmodell definieren, Sie müssen die Importregeln aber unterschiedlich behandeln.
Benutzerdefiniertes Objektmodell entwerfen
Bevor Sie mit dem Erstellen Ihres benutzerdefinierten Objektmodells beginnen, müssen Sie die Eigenschaften und ihre Datentypen identifizieren. Normalerweise erfolgt dies nach der Festlegung der Applikationsmerkmale. Ein Stromzähler liefert beispielsweise Mess- und Konfigurationsparameter. Bestimmen Sie mit Hilfe des Datenblatts oder des Konfigurationshandbuchs des Produkts die Registeradresse, den Datentyp, die Konfigurationseinheiten, den Bereich usw. Das Objektmodell wird zunächst, basierend auf den Parametern des zu integrierenden Gerätes und dessen Datentyp, in einer CSV-Datei formuliert. Die Formulierung (siehe Abschnitt Struktur der benutzerdefinierten Objektmodellvorlage) kann anschliessend in die Managementstation importiert und um Informationen wie Konfigurationseinheiten und Bereich erweitert werden.
Struktur der benutzerdefinierten Objektmodellvorlage
Die Struktur des Gerätes kann in Bezug auf das Objektmodell definiert werden. Schauen Sie sich zum Beispiel das folgende hypothetische Datenblatt eines Messinstruments vom Typ XY an.
Eigenschaftsname | Registeradresse | Datentyp | Richtung |
Voltage Phase 1 | 40001 | Float | Ausgang |
Voltage Phase 2 | 40003 | Float | Ausgang |
Voltage Phase 3 | 40005 | Float | Ausgang |
Current Phase 1 | 40007 | Float | Ausgang |
Current Phase 2 | 40009 | Float | Ausgang |
Current Phase 3 | 40011 | Float | Ausgang |
Total Power | 40013 | Float | Ausgang |
Total Power Apparent | 40015 | Float | Ausgang |
Total Power Reactive | 40017 | Float | Ausgang |
Leistungsfaktor | 40019 | Float | Ausgang |
Energie- | 40021 | Uint | Ausgang |
Correction Factor | 40023 | Float | Eingang |
Die folgende Abbildung zeigt eine CSV-Datei für das Objektmodell gemäss dem obigen Datenblatt.


Bei der Definition der CSV-Datei müssen Sie die Datenpunkte, das Datentypelement und den Datentyp für jedes Objektmodell, das Sie erstellen möchten, im folgenden Format angeben:
# DPT-Name;DPE-Name;Typ;(Referenz);[DPE Name Typ (Referenz) .... ]
Beispiel
Modbus_MeterTypeXY,Voltage_Phase1,Float
Datenpunkttyp, Datenpunktelement und Datentyp | |
Daten | Beschreibung |
DPT-Name | Name des Datenpunktes des Objektmodells. |
DPE-Name | Name des DPE (der Eigenschaft), das mit dem Objektmodell verbunden ist. |
Typ:(Referenz) | Zeichenfolge, die die Eigenschaft (Element) kennzeichnet.
Ausführliche Informationen zu den zulässigen Werten entnehmen Sie bitte der nachfolgenden Tabelle Elementtypen. |
[DPE Name Type (Reference)] | Definition der Eigenschaft (Element) anhand des Namens und Typs. |
Elementtypen | |
Typenangabe | Beschreibung |
Char | Zeichen |
Uint | Vorzeichenlose Ganzzahl |
Int | Ganze Zahl |
Float | Doppel |
Bool | Boolescher Wert |
Eine als Vorlage dienende CSV-Beispieldatei mit dem Namen Modbus_template_7.0_CustomObjectModel_1.csv ist im Ordner GmsMainProject\profiles\ModbusDataTemplate. Diese CSV-Datei kann zur Erstellung des benutzerdefinierten Objektmodells verwendet werden.
Wir empfehlen Ihnen, bei der Festlegung Ihrer benutzerdefinierten Objektmodelle die folgenden Situationen zu berücksichtigen. In jedem der Situationen können Sie auch die EinAus-Eigenschaften definieren.
Situation 1
Wenn Sie 20 Instanzen des Messgeräts XY erstellen wollen, von denen jede über ein eigenes Gateway integriert wird, muss die CSV-Datei wie folgt aussehen. Der Name des Objektmodells muss in der Spalte ObjectModel des Geräteeintrags angegeben werden.


Wenn Sie die CSV-Datei öffnen, müssen Sie die folgenden Elementtypen eingeben:
- Modbus-Schnittstelle
- Modbus benutzerdefinierte Geräte
Die Daten der CSV-Datei werden so sortiert, dass sie die Hierarchie der Datenpunkte eines Objektmodells darstellen, das in der Managementsicht des System Browsers erstellt werden soll.
Situation 2 für Modbus
Wenn Sie 20 Instanzen des Punkts ABC unter dem Messgerät_ABC (über nur eine Gateway-Schnittstelle 192.168.0.1 integriert) erstellen wollen, muss die CSV-Datei wie folgt aussehen.
Der Name des Objektmodells muss in der Spalte ObjectModel des Punkteintrags angegeben werden.


Wenn Sie die CSV-Datei öffnen, müssen Sie die folgenden Elementtypen eingeben:
- Modbus-Schnittstelle
- Modbus-Gerät
- Modbus benutzerdefinierte Datenpunkte
Situation 3 für Modbus-Brandmeldezentrale
Dieses Szenario ist eine Erweiterung der Situation 2.
Es gibt mehrere Modbus-Geräte, insbesondere Brandmelder, mit begrenztem Speicherplatz. Zu diesen Geräten gehören einige Punkte, die als einzelnes Bit adressierbar sind, da sie aufgrund des begrenzten Speicherplatzes kein volles Byte oder Register (zwei Byte) zugewiesen bekommen können. Sie können über eine Kombination von Offset und Subindexierung auf Bitebene adressiert werden.
In einem solchen Szenario werden Offset und Subindex in den Importregeln und in der CSV-Datei separat definiert. Die kumulierten Werte des Offsets und Subindex werden nach den folgenden Formeln ermittelt:
- Endgültiger Offset = Offset aus Importregeln + Offset aus CSV-Datei
- Endgültiger Subindex = Subindex aus Importregeln + Subindex aus CSV-Datei
Ein Register besteht aus 2 Byte (oder 16 Bit).

Ein Brandmeldegerät verfügt beispielsweise über vier boolesche Eingangseigenschaften. Der Gesamtspeicherbedarf für jedes Gerät beträgt daher vier Bit. Wenn Sie vier Instanzen desselben Brandmelders haben, beträgt der Gesamtspeicherbedarf also 16 Bit, was einem Register entspricht. Anstatt also jedem Brandmelder ein separates Register zuzuweisen (was insgesamt vier Register benötigen würde), können sich die Geräte ein einziges Register teilen, wodurch Sie Speicherplatz sparen. In den folgenden Abschnitten werden zwei Verfahren beschrieben, um dies zu erreichen.
Situation 3, Fall A
Diese Situation trifft zu, wenn mehrere Eigenschaften aufeinanderfolgende Bits in einem einzigen Register einnehmen.
Gehen wir beispielsweise davon aus, dass die Importregeln ein Datenmodell FD01 enthalten, bei dem alle Eigenschaften aufeinanderfolgende Bits eines einzigen Registers einnehmen, wie in der folgenden Abbildung dargestellt.


Hinweis:
Der Datentyp der Eigenschaften kann über den Konfigurator des Datenmodells in GmsBool geändert werden. Beide haben dieselbe Bedeutung. Wenn der Datentyp GmsBool ist, können Sie die Textgruppen jedoch verknüpfen. Die Textgruppen für PvssBool können Sie nicht verknüpfen.
Sie wollen nun vier Instanzen dieses Brandmelders so anlegen, dass sie nur ein Register benötigen und ihre Eigenschaften die Bits des Registers wie folgt belegen:
Brandmelder | Eigenschaft | Bitnummer im Register |
FD01_inst01 | AlarmStatus | 0 |
FaultStatus | 1 | |
TamperStatus | 2 | |
MaintenanceStatus | 3 | |
FD01_inst02 | AlarmStatus | 4 |
FaultStatus | 5 | |
TamperStatus | 6 | |
MaintenanceStatus | 7 | |
FD01_inst03 | AlarmStatus | 8 |
FaultStatus | 9 | |
TamperStatus | 10 | |
MaintenanceStatus | 11 | |
FD01_inst04 | AlarmStatus | 12 |
FaultStatus | 13 | |
TamperStatus | 14 | |
MaintenanceStatus | 15 |
Sie müssen die Instanzen des Brandmelders in der CSV-Datei wie folgt definieren.

Beim Import fügt der Importer die in den Importregeln genannten Offset- und Subindex-Werte des Objektmodells dem Offset und Subindex der in der CSV-Datei genannten Instanzen jeweils hinzu. Die Formeln zur Berechnung der endgültigen Adresse jeder Eigenschaft lauten wie folgt:
- Endgültiger Offset = Offset aus den Importregeln + Offset der Instanz aus der CSV-Datei
- Endgültiger Subindex = Subindex aus den Importregeln + Subindex der Instanz aus der CSV-Datei
- Endgültige Adresse = (Endgültiges Offset) + (Endgültiger Subindex)
Brandmelder | Eigenschaft | Offset im Objektmodell | Subindex im Objektmodell | Offset in CSV | Subindex in CSV | Bitnummer im Register |
FD01_inst01 | AlarmStatus | 0 | 0 | 0 | 0 | 0 |
FaultStatus | 0 | 1 | 0 | 0 | 1 | |
TamperStatus | 0 | 2 | 0 | 0 | 2 | |
MaintenanceStatus | 0 | 3 | 0 | 0 | 3 | |
FD01_inst02 | AlarmStatus | 0 | 0 | 0 | 4 | 4 |
FaultStatus | 0 | 1 | 0 | 4 | 5 | |
TamperStatus | 0 | 2 | 0 | 4 | 6 | |
MaintenanceStatus | 0 | 3 | 0 | 4 | 7 | |
FD01_inst03 | AlarmStatus | 0 | 0 | 0 | 8 | 8 |
FaultStatus | 0 | 1 | 0 | 8 | 9 | |
TamperStatus | 0 | 2 | 0 | 8 | 10 | |
MaintenanceStatus | 0 | 3 | 0 | 8 | 11 | |
FD01_inst04 | AlarmStatus | 0 | 0 | 0 | 12 | 12 |
FaultStatus | 0 | 1 | 0 | 12 | 13 | |
TamperStatus | 0 | 2 | 0 | 12 | 14 | |
MaintenanceStatus | 0 | 3 | 0 | 12 | 15 |
Das folgende Beispiel für FD01_inst04.AlarmStatus soll Ihnen helfen, die Adressberechnung besser zu verstehen.
- Endgültiger Offset = Offset aus den Importregeln (0) + Offset der Instanz aus der CSV-Datei (0) = 0
- Endgültiger Subindex (oder Bitzahl für Offset 0) = Subindex aus den Importregeln (0) + Subindex aus der CSV-Datei (12) = 12
- Endgültige Adresse = (0) + (12) = 12
Situation 3, Fall B
Dieser Fall leitet sich von Fall A, Situation 3 ab.
In Fall A sind alle Eigenschaften aufeinander folgend platziert. In Fall B liegen jedoch einige der Eigenschaften im niedrigeren Byte, während die übrigen im höheren Byte liegen.

Sie können die Einträge in der CSV-Datei wie folgt ändern:

Unter Verwendung der bereits genannten Formeln zur Adressermittlung lautet die endgültige Adresse wie folgt:
Brandmelder | Eigenschaft | Offset im Objektmodell | Subindex im Objektmodell | Offset in CSV | Subindex in CSV | Bitnummer im Register |
FD01_inst01 | AlarmStatus | 0 | 0 | 0 | 0 | 0 |
FaultStatus | 0 | 1 | 0 | 0 | 1 | |
TamperStatus | 0 | 8 | 0 | 0 | 8 | |
MaintenanceStatus | 0 | 9 | 0 | 0 | 9 | |
FD01_inst02 | AlarmStatus | 0 | 0 | 0 | 2 | 2 |
FaultStatus | 0 | 1 | 0 | 2 | 3 | |
TamperStatus | 0 | 8 | 0 | 2 | 10 | |
MaintenanceStatus | 0 | 9 | 0 | 2 | 11 | |
FD01_inst03 | AlarmStatus | 0 | 0 | 0 | 4 | 4 |
FaultStatus | 0 | 1 | 0 | 4 | 5 | |
TamperStatus | 0 | 8 | 0 | 4 | 12 | |
MaintenanceStatus | 0 | 9 | 0 | 4 | 13 | |
FD01_inst04 | AlarmStatus | 0 | 0 | 0 | 6 | 6 |
FaultStatus | 0 | 1 | 0 | 6 | 7 | |
TamperStatus | 0 | 8 | 0 | 6 | 14 | |
MaintenanceStatus | 0 | 9 | 0 | 6 | 15 |
Wie in Fall A, wird anstelle von vier separaten Registern nur ein Register zur Speicherung des gesamten Objektmodells verwendet. Das Adressiermuster ist jedoch ein anderes.
Situation 3, Fall C
Das Datenmodell benötigt für die Eigenschaften zwei Byte in einem Register. Die erste Eigenschaft liegt im niedrigeren Byte und die zweite im höheren Byte.

Hinweis:
PvssChar wird benutzt, um ein Byte darzustellen.

In der CSV-Datei werden zwei Instanzen erstellt.

Brandmelder | Eigenschaft | Offset im Objektmodell | Offset in CSV | Endgültiges Offset | Subindex im Objektmodell | Subindex in CSV | Endgültiger Subindex |
FD03_inst01 | CommandStatus | 0 | 0 | 0 | 0 | 0 | 0 |
ExtendedStatus | 0 | 0 | 0 | 1 | 0 | 1 | |
FD03_inst02 | CommandStatus | 0 | 1 | 1 | 0 | 0 | 0 |
ExtendedStatus | 0 | 1 | 1 | 1 | 0 | 1 |
Die Instanzen FD03_inst01 und FD03_inst02 belegen jeweils separate einzelne Register. Offset 0 bedeutet das erste Byte des Registers ab der Basisadresse, während Offset 1 das zweite Byte des Registers ab der Basis bedeutet.
Objektmodell re-importieren
Bei einem Re-Import des Objektmodells per CSV-Datei werden die vorhandenen Objektmodelle aktualisiert.
Ein Re-Import ermöglicht Ihnen, die folgenden Aufgaben auszuführen:
- Hinzufügen neuer Objektmodelle
- Hinzufügen oder Entfernen von Eigenschaften in vorhandenen Objektmodellen
- Aktualisieren des Typs einer vorhandenen Eigenschaft in einem Objektmodell
- Hinzufügen oder Aktualisieren mehrerer Objektmodelle mit Hilfe einer einzelnen CSV-Datei

Hinweis:
Beim Re-Import können keine vorhandenen Objektmodelle aus dem System gelöscht werden. Wenn Sie ein vorhandenes Objektmodell löschen möchten, wählen Sie das Objektmodell im System Browser und klicken Sie Löschen.