Logo Herborner Pumpentechnik GmbH & Co KGModbus Connector – Dokumentation

Modbus Connector – Funktionsbeschreibung

Der Modbus Connector (HP.ModbusConnector) ist eine App von Herborner Pumpen für die FLECS-Plattform. Sie verbindet Ihre Steuerung – eine SPS oder ein Leitsystem – über Modbus TCP mit den übrigen Herborner-Apps auf dem Gerät: Die Steuerung schreibt Messwerte der Pumpen in Register, der Modbus Connector gibt sie an die anderen Apps weiter und stellt deren Ergebnisse wieder als Register bereit.

Die Apps im Zusammenspiel

App Aufgabe
HP.ModbusConnector Modbus-TCP-Schnittstelle zur Steuerung (diese App)
HP.AiCore Wertet die Pumpendaten aus: Differenzdruck, Wirkungsgrad, Pumpen-Statuswort, Vorfilterzustand und berechneter Volumenstrom
HP.CloudLink Verbindung zur Herborner-Cloud: überträgt Mess- und Kennwerte, Ereignisse und Protokolle und liefert Pumpen- und App-Konfigurationen an das Gerät
FLECS Service Mesh Gemeinsamer Datenbus, über den die Apps auf dem Gerät ihre Daten austauschen

Alle Apps laufen auf demselben FLECS-Gerät und tauschen ihre Daten ausschließlich über den Datenbus aus. Der Modbus Connector ist die einzige App mit einer Modbus-Schnittstelle.

Steuerung (SPS)           HP.ModbusConnector                  Datenbus
┌─────────────┐ schreibt ┌──────────────────┐ Messwerte ┌──────────────────┐
│             │ ───────► │ Holding-Register │ ────────► │ HP.AiCore        │
│             │  liest   │                  │ Kennwerte │                  │
│             │ ◄─────── │ Input-Register   │ ◄──────── │                  │
└─────────────┘          └──────────────────┘           ├──────────────────┤
                                                        │ HP.CloudLink     │ ◄──► Herborner-Cloud
                                                        └──────────────────┘

Datenfluss

  1. Die Steuerung schreibt die Messwerte einer Pumpe – Volumenstrom, Drücke, Drehzahl, Leistung, Motorwerte, Umrichter-Status – in die Holding-Register.
  2. Der Modbus Connector prüft jeden Wert auf Datentyp, Registeranzahl und die zulässigen Grenzen (Min/Max) und gibt gültige Werte auf den Datenbus. Ungültige Werte werden verworfen und im Protokoll vermerkt.
  3. HP.AiCore berechnet aus den Messwerten die Kennwerte der Pumpe und gibt sie auf den Datenbus.
  4. Der Modbus Connector übernimmt die Kennwerte in die Input-Register, aus denen die Steuerung sie liest.
  5. HP.CloudLink überträgt Mess- und Kennwerte in die Herborner-Cloud.

Nach einem Neustart fordert der Modbus Connector die Konfigurationen und die aktuellen Kennwerte bei den anderen Apps neu an, damit die Input-Register wieder gefüllt sind.

Pumpen und Entities

Pumpen haben einen festen Satz an Datenpunkten. Die vollständige Belegung mit Adressen, Datentypen und Grenzwerten steht in der Standard-Konfiguration.

Register Richtung Datenpunkte
Holding Steuerung → Gerät Messwerte: Volumenstrom, Drücke (Druckseite, Saugseite, Vorfilter), Drehzahl, Wellenleistung, Motorstrom und -spannung, Betriebsstunden, Energieverbrauch, Umrichter-Statuswort und -Fehlercode, Füllstand Windkessel, Vorfilter gereinigt, Verschmutzungsgrad Vorfilter
Input Gerät → Steuerung Kennwerte von HP.AiCore: berechneter Volumenstrom¹, Differenzdruck, Wirkungsgrad, Pumpen-Statuswort, Vorfilterzustand¹ – sowie Name und Seriennummer der Pumpe

