FEMS App Modbus/TCP lesend
1. Einleitung
Sehr geehrte Kundin, sehr geehrter Kunde,
vielen Dank, dass Sie sich für die »FEMS App Modbus/TCP lesend« entschieden haben. Gerne können Sie uns Ihre Anregungen mitteilen, damit wir die Qualität unserer Produkte noch weiter verbessern können.
2. Installation der App
Mit der Bestellung der »FEMS App Modbus/TCP lesend« haben Sie einen 16-stelligen Lizenzschlüssel erhalten. Mittels diesem Lizenzschlüssel können Sie die App eigenständig im FEMS App Center einlösen.
Eine Anleitung zur Vorgehensweise finden Sie hier.
Die Schnittstelle für den Lesezugriff ist bereits ab Werk inklusive und vorinstalliert. |
3. Modbus/TCP - Lesezugriff
Diese Anleitung dient der Beschreibung des Lesezugriffs auf ein FENECON Stromspeichersystem mittels Modbus/TCP API. Zunächst werden Grundlagen zum Protokoll beschrieben. Anschließend wird die Funktionsweise der Schnittstelle erklärt.
|
3.1. Voraussetzungen
Das auf das Stromspeichersystem zugreifende Gerät (z.B. Notebook/PC) muss direkten Zugriff auf die IP-Adresse des FEMS haben - also z. B. im gleichen physischen Netzwerk angeschlossen sein.
3.2. Grundlagen Modbus/TCP
Das Modbus-Protokoll ist ein Kommunikationsprotokoll, das auf einer Client/Server-Architektur basiert. Es wurde 1979 von Gould-Modicon für die Kommunikation mit seinen speicherprogrammierbaren Steuerungen ins Leben gerufen. In der Industrie hat sich der Modbus zu einem De-facto-Standard entwickelt, da es sich um ein offenes Protokoll handelt. Seit 2007 ist die Version Modbus TCP Teil der Norm IEC 61158.
Mittels Modbus können ein Client (z. B. ein PC/EMS) und mehrere Server (z. B. Mess- und Regelsysteme, Batteriespeicher, PV-Anlage, Ladestation E-Auto) verbunden werden. Es gibt zwei Versionen: Eine für die serielle Schnittstelle (EIA-232 und EIA-485) und eine für Ethernet. In dieser Anleitung wird die Version für Ethernet beschrieben. Hierbei werden TCP/IP-Pakete verwendet, um die Daten zu übermitteln.
Lese- und Schreibzugriffe sind auf folgende Objekttypen möglich:
Objekttyp |
Zugriff |
Größe |
Funktionscode |
Einzelner Ein-/Ausgang „Coil“ |
Lesen & Schreiben |
1-bit |
01 / 05 / 15 |
Einzelner Eingang „Discrete Input“ |
nur Lesen |
1-bit |
02 |
(analoge) Eingänge „Input Register“ |
nur Lesen |
16-bits |
04 |
(analoge) Ein-/Ausgänge „Holding Register“ |
Lesen & Schreiben |
16-bits |
03 / 06 / 16 |
|
Die Modbus-Schnittstelle ist folgendermaßen konfiguriert:
Geräteadresse |
IP-Adresse des EMS (z.B. 192.168.0.20) |
Port |
502 |
Unit-ID |
1 |
Function-Codes |
03 (Read Holding Registers) |
04 (Read Input Registers) |
Die Schnittstelle ermöglicht standardmäßig Zugriff auf die Kanäle der Komponente _sum. Der Zugriff auf weitere Komponenten wird projektspezifisch freigegeben - um z. B. ansteuerbare Stromspeichersysteme oder Ladesäulen über die Schnittstelle freizugeben.
3.3. Modbus-Tabelle
Die individuelle Modbus-Tabelle für Ihr System können Sie bequem über das Online-Monitoring als Excel-Datei wie folgt herunterladen:
Die wichtigsten Datenpunkte finden Sie auch hier in der Schnellübersicht:
Address (Adresse) |
Name (Name) |
Type (Typ) |
Value/Description (Wert/Beschreibung) |
Unit (Einheit) |
Access (Zugang) |
Sum |
|||||
200 |
Component-ID |
string16 |
_sum |
RO |
|
222 |
State |
enum16 |
0:Ok, 1:Info, 2:Warning, 3:Fault |
RO |
|
302 |
EssSoc |
uint16 |
Ladezustand [0 - 100] |
Percent [%] |
RO |
303 |
EssActivePower |
float32 |
AC-seitige Wirkleistung des Speichers. Inklusive überschüssiger DC-Stromerzeugung bei Hybrid-Wechselrichter. |
Watt [W] |
RO |
309 |
EssReactivePower |
float32 |
AC-seitige Blindleistung des Speichers |
VoltAmpereReactive [var] |
RO |
315 |
GridActivePower |
float32 |
Wirkleistung am Netzanschlusspunkt |
Watt [W] |
RO |
317 |
GridMinActivePower |
float32 |
Minimale Wirkleistung Netzanschluss/ Beschränkung der Netzbeladung |
Watt [W] |
RO |
319 |
GridMaxActivePower |
float32 |
Maximale Wirkleistung Netzanschluss/ Beschränkung des Netzbezuges |
Watt [W] |
RO |
327 |
ProductionActivePower |
float32 |
Wirkleistung der gesamten Stromerzeugung (immer positiv) |
Watt [W] |
RO |
329 |
ProductionMaxActivePower |
float32 |
Maximale Wirkleistung der gesamten Stromerzeugung (immer positiv) |
Watt [W] |
RO |
331 |
ProductionAcActivePower |
float32 |
Wirkleistung der AC-Stromerzeugung |
Watt [W] |
RO |
339 |
ProductionDcActualPower |
float32 |
Wirkleistung der DC-Stromerzeugung |
Watt [W] |
RO |
343 |
ConsumptionActivePower |
float32 |
Wirkleistung Stromverbrauch |
Watt [W] |
RO |
345 |
ConsumptionMaxActivePower |
float32 |
Maximale Wirkleistung Stromverbrauch |
Watt [W] |
RO |
351 |
EssActiveChargeEnergy |
float64 |
Kumulierte Gesamtstrommenge der AC-seitigen Speicherbeladung. Inklusive überschüssiger DC-Stromerzeugung bei Hybrid-Wechselrichter. |
WattHours [Wh] |
RO |
355 |
EssActiveDischargeEnergy |
float64 |
Kumulierte Gesamtstrommenge der Speicherentladung |
WattHours [Wh] |
RO |
359 |
GridBuyActiveEnergy |
float64 |
Kumulierte Strommenge des Netzbezuges |
WattHours [Wh] |
RO |
363 |
GridSellActiveEnergy |
float64 |
Kumulierte Strommenge der Netzbeladung |
WattHours [Wh] |
RO |
367 |
ProductionActiveEnergy |
float64 |
Kumulierte Strommenge der gesamten Erzeugung |
WattHours [Wh] |
RO |
371 |
ProductionAcActiveEnergy |
float64 |
Kumulierte Strommenge der AC-Erzeugung |
WattHours [Wh] |
RO |
375 |
ProductionDcActiveEnergy |
float64 |
Kumulierte Strommenge der DC-Erzeugung |
WattHours [Wh] |
RO |
379 |
ConsumptionActiveEnergy |
float64 |
Kumulierter Stromverbrauch |
WattHours [Wh] |
RO |
383 |
EssDcChargeEnergy |
float64 |
Kumulierte DC-Strommenge der Speicherbeladung |
WattHours [Wh] |
RO |
387 |
EssDcDischargeEnergy |
float64 |
Kumulierte DC-Strommenge der Speicherentladung |
WattHours [Wh] |
RO |
415 |
EssDischargePower |
float32 |
Tatsächliche AC-seitige Wirkleistung des Speichers. |
Watt [W] |
RO |
417 |
GridMode |
enum16 |
1:On-Grid, 2:Off-Grid |
RO |
|
Speichersystem |
|||||
500 |
Component-ID |
string16 |
ess0 |
RO |
|
522 |
State |
enum16 |
0:Ok, 1:Info, 2:Warning, 3:Fault |
RO |
|
602 |
Soc |
uint16 |
Ladezustand |
Percent [%] |
RO |
603 |
GridMode |
enum16 |
1:On-Grid, 2:Off-Grid |
RO |
|
604 |
ActivePower |
float32 |
Be- bzw. Entladeleistung (Negative Werte entsprechen Speicherbeladung - Positive Werte Speicherentladung) |
Watt [W] |
RO |
608 |
MinCellVoltage |
float32 |
Minimale Zellspannung |
Millivolt [mV] |
RO |
610 |
MaxCellVoltage |
float32 |
Maximale Zellspannung |
Millivolt [mV] |
RO |
612 |
MinCellTemperature |
float32 |
Minimale Zelltemperatur |
DegreeCelsius [C] |
RO |
614 |
MaxCellTemperature |
float32 |
Maximale Zelltemperatur |
DegreeCelsius [C] |
RO |
702 |
Minimum Power Set-Point |
float32 |
Minimaler Leistungssollwert |
Watt [W] |
RO |
704 |
Maximum Power Set-Point |
float32 |
Maximaler Leistungssollwert |
Watt [W] |
RO |
706 |
SetActivePowerEquals |
float32 |
Vorgabe Be- bzw. Entladeleistung |
Watt [W] |
WO |
708 |
SetReactivePowerEquals |
float32 |
Vorgabe Blindleistung |
VoltAmpereReactive [var] |
WO |
710 |
SetActivePowerLessOrEquals |
float32 |
Vorgabe maximaler Entladeleistung |
Watt [W] |
WO |
712 |
SetReactivePowerLessOrEquals |
float32 |
Vorgabe maximaler Blindleistung |
VoltAmpereReactive [var] |
WO |
714 |
SetActivePowerGreaterOrEquals |
float32 |
Vorgabe maximaler Beladeleistung |
Watt [W] |
WO |
716 |
SetReactivePowerGreaterOrEquals |
float32 |
Vorgabe minimaler Blindleistung |
VoltAmpereReactive [var] |
WO |
Die Register für Blindleistungsvorgaben sind aktuell für Home-Systeme nicht nutzbar. |
3.4. Beispiel 1: Lesezugriff Batterieladezustand mit QModMaster
Im Folgenden soll der Lesezugriff auf den Ladezustand (SoC) der Batterie mittels des kostenlosen Tools QModMaster exemplarisch gezeigt werden.
Das Tool kann unter folgendem Link heruntergeladen werden:
Online: https://sourceforge.net/projects/qmodmaster/
Der Wert des Ladezustands ist wie folgt hinterlegt (s. oben):
Address |
Name |
Type |
Value/Description |
Unit |
Access |
302 |
_sum/EssSoc |
uint16 |
Percent [%] |
RO |
Standardmäßig wird in QModbusMaster die Base Address auf 1 gesetzt. Dieser Wert ist auf 0 zu ändern. Anderenfalls sind die Registeradressen aus dem Anlagenprofil um 1 verschoben.
Unter Modbus TCP Settings müssen Slave IP und TCP Port richtig konfiguriert sein.
Da es sich um einen unit16 handelt, muss ein 16-bit Wort, also ein Register, ausgelesen werden. Nach Setzen der Werte auf den Menüpunkt "Read/Write" klicken. Der gelesene Wert erscheint unten.
Der Abgleich mit dem Online-Monitoring bestätigt die Korrektheit des gelesenen Wertes.
Die Durchführung anderer Leseoperationen erfolgt analog.