Skip to content

AmpiFarm in OpenEMS

To have a useful implementation of the AmpiFarm in OpenEMS we make a distinction between two purposes:

  1. Manage the decisions and following actions from Controllers scheduled in OpenEMS
  2. Operate the physical devices to act on the decisions and actions from said controllers

Besides this notion, it is also desirable to maintain a consistent interface between the different AmpiFarm devices. The AmpiFarm's code architecture reflects the desire to keep these two purposes separate and share the same interface between the devices.

A class diagram for the different components involved in managing the AmpiFarm in the EMS and on the physical level is presented.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
classDiagram
    class AmpiFarm
    <<Abstract>> AmpiFarm
    class AmpiFarmAlphaComponent
    class AmpiFarmBetaComponent
    class AmpiFarmOneComponent
    class Controller 
    class AmpiFarmManagedSymmetricESS
    <<Interface>> AmpiFarmManagedSymmetricESS
    class IAmpiFarmAlphabetComponent
    <<Interface>> IAmpiFarmAlphabetComponent
    class IAmpiFarmDecimalComponent
    <<Interface>> IAmpiFarmDecimalComponent
    class IAmpiFarm
    <<Interface>> IAmpiFarm
    class AbstractAmpiFarmComponent
    <<Abstract>> AbstractAmpiFarmComponent
    Controller --|> AmpiFarmManagedSymmetricESS : uses
    AmpiFarmManagedSymmetricESS <|-- AbstractAmpiFarmComponent : implements
    AmpiFarmAlphaComponent --|> IAmpiFarmAlphabetComponent : implements
    AmpiFarmBetaComponent --|> IAmpiFarmAlphabetComponent : implements
    AmpiFarmOneComponent --|> IAmpiFarmDecimalComponent : implements
    AbstractAmpiFarmComponent <|-- AmpiFarmAlphaComponent : extends
    AbstractAmpiFarmComponent <|-- AmpiFarmBetaComponent : extends
    AbstractAmpiFarmComponent <|-- AmpiFarmOneComponent : extends
    AmpiFarmOneComponent --|> AmpiFarmDecimal : has
    AmpiFarmAlphaComponent --|> AmpiFarmAlphabet : has
    AmpiFarmBetaComponent --|> AmpiFarmAlphabet : has
    AmpiFarmAlphabet --|> AmpiFarm : extends
    AmpiFarmDecimal --|> AmpiFarm : extends
    AmpiFarm --|> IAmpiFarm : implements

The top side of this diagram represents the energy management function, through the AmpiFarmManagedSymetricESS interface. What actions do we need the devices to take for us.

The bottom represents the device management side of things, or how the individual components actually should be told to take the actions we require them to from an energy management perspective.