¹ Nur, wenn das zugehörige Analysemodul für die Pumpe freigeschaltet ist; sonst bleibt das Register auf 0.

Entities sind frei definierte Objekte ohne Pumpe, etwa Messstellen oder Behälter, mit eigenen Datenpunkten. Nur lesbare Datenpunkte erscheinen als Input-Register, beschreibbare als Holding-Register. Jede Entity belegt ab Register 20000 + Nr. × 1000 je Datenpunkt einen Block von 10 Registern.

Pumpen und Entities legt Herborner Pumpen in der Cloud an; HP.CloudLink überträgt ihre Konfiguration auf das Gerät, der Modbus Connector speichert sie lokal. Neu angelegte Pumpen oder Entities erhalten ihre Register erst nach einem Neustart des Modbus Connectors.

Verhalten der Modbus-Schnittstelle

Geräteinformationen

Eine Steuerung, die den Modbus Connector zum ersten Mal anspricht, muss drei Dinge wissen: ob unter der Adresse wirklich ein Modbus Connector antwortet, wie sie die Register lesen muss und ob die App arbeitet. Dafür gibt es zwei Wege:

Weg Inhalt Geeignet für
Function Code 43 (Read Device Identification) Hersteller, Produktcode, Version, Produktname und Gerätekennung als Text Leitsysteme und Tools zur Geräteverwaltung, die FC 43 unterstützen
Input-Register 1–99 (Info-Block) Dieselben Angaben in Kurzform, dazu Kodierung, Registerbelegung und Zustand der App Jede Steuerung – gelesen wird mit dem gewöhnlichen Function Code 04

Pflicht sind bei Function Code 43 laut Modbus-Spezifikation nur Hersteller, Produktcode und Version. Die vollständige Belegung beider Wege mit Beispielwerten steht in der Standard-Konfiguration. Die Werte im Einzelnen:

Erkennung

Signatur (Register 1–2): immer 0x4850 0x4D42. Jedes Register enthält zwei ASCII-Zeichen – 0x48 „H“, 0x50 „P“, 0x4D „M“, 0x42 „B“ –, auf der Leitung stehen also die Bytes von „HPMB“. Ein Modbus-Tool zeigt sie dezimal als 18512 19778, in der Textansicht als HPMB.

Mit einem einzigen Lesezugriff prüft die Steuerung damit, ob sie mit einem Modbus Connector spricht und nicht – etwa nach einem Tippfehler in der IP-Adresse – fremde Register als Pumpendaten liest. Die Signatur besteht bewusst aus zwei einzelnen 16-Bit-Zahlen: so ist sie unabhängig von Byte-Reihenfolge und Textkodierung immer gleich. Das Verfahren ist aus der Energietechnik bekannt; SunSpec-Geräte kennzeichnen sich auf dieselbe Weise mit „SunS“. Die Signatur ändert sich nie.

Layout-Version (Register 3): Version der Belegung von Register 1–99, aktuell 1. Kommt ein Feld hinzu oder verschiebt sich eines, steigt die Version. Eine Steuerung, die für Version 1 programmiert ist, erkennt eine höhere Version und wertet die übrigen Register dann nicht blind aus.

Kodierung

Zahlen mit 32 Bit belegen zwei Register, und welches davon zuerst kommt, ist bei Modbus nicht festgelegt. Ein vertauschtes Paar ist der häufigste Fehler bei der Inbetriebnahme: Der Volumenstrom steht dann als winzige oder riesige Zahl statt als 12,5 in der Steuerung.

Byteorder-Prüfzahl (Register 4–5): immer der Wert 0x12345678, abgelegt in der eingestellten Byte-Reihenfolge. Die Reihenfolge der beiden Register zeigt, wie alle 32-Bit- Werte des Geräts zu lesen sind:

