1. Kommunikationskanal
- Kanaltyp: TCP/IP
- Physikalische Schnittstelle: RJ45-Ethernet-Kabelanschluss / WLAN-Verbindung
2. TCP/IP-Kommunikation
2.1 Netzwerkkonfiguration
- Netzwerkmodus: Dynamische IP-Adressvergabe über DHCP
- Fallback-Modus: In der App konfigurierte statische IP-Adresse
Im DHCP-Modus fordert das Gerät nach dem Einschalten automatisch eine IP-Adresse vom DHCP-Server an. Sobald eine Adresse erfolgreich bezogen wurde, sendet das Gerät seine Informationen per mDNS im Broadcast-Verfahren. Der Name des Broadcast-Dienstes lautet:
_nexblue_modbus._tcp.local
Dies kann automatisch von EMS-Systemen erkannt werden, die mDNS unterstützen, wie beispielsweise Home Assistant und Tibber.
2.2 Kommunikationsanschluss
2.3 Geräte-ID
- Standardwert: 200
- Einstellbarer Bereich: 1–247
Bei Modbus TCP ist die Geräte-ID eine logische Kennung, die aus Gründen der RTU-Kompatibilität beibehalten wird. Sie verwendet denselben Konfigurationsparameter wie die im RTU-Modus verwendete Slave-Adresse.
2.4 Registerdefinitionen
2.4.1 Registertypen
| Registrierungstyp | Funktion | Funktionscode | Beschreibung |
| Eingaberegister | Eingaberegister lesen | 0x04 | Schreibgeschützte Register, die Messwerte oder Statusinformationen wie Spannung, Strom, Leistung, Temperatur, kumulierte Energie usw. zurückgeben. |
| Bestandsregister | Lese-Halte-Register | 0x03 | Lese-/Schreibregister. Der Master kann die aktuelle Konfiguration, die aktuellen Grenzwerte, den Modusstatus usw. auslesen. |
| Bestandsregister | Einzelnes Halteregister schreiben | 0x06 | Der Master gibt einen einzelnen Konfigurationsparameter oder Befehl ein, beispielsweise die Einstellung für den maximalen Strom oder den Start bzw. Stopp des Ladevorgangs. |
| Bestandsregister | Mehrere Halteregister schreiben | 0x10 | Der Master schreibt mehrere aufeinanderfolgende Register gleichzeitig, was für Sammelaktualisierungen von Konfigurationen oder strukturierten Parametergruppen genutzt wird. |
Diese vier sind die grundlegenden Funktionscodes, die von der Norm IEC 61131-3, der Norm EN 61107 und der ISO-Modbus-Spezifikation anerkannt werden und standardmäßig von fast allen Mastern, SPSen und EMS-Systemen unterstützt werden.
2.4.2 Planung der Registeradressen (Adresszuordnung)
| Grundsatz | Beschreibung |
| Länge | Das Adressfeld in einem Modbus-Frame ist eine 16-Bit-Ganzzahl ohne Vorzeichen. |
| Schichtweise Aufteilung | Aufteilung nach Funktion: Identifikation → Stationsebene → Pro Anschluss. Die Logik sollte klar und leicht erweiterbar sein. |
| Einheitlicher Ausgangspunkt | Alle Register verwenden logische Adressen. Die logische Adressierung beginnt in der Regel bei 0. In diesem Dokument werden sowohl das dezimale als auch das hexadezimale Format angegeben. |
| Ausrichtungsregel | 32-Bit-Daten müssen an einer geraden Adresse beginnen, um ein Überschreiten von Registergrenzen zu vermeiden. |
| Reservierter Platz für Erweiterungen | Jeder Bereich enthält Lücken, damit in zukünftigen Versionen Felder hinzugefügt werden können, ohne die Kompatibilität zu beeinträchtigen. |
| Zeichenkodierung | Jedes Register ist 2 Byte groß. Zeichenketten haben eine feste Länge und werden für ungenutzte Bytes nicht mit 0x00 aufgefüllt. |
| Byte-/Wortreihenfolge | Die Byte-Reihenfolge bei Einzelregistern ist Big-Endian. Bei Daten mit mehreren Registern wird die Little-Endian-Wortreihenfolge DCBA verwendet. |
| Zugriffsmethoden | Für die Eingabe wird 0x04 verwendet. Die Halteregister werden mit 0x03 gelesen und mit 0x06 (einmal) oder 0x10 (mehrfach) beschrieben. |
2.4.3 Identifikation, Version und Zeit (Eingabe, 0x04)
| Adresse | Name | Typ | Einheit | Zugang | Beschreibung |
| 0000–0007 / 0x0000–0x0007 | Marke | STRING(16) | — | RO | 2 Byte pro Register, UTF-8/ASCII. |
| 0008–0015 / 0x0008–0x000F | Modell | STRING(16) | — | RO | Gerätemodell. |
| 0016–0027 / 0x0010–0x001B | Seriennummer | STRING(24) | — | RO | Seriennummer des Geräts. |
| 0028–0035 / 0x001C–0x0023 | Firmware-Version | STRING(16) | — | RO | Zum Beispiel: 04.00.19. |
| 0036 / 0x0024 | Modbus-Tabellenversion | UINT16 | — | RO | Zuordnung der Versionsnummer, zum Beispiel 0x0100. |
| 0037 / 0x0025 | Anzahl der Anschlüsse | UINT16 | — | RO | Anzahl der Anschlüsse: 1 oder 2. |
| 0038–0039 / 0x0026–0x0027 | Datum | UINT32 | JJJJMMTT | RO | 32-Bit-Ausrichtung auf gerade Zahlen. Beispiel: 20251202. |
| 0040–0041 / 0x0028–0x0029 | Zeit | UINT32 | HHMMSS | RO | Beispiel: 155630 bedeutet 15:56:30. |
| 0042 / 0x002A | Zeitzone | UINT16 | Minuten | RO | Beispiel: UTC+2 → +120. |
| 0044 | Hardware-Version | STRING(16) | — | RO | Hardware-Version. |
| 0043–0099 | Reserviert | — | — | — | Für zukünftige Identifikationszwecke, Zertifikate, Fertigungsinformationen usw. reserviert. |
2.4.4 Echtzeit-Status und -Messung (Eingang, 0x04)
| Adresse | Name | Typ | Einheit | Zugang | Beschreibung |
| 0100 / 0x0064 | Chargepoint-Status | UINT16 | — | RO | - 0: Verfügbar
- 1: Vorbereitung
- 2: Aufladen
- 3: Ausgesetzte EVSE
- 4: Ausgesetzt (EV)
- 5: Abschlussarbeiten
- 6: Reserviert
- 7: Nicht verfügbar
- 8: Fehlerhaft
|
| 0102–0103 / 0x0066–0x0067 | Aktuelle L1 | FLOAT32 | A | RO | 32-Bit-Ausrichtung auf gerade Werte. |
| 0104–0105 / 0x0068–0x0069 | Aktuelles L2 | FLOAT32 | A | RO | — |
| 0106–0107 / 0x006A–0x006B | Aktuelles L3 | FLOAT32 | A | RO | — |
| 0108–0109 / 0x006C–0x006D | Spannung L1-N | FLOAT32 | V | RO | — |
| 0110–0111 / 0x006E–0x006F | Spannung L2-N | FLOAT32 | V | RO | — |
| 0112–0113 / 0x0070–0x0071 | Spannung L3-N | FLOAT32 | V | RO | — |
| 0114–0115 / 0x0072–0x0073 | Phasenwinkel L1 | FLOAT32 | ° | RO | Phasenwinkel bezogen auf L1-N. |
| 0116–0117 / 0x0074–0x0075 | Phasenwinkel L2 | FLOAT32 | ° | RO | Phasenwinkel bezogen auf L1-N. |
| 0118–0119 / 0x0076–0x0077 | Phasenwinkel L3 | FLOAT32 | ° | RO | Phasenwinkel bezogen auf L1-N. |
| 0120–0121 / 0x0078–0x0079 | Wirkleistung L1 | FLOAT32 | W | RO | — |
| 0122–0123 / 0x007A–0x007B | Active Power L2 | FLOAT32 | W | RO | — |
| 0124–0125 / 0x007C–0x007D | Wirkleistung L3 | FLOAT32 | W | RO | — |
| 0126–0127 / 0x007E–0x007F | Gesamtwirkleistung | FLOAT32 | W | RO | — |
| 0128–0129 / 0x0080–0x0081 | Sitzungsenergie | FLOAT32 | kWh | RO | Aktuelle Sitzung. |
| 0130–0133 / 0x0082–0x0085 | Lebenslange Energie | UINT64 | Wh | RO | Kumulative Energie. 64-Bit, 4 Register. |
| 0134–0135 / 0x0086–0x0087 | Ausweichstrom | FLOAT32 | A | RO | Der Fallback-Strom wird über NexBlue oder die Cloud eingestellt. |
| 0136–0137 / 0x0088–0x0089 | Maximaler Ladestrom | FLOAT32 | A | RO | Der maximale Ladestrom wird über NexBlue oder die Cloud eingestellt. |
| 0138 / 0x008A | Phasenladung | UINT16 | — | RO | - 0: Adaptiv
- 1: Einphasenbetrieb erzwingen
- 2: Dreiphasenbetrieb
|
| 0137–0399 / 0x0088–0x018F | Reserviert | — | — | — | Für Spannung, Leistungsfaktor, Frequenz, Phasenleistung usw. vorgesehen. |
2.4.5 Steuerung und Sicherheit (Holding, Lesen 0x03 / Schreiben 0x06 oder 0x10)
Hinweise: Wenn die Wechselstromversorgung des Ladegeräts unterbrochen und wiederhergestellt wird, werden automatisch die Standardwerte wiederhergestellt, und die Werte müssen erneut eingegeben werden.
| Adresse | Name | Typ | Einheit | Zugang | Beschreibung |
| 1000–1001 / 0x03E8–0x03E9 | Strombegrenzung | FLOAT32 | A | RW | Strombegrenzung auf Stations-Ebene. Standardwert: 16 A. Einstellbereich: 0–32 A. |
| 1002–1003 / 0x03EA–0x03EB | Ausweichgrenze | FLOAT32 | A | RW | Der Fallback-Strom für die Trennung kann nur auf Werte zwischen 0 und 16 eingestellt werden. Werte unter 6 werden als 0 behandelt. |
| 1004–1005 / 0x03EC–0x03ED | Fallback-Zeitlimit | UINT32 | s | RW | Schwellenwert für das Heartbeat-Timeout. Standardwert: 5 Minuten. Mindestwert: 30 Sekunden. Höchstwert: 30 Minuten. |
| 1006 / 0x03EE | IF_START | UINT16 | — | RW | - Start-/Stopp-Steuerung
- 0: STOP
- 1: START
|
| 1007 / 0x03EF | Laufzeit-Phasenmodus | UINT16 | — | RW | Werte: - 0: Adaptiv
- 1: Einphasenbetrieb erzwingen
- 2: Dreiphasenbetrieb
Schaltbedingungen: - Empfohlenes Mindestintervall zwischen den Phasenwechseln: 10 Minuten
- Maximal 2 Phasenschalter innerhalb eines Zeitraums von einer Stunde
- Maximal 6 Phasenschalter während eines einzelnen Ladevorgangs
|
| 1008–1999 | Reserviert | — | — | — | Für Erweiterungen reserviert. |
2.4.6 Alarme und Fehler (Fehler / Warnung)
| Adresse | Name | Typ | Einheit | Zugang | Beschreibung |
| 0400 / 0x0190 | Fehler-Bitsatz | UINT16 | — | RO | - Bit 0: CP-Spannung abnormal
- Bit 1: Phasenleitungsableitung
- Bit 2: Stromabweichung / Überstrom
- Bit 3: Spannungsfehler / Überspannung oder Unterspannung
- Bit 4: Temperaturabweichung / zu hoch oder zu niedrig
- Bit 5: Relais klemmt
- Bit 6: RCD-Selbsttest fehlgeschlagen
- Bit 7: Kurzschluss der CP-Diode
- Bit 8: PEN offen
- Bit9: PE-Leckage
- Bit10: PE offen
- Bit11: PP-Fehler
- Bit 12–15: reserviert
|
| 0401 / 0x0191 | Warn-Bitmuster | UINT16 | — | RO | - Bit 0: Fehler am Zählerchip
- Bit 1: Fehler bei der Kommunikation zwischen den Platinen
- Bit 2: RFID-HF-Fehler
- Bit 3: 868 RF-Fehler
- Bit 4: Fehler im 4G-Modul
- Bit 5: Abdeckung offen – Fehler
- Bit 6: reserviert
- Bit 7: TN-System – Phasenausfall, Störung
- Bit 8: IT-neutraler Überstrom
- Bit9: Netzstörung
- Bit10: MID-Modus
- Bit 11–15: reserviert
|
| 0402 / 0x0192 | Warte-Bitsatz | UINT16 | — | RO | - Bit 0: Ausweichlösung, da CT offline ist
- Bit 1: Ausweichbetrieb, da Hauptgerät offline ist
- Bit 2: angehalten aufgrund eines Fehlers mit geringem Schweregrad / Ladestrom des Ladeprofils beträgt 0 über OCPP
- Bit 3: Der Host reduziert den Strom während des Ladevorgangs
- Bit 4: Erste Anfrage gesendet, aber der Host hat noch nicht geantwortet
- Bit 5: Schutz vor Lastabwurf aktiv
- Bit 6: Durch Modbus ausgelöster Fallback
- Bit 6–15: reserviert
|
Anhang
Funktionscodes
Ein Funktionscode in Modbus gibt an, welchen Vorgang der Master am Slave ausführen möchte. Jeder Frame enthält einen 1-Byte-Funktionscode.
| Hex | Bedeutung | Ziel |
| 0x01 | Spulen auslesen | Bit-Ausgänge |
| 0x02 | Diskrete Eingänge auslesen | Biteingänge |
| 0x03 | Holding-Register lesen | 16-Bit |
| 0x04 | Eingaberegister lesen | 16-Bit |
| 0x05 | „Single Coil“ schreiben | Bit |
| 0x06 | Einzelnes Halteregister schreiben | 16-Bit |
| 0x0F | Mehrere Spulen schreiben | Bit |
| 0x10 | Mehrere Halteregister schreiben | 16-Bit |
Übersicht über gängige Modbus-Datentypen
| Datentyp | Verwendete Register | Bitbreite | Typ C | Bedeutung und Verwendung | Typische Beispiele |
| UINT16 | 1 | 16-Bit | uint16_t | Vorzeichenlose Ganzzahl | Statuscodes, Aufzählungslisten, Zähler, Anzahl der Anschlüsse. |
| INT16 | 1 | 16-Bit | int16_t | Vorzeichenbehaftete Ganzzahl | Temperatur, Offsets, Zeitzone. |
| UINT32 | 2 | 32-Bit | uint32_t | Vorzeichenlose lange Ganzzahl | Zeitstempel, Energieerfassung, Sekundenzähler. |
| INT32 | 2 | 32-Bit | int32_t | Vorzeichenbehaftete lange Ganzzahl | Leistung, Richtungswerte. |
| FLOAT32 | 2 | 32-Bit | float | Fließkommazahl mit einfacher Genauigkeit, IEEE 754. | Strom, Spannung, Leistung, Energie usw. |
| UINT64 | 4 | 64-Bit | uint64_t | Sehr große ganze Zahl | Gesamtenergie, kumulierte Messung. |
| STRING[n] | n/2 | n × 8 Bit | char[] | Textinformationen | Marke, Modell, Seriennummer, Versionsnummer. |