Modbus / TCP Write access specs

Vereisten
Het apparaat dat toegang heeft tot het opslagsysteem, bijvoorbeeld een notebook/PC, moet rechtstreekse toegang hebben tot het IP-adres van de FEMS. Deze moet dus bijvoorbeeld in hetzelfde fysieke netwerk zijn aangesloten.
Basis Modbus/TCP
Het Modbus-protocol is een communicatieprotocol gebaseerd op een client/server-architectuur. Het werd in 1979 geïntroduceerd door Gould-Modicon voor communicatie met zijn programmeerbare logische controllers. In de industrie is Modbus uitgegroeid tot een De-Facto-Standaard vanwege het open karakter. Sinds 2007 maakt de Modbus TCP-versie deel uit van de IEC 61158-norm.
Met behulp van Modbus kunnen een client (bijv. een PC/EMS) en meerdere servers (bijv. meet- en regelsystemen, batterijopslag, PV-systemen, elektrische voertuiglaadstations) worden verbonden. Er zijn twee versies: een voor seriële interfaces (EIA-232 en EIA-485) en een voor Ethernet. In deze handleiding wordt de versie voor Ethernet beschreven, waarbij TCP/IP-pakketten worden gebruikt voor gegevensoverdracht.
Lees- en schrijftoegang is mogelijk voor de volgende objecttypen:
Objecttype |
Toegang |
Grootte |
Functiecode |
Enkele ingang/uitgang spoel |
Lezen & schrijven |
1-bit |
01/05/15 |
Enkele invoer, discrete invoer |
Lezen |
1-bit |
02 |
(Analoge) Ingang Invoerregister |
Lezen |
16-bits |
04 |
(Analoge) Ingangen/uitgangen Holding register |
Lezen & schrijven |
16-bits |
03/06/16 |
Leestoegang
Opmerking
Deze app is inbegrepen bij de standaardlevering.
De Modbus-interface is als volgt geconfigureerd:
Apparaatadres |
IP-adres van EMS (zB 192.168.0.20) |
Port |
502 |
Unit-ID |
1 |
Functiecodes |
03 (Lees holdingregisters) |
|
04 (invoerregisters lezen) |
Tabel 1. Parameter voor leestoegang
De interface biedt standaard toegang tot de kanalen van de component_sum. Toegang tot andere componenten wordt project specifiek vrijgegeven, bijvoorbeeld om bestuurbare stroomopslagsystemen of laadpalen via de interface beschikbaar maken.
Modus-tabel
U kunt de specifieke Modus-tabel voor uw systeem eenvoudig downloaden als een Excel-bestand via de online monitoring, als volgt:
Figuur 1. Open het tabblad linksboven in de online monitoring
Figuur 2. Open het tabblad “Instellingen”
Figuur 3. Installatieprofiel openen
Figuur 4. ctrlApiModbusTcp openen en op “Protocol downloaden” klikken
De belangrijkste gegevenspunten vindt u ook hier in het overzicht:
Adres |
Naam |
Type |
Waarde/beschrijving |
Eenheid |
Toegang |
Koptekst |
|
|
|
|
|
0 |
Hash van “OpenEMS” |
uint16 |
0x6201 |
|
RO |
1 |
Lengte van blok “_meta” |
uint16 |
199 |
|
RO |
2 |
OpenEMS-versie Major |
uint16 |
2020 |
|
RO |
3 |
OpenEMS-versie klein |
uint16 |
26 |
|
RO |
4 |
OpenEMS-versiepatch |
uint16 |
1 |
|
RO |
5 |
Fabrikant |
tekenreeks16 |
FENECON GmbH |
|
RO |
21 |
Fabrikantmodel |
tekenreeks16 |
OpenEMS |
|
RO |
37 |
Fabrikant Opties |
tekenreeks16 |
|
|
RO |
53 |
Fabrikantversie |
tekenreeks16 |
|
|
RO |
69 |
Serienummer van de fabrikant |
tekenreeks16 |
|
|
RO |
85 |
Fabrikant EMS-serienummer |
tekenreeks16 |
|
|
RO |
Som |
|
|
|
|
|
200 |
Component-ID |
tekenreeks16 |
_som |
|
RO |
216 |
Lengte van blok “_sum” |
uint16 |
300 |
|
RO |
220 |
Hash van “OpenemsComponent” |
uint16 |
0xb3dc |
|
RO |
221 |
Lengte van blok “OpenemsComponent” |
uint16 |
80 |
|
RO |
222 |
_som/staat |
enum16 |
0:Ok, 1:Info, 2:Waarschuwing, 3:Storing |
|
RO |
300 |
Hash van “Som” |
uint16 |
0x462b |
|
RO |
301 |
Lengte van blok “Som” |
uint16 |
220 |
|
RO |
302 |
_sum/EssSoc |
uint16 |
|
Percentage [%] |
RO |
303 |
_sum/EssActivePower |
zweven32 |
AC-zijde voeding van energieopslagsysteem. Inclusief overtollige DC-PV-productie voor hybride omvormers. Negatieve waarden voor opladen; positief voor ontslag |
Watt [W] |
RO |
305 |
Gereserveerd |
zweven32 |
|
|
RO |
307 |
Gereserveerd |
zweven32 |
|
|
RO |
309 |
_sum/EssReactivePower |
zweven32 |
|
VoltAmpereReactief [var] |
RO |
311 |
Gereserveerd |
zweven32 |
|
|
RO |
313 |
Gereserveerd |
zweven32 |
|
|
RO |
315 |
_sum/GridActivePower |
zweven32 |
Netuitwisselingskracht. Negatieve waarden voor sell-to-grid; positief voor buy-from-grid |
Watt [W] |
RO |
317 |
_sum/GridMinActivePower |
zweven32 |
|
Watt [W] |
RO |
319 |
_sum/GridMaxActivePower |
zweven32 |
|
Watt [W] |
RO |
321 |
Gereserveerd |
zweven32 |
|
|
RO |
323 |
Gereserveerd |
zweven32 |
|
|
RO |
325 |
Gereserveerd |
zweven32 |
|
|
RO |
327 |
_sum/ProductieActivePower |
zweven32 |
Totale productie; altijd positief |
Watt [W] |
RO |
329 |
_sum/ProductieMaxActivePower |
zweven32 |
|
Watt [W] |
RO |
331 |
_sum/ProductieAcActivePower |
zweven32 |
Productie uit AC-bron |
Watt [W] |
RO |
333 |
_sum/ProductieMaxAcActivePower |
zweven32 |
|
Watt [W] |
RO |
335 |
Gereserveerd |
zweven32 |
|
|
RO |
337 |
Gereserveerd |
zweven32 |
|
|
RO |
339 |
_sum/ProductieDcActueelVermogen |
zweven32 |
Productie uit DC-bron |
Watt [W] |
RO |
341 |
_sum/ProductionMaxDcActualPower |
zweven32 |
|
Watt [W] |
RO |
343 |
_som/VerbruikActiefVermogen |
zweven32 |
|
Watt [W] |
RO |
345 |
_sum/ConsumptionMaxActivePower |
zweven32 |
|
Watt [W] |
RO |
347 |
Gereserveerd |
zweven32 |
|
|
RO |
349 |
Gereserveerd |
zweven32 |
|
|
RO |
351 |
_sum/EssActiveChargeEnergy |
zweven64 |
|
Wattuur [Wh] |
RO |
355 |
_sum/EssActiveDischargeEnergy |
zweven64 |
|
Wattuur [Wh] |
RO |
359 |
_sum/GridBuyActiveEnergy |
zweven64 |
|
Wattuur [Wh] |
RO |
363 |
_sum/GridSellActiveEnergy |
zweven64 |
|
Wattuur [Wh] |
RO |
367 |
_sum/ProductieActiveEnergy |
zweven64 |
|
Wattuur [Wh] |
RO |
371 |
_sum/ProductieAcActiveEnergy |
zweven64 |
|
Wattuur [Wh] |
RO |
375 |
_sum/ProductionDcActiveEnergy |
zweven64 |
|
Wattuur [Wh] |
RO |
379 |
_sum/ConsumptieActieveEnergie |
zweven64 |
|
Wattuur [Wh] |
RO |
383 |
_sum/EssDcChargeEnergy |
zweven64 |
|
Wattuur [Wh] |
RO |
387 |
_sum/EssDcDischargeEnergy |
zweven64 |
|
Wattuur [Wh] |
RO |
391 |
_sum/EssActivePowerL1 |
zweven32 |
AC-zijde voeding van energieopslagsysteem op fase L1. Inclusief overtollige DC-PV-productie voor hybride omvormers. Negatieve waarden voor opladen; positief voor ontslag |
Watt [W] |
RO |
393 |
_sum/EssActivePowerL2 |
zweven32 |
AC-zijde voeding van energieopslagsysteem op fase L2. Inclusief overtollige DC-PV-productie voor hybride omvormers. Negatieve waarden voor opladen; positief voor ontslag |
Watt [W] |
RO |
395 |
_sum/EssActivePowerL3 |
zweven32 |
AC-zijde voeding van energieopslagsysteem op fase L3. Inclusief overtollige DC-PV-productie voor hybride omvormers. Negatieve waarden voor opladen; positief voor ontslag |
Watt [W] |
RO |
397 |
_som/GridActivePowerL1 |
zweven32 |
Netuitwisselingsvermogen op fase L1. Negatieve waarden voor sell-to-grid; positief voor buy-from-grid |
Watt [W] |
RO |
399 |
_som/GridActivePowerL2 |
zweven32 |
Netuitwisselingsvermogen op fase L2. Negatieve waarden voor sell-to-grid; positief voor buy-from-grid |
Watt [W] |
RO |
401 |
_som/GridActivePowerL3 |
zweven32 |
Netuitwisselingsvermogen op fase L3. Negatieve waarden voor sell-to-grid; positief voor buy-from-grid |
Watt [W] |
RO |
403 |
_sum/ProductieAcActivePowerL1 |
zweven32 |
Productie uit AC-bron op fase L1 |
Watt [W] |
RO |
405 |
_sum/ProductieAcActivePowerL2 |
zweven32 |
Productie uit AC-bron op fase L2 |
Watt [W] |
RO |
407 |
_sum/ProductieAcActivePowerL3 |
zweven32 |
Productie uit AC-bron op fase L3 |
Watt [W] |
RO |
409 |
_sum/ConsumptionActivePowerL1 |
zweven32 |
|
Watt [W] |
RO |
411 |
_sum/ConsumptionActivePowerL2 |
zweven32 |
|
Watt [W] |
RO |
413 |
_sum/ConsumptionActivePowerL3 |
zweven32 |
|
Watt [W] |
RO |
415 |
_sum/EssDischargePower |
zweven32 |
Werkelijk ontladingsvermogen van de batterij aan de AC-zijde van het energieopslagsysteem. Negatieve waarden voor opladen; positief voor ontslag |
Watt [W] |
RO |
417 |
_som/GridMode |
enum16 |
1: Op het elektriciteitsnet, 2: Buiten het elektriciteitsnet |
|
RO |
ess0 |
|
|
|
|
|
500 |
Component-ID |
tekenreeks16 |
ess0 |
|
RO |
516 |
Lengte van blok “ess0” |
uint16 |
580 |
|
RO |
520 |
Hash van “OpenemsComponent” |
uint16 |
0xb3dc |
|
RO |
521 |
Lengte van blok “OpenemsComponent” |
uint16 |
80 |
|
RO |
522 |
ess0/State |
enum16 |
0:Ok, 1:Info, 2:Waarschuwing, 3:Storing |
|
RO |
600 |
Hash van “SymmetricEss” |
uint16 |
0x42ee |
|
RO |
601 |
Lengte van blok “SymmetricEss” |
uint16 |
100 |
|
RO |
602 |
ess0/Soc |
uint16 |
|
Percentage [%] |
RO |
603 |
ess0/GridMode |
enum16 |
1: Op het elektriciteitsnet, 2: Buiten het elektriciteitsnet |
|
RO |
604 |
ess0/ActivePower |
zweven32 |
|
Watt [W] |
RO |
700 |
Hash van “ManagedSymmetricEss” |
uint16 |
0xa3ed |
|
RO |
701 |
Lengte van blok “ManagedSymmetricEss” |
uint16 |
100 |
|
RO |
702 |
ess0/AllowedChargePower |
zweven32 |
|
Watt [W] |
RO |
704 |
ess0/AllowedDischargePower |
zweven32 |
|
Watt [W] |
RO |
706 |
ess0/SetActivePowerEquals |
zweven32 |
|
Watt [W] |
WO |
708 |
ess0/SetReactivePowerEquals |
zweven32 |
|
VoltAmpereReactief [var] |
WO |
710 |
ess0/SetActivePowerLessOrEquals |
zweven32 |
|
Watt [W] |
WO |
712 |
ess0/SetReactivePowerLessOrEquals |
zweven32 |
|
Voltampère [VA] |
WO |
714 |
ess0/SetActivePowerGreaterOrEquals |
zweven32 |
|
Watt [W] |
WO |
716 |
ess0/SetReactivePowerGreaterOrEquals |
zweven32 |
|
Watt [W] |
WO |
800 |
Hash van “EssSymmetric” |
uint16 |
0x1352 |
|
RO |
801 |
Lengte van blok “EssSymmetric” |
uint16 |
300 |
|
RO |
Voorbeeld 1: Leestoegang tot de batterijlaadstatus met QModMaster
Hieronder wordt het lezen van de laadstatus (SoC) van de batterij met behulp van de gratis tool QModMaster als voorbeeld getoond.
De tool kan worden gedownload via de volgende link https://sourceforge.net/projects/qmodmaster/
De waarde van de laadstatus is als volgt opgeslagen:
Adres |
Naam |
Type |
Waarde/beschrijving |
Eenheid |
Toegang |
302 |
_sum/EssSoc |
uint16 |
|
Percentage [%] |
RO |
Tabel 2. Registeradres voor de laadstatus van de batterij
In QModbusMaster is de basisadressen standaard ingesteld op 1. Deze waarde moet worden gewijzigd naar 0. Anders worden de registeradressen van het systeemprofiel met 1 verschoven.
Figuur 5. Instellingen
In de Modbus TCP-instellingen moeten Slave IP en TCP-poort correct geconfigureerd zijn.
Figuur 6. Modbus TCP-instellingen
Omdat het een unit16 betreft, moet er een 16-bits woord, ofwel een register, worden gelezen. Klik na het instellen van de waarden op de optie “Lezen/Schrijven”. De gelezen waarde wordt onderaan weergegeven.
Figuur 7. Waarde lezen
De vergelijking met het onlinemonitoringssysteem bevestigt de juistheid van de gelezen waarde.
Afbeelding 8. Vergelijking met online monitoring
Het uitvoeren van andere leesbewerkingen verloopt op dezelfde manier.
Schrijftoegang
Opmerking
Deze app is niet inbegrepen in de standaardlevering. Het kan echter op elk moment achteraf worden geïnstalleerd.
De Modbus-interface is als volgt geconfigureerd:
Device adres |
IP-adres van EMS (zB 192.168.0.20) |
Port |
502 |
Unit-ID |
1 |
Functiecodes |
03 (Lees holdingregisters) |
|
04 (invoerregisters lezen) |
|
06 (Schrijf één holdingregister) |
|
16 (Schrijf meerdere holdingregisters) |
Tabel 3. Parameters voor schrijftoegang
Voorbeeld 2: Schrijftoegang tot EssActivePower met QModMaster
In het volgende voorbeeld wordt de schrijftoegang tot het instellen van EssActivePower gedemonstreerd met behulp van de gratis tool QModMaster. Hiermee kan de functie van de Controller Fix Active Power Symmetric worden gesimuleerd.
De waarde is als volgt gedefinieerd:
Adres |
Naam |
Type |
Waarde/beschrijving |
Eenheid |
Toegang |
706 |
ess0/SetActivePowerEquals |
zweven32 |
|
Watt [W] |
WO |
Tabel 4. Registeradres voor de setzen van de EssActivePower des Speichers
Opmerking
Naast het controleren van de Base Address om te zorgen dat deze op 0 is ingesteld, moet ervoor worden gezorgd dat de Endian-instelling is geselecteerd als Groot.
Figuur 9. Instellingen
Omdat het om een float32 gaat, moeten twee 16-bits woorden, oftewel twee registers, worden geschreven. In dit voorbeeld wordt geprobeerd om 4000 watt (4E+03) uit de opslag te ontladen. De waarde kan direct als een decimaal getal in het register worden ingevoerd, waarbij het gegevensformaat “Float” moet worden gekozen. Klik vervolgens op “Lezen/Schrijven” om de schrijfoperatie uit te voeren.
Figuur 10. Waarde schrijven.
De vergelijking met de online monitoring bevestigt de juistheid van de geschreven waarde.
Figuur 11. Vergelijking met online monitoring
Opmerking
De schrijfoperatie wordt alleen uitgevoerd gedurende de duur van de API-time-out. Dit is standaard ingesteld op 60 seconden, maar kan worden aangepast door de service.
Het uitvoeren van andere schrijfoperaties gebeurt op dezelfde manier.