Register 4 Register 5 Byte-Reihenfolge In der Steuerung
0x1234 0x5678 big höherwertiges Wort zuerst
0x5678 0x1234 little (Standard) niederwertiges Wort zuerst (Word Swap)

Bei Texten bestimmt die Byte-Reihenfolge, welches der beiden Zeichen eines Registers zuerst kommt.

Byte-Reihenfolge (Register 6): dieselbe Aussage als Zahl – 0 big, 1 little – für Steuerungen, die sie automatisch auswerten.

Textkodierung (Register 7): 0 utf-8, 1 latin-1, 2 ascii, 3 cp1252, 4 utf-16. Texte wie Pumpenname und Seriennummer liegen als Bytes in den Registern. Bei Umlauten hängt es von der Kodierung ab, welche Zeichen die Bytes ergeben; ohne dieses Register müsste die Steuerung sie raten.

Version und Gerät

App-Version (Register 8–10) als Major, Minor und Patch sowie die Build-Zeit (Register 11–12) in Unix-Sekunden. Damit lässt sich in der Steuerung oder im Leitsystem festhalten, welche Version auf welchem Gerät läuft.

Texte (Register 13–80): Herstellername, Produktname, Produktcode, FLECS-Version, Hostname, Gerätekennung und Architektur. Ein Text endet am ersten Byte 0x00. Ist er länger als sein Feld, steht nur der Anfang im Register; vollständig liefert ihn Function Code 43. Die Gerätekennung ist aus der Lizenz des FLECS-Geräts abgeleitet und unterscheidet Geräte eindeutig, etwa in einer Anlage mit mehreren Modbus Connectors.

FLECS-Version, Gerätekennung und Architektur liest die App beim Start vom FLECS-Gerät. Klappt das nicht, versucht sie es noch zweimal im Abstand von einer Minute; danach bleiben die Felder bis zum nächsten Start leer. Für den Betrieb ist das ohne Bedeutung.

Registerbelegung

Die Register 81–84 beschreiben, wo Pumpen und Entities liegen. Eine Steuerung kann die Adressen damit ausrechnen, statt sie fest einzuprogrammieren:

Register Wert Bedeutung
81 100 Register je Pumpe – Pumpe i beginnt bei Register i × 100
82 20000 Erstes Register des Entity-Bereichs
83 1000 Register je Entity – Entity j beginnt bei 20000 + j × 1000
84 10 Register je Datenpunkt einer Entity

Zusammen mit der Anzahl Pumpen und Entities (Register 88–89) kann ein Leitsystem alle Pumpen und Entities automatisch durchlaufen, z. B. bei 3 Pumpen die Basisadressen 100, 200 und 300. Wo ein Datenpunkt innerhalb einer Pumpe liegt, steht nicht hier, sondern in der Standard-Konfiguration.

Zustand der App

Statuswort (Register 85):

Bit Gesetzt, wenn Wozu
0 die Gerätedaten des FLECS-Geräts gelesen sind Unterscheidet „Feld leer, weil noch nicht gelesen“ von einem gültigen Wert
1 mindestens eine Pumpe konfiguriert ist Wichtigste Prüfung: Ohne Konfiguration aus der Cloud bleiben alle Pumpenregister 0. Ist das Bit 0, sind die Pumpenwerte keine Messwerte
2 mindestens ein Modbus-Client verbunden ist Für die lesende Steuerung selbst immer gesetzt; aussagekräftig nur in der Weboberfläche. Ob weitere Clients verbunden sind, zeigt Register 87

Heartbeat (Register 86): zählt in jedem Zyklus der App um 1 hoch (Standard: zehnmal je Sekunde) und beginnt nach 65535 wieder bei 0. Ändert sich der Wert zwischen zwei Abfragen nicht mehr, liefert die App keine frischen Daten.

Verbindungen (Register 87), Laufzeit (Register 90–91, Sekunden seit dem Start) und Uhrzeit des Geräts (Register 92–93, Unix-Sekunden UTC). Wird die Laufzeit kleiner, ist die App neu gestartet.

Inbetriebnahme und Implementierung

Inbetriebnahme mit einem Modbus-Tool

Für die erste Prüfung genügt ein Modbus-TCP-Testprogramm auf einem Rechner im selben Netz. Die App antwortet auf jede Unit-ID.

  1. Verbindung und Gerät prüfen: Function Code 04, Protokolladresse 0, Anzahl 3. Erwartet: 0x4850 0x4D42 0x0001 (dezimal 18512 19778 1). Kommt eine andere Antwort oder keine, stimmen IP-Adresse oder Port 502 nicht.
  2. Kodierung bestimmen: Register 4–7 lesen (Protokolladresse 3, Anzahl 4). Die Prüfzahl zeigt die Wortreihenfolge, Register 7 die Textkodierung. Beides im Testprogramm und später in der Steuerung einstellen.
  3. Konfiguration prüfen: Register 85 lesen. Ist Bit 1 nicht gesetzt oder steht in Register 88 eine 0, sind keine Pumpen konfiguriert – Herborner Pumpen muss sie in der Cloud anlegen, und HP.CloudLink muss auf dem Gerät laufen.
  4. Pumpendaten prüfen: Die Basisadresse der Pumpe aus Register 81 berechnen und einen bekannten Wert schreiben bzw. lesen. Die Weboberfläche zeigt unter Telemetry dieselben Werte; die Gruppe Device Information enthält den Info-Block, wie ihn die Steuerung sieht.
  5. Optional: Function Code 43 lesen, sofern das Programm ihn unterstützt.

Implementierung in der Steuerung

Ablauf in Pseudocode:

beim Verbindungsaufbau:
    r = lese_input_register(adresse=0, anzahl=99)
    wenn r[0..1] != [0x4850, 0x4D42]          -> Störung "falsches Gerät"
    wenn r[2] != 1                             -> Störung "unbekannte Layout-Version"
    word_swap  = (r[3] == 0x5678)               // little: niederwertiges Wort zuerst
    kodierung  = r[6]
    basis_pumpe(i) = i * r[80]

zyklisch (z. B. 1 s):
    r = lese_input_register(adresse=0, anzahl=99)
    wenn r[85] == heartbeat_alt über 5 s       -> Störung "keine Daten"
    wenn laufzeit(r[89..90]) < laufzeit_alt    -> Neustart: Verbindungsaufbau wiederholen
    pumpen_gültig = (r[84] & 0b10) != 0

Die Indizes im Pseudocode sind Protokolladressen, also Registernummer minus 1.

Einstellungen

Die Server-Einstellungen – Port, Zykluszeit, Anfragen je Zyklus, Byte-Reihenfolge und Textkodierung – sind mit ihren Standardwerten in der Standard-Konfiguration beschrieben. Herborner Pumpen kann sie über die Cloud anpassen; HP.CloudLink übergibt die Änderung an den Modbus Connector, und die aktuelle Konfiguration wird zurück in die Cloud gemeldet. Einzelne Werte lassen sich außerdem über Umgebungsvariablen der App setzen; sie werden dabei dauerhaft übernommen.

Weboberfläche

Die Weboberfläche der App zeigt:

Ereignisse und Protokolle der App gelangen über HP.CloudLink auch in die Herborner-Cloud.

Sicherheit

Die Modbus-Schnittstelle und die Weboberfläche arbeiten ohne Anmeldung. Betreiben Sie das Gerät nur in einem vertrauenswürdigen Netz und sichern Sie den Zugang zu Port 502 und zur Weboberfläche über Firewall oder Netzwerksegmentierung ab. Jeder Modbus-Client im Netz kann die Geräteinformationen lesen, darunter eine eindeutige Kennung des Geräts.

Lizenzen

Für die Nutzung gelten die Lizenz und die Lizenzbedingungen (EULA). Die enthaltene Drittanbieter-Software ist unter Drittanbieter-Lizenzen aufgeführt.