Modbus / TCP Write access specs

Deze handleiding is bedoeld voor het beschrijven van de lees-/schrijftoegang tot een Fenecon stroomopslagsysteem via de Modbus/TCP API. Eerst worden de basisprincipes van het protocol beschreven. Vervolgens wordt de werking van de interface uitgelegd.

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.