Heat Storage

Note

A Heat Storage consists of an element and a controller. The element defines it’s physical parameters, while the controller governs the operational logic.

The create_controlled function creates both and connects them.

Create Controlled Function

pandaprosumer.create_controlled_heat_storage(prosumer, q_capacity_kwh=0.0, name=None, index=None, in_service=True, level=0, order=0, init_soc=0.0, period=0, **kwargs)[source]

Creates a heat storage element in the prosumer and a heat storage controller.

INPUT:

prosumer - The prosumer within which this heat storage should be created.

q_capacity_kwh (float) - The thermal energy capacity of the heat storage [kWh].

OPTIONAL:

name (string, default None) - The name for this heat storage controller.

index (int, default None) - Force a specified ID if it is available. If None, the index one higher than the highest already existing index is selected.

in_service (boolean, default True) - True for in_service or False for out of service.

level (int, default 0) - The level of the controller.

order (int, default 0) - The order of the controller.

init_soc (float, default 0.) - The initial state of charge of the heat storage.

period (int, default 0) - Index of the period, default is 0.

kwargs - Additional keyword arguments.

OUTPUT:

index (int) - The unique ID of the created heat storage controller.

EXAMPLE:

create_controlled_heat_storage(prosumer, q_capacity_kwh=10, name=”heat_storage_1”)

Controller

heat storage logic

Input Static Data

Parameter

Description

Unit

name

Custom name for the Storage

N/A

in_service

Indicates if the Storage is in service

N/A

q_capacity_kwh

Capacity in kilowatt-hours

kWh

Input Time Series

Parameter

Description

Unit

q_received_kw

Received heat power

kW

Output Time Series

Parameter

Description

Unit

soc

State of Charge

%

q_delivered_kw

Delivered heat power

kW

Mapping

The Simple Storage model model can be mapped using GenericMapping.

Model

class pandaprosumer.controller.models.HeatStorageController(prosumer, heat_storage_object, order, level, init_soc=0.0, in_service=True, index=None, **kwargs)[source]

Controller for heat storage systems.

control_step(prosumer)[source]

Executes the control step for the controller.

Parameters:

prosumer – The prosumer object

q_to_deliver_kw(prosumer)[source]

Calculates the heat to deliver in kW.

Parameters:

prosumer – The prosumer object

Returns:

Heat to deliver in kW

q_to_receive_kw(prosumer)[source]

Calculates the heat to receive in kW.

Parameters:

prosumer – The prosumer object

Returns:

Heat to receive in kW

The heat storage model computes the heat received and delivered by the storage element, and updates the state of charge (SOC) accordingly.

\begin{align*} E_\text{received} &= \dot{Q}_\text{received} \cdot \frac{\Delta t}{3600} \\ E_\text{delivered} &= \dot{Q}_\text{delivered} \cdot \frac{\Delta t}{3600} \\ \text{SOC}_{t+1} &= \frac{E_\text{stored}}{Q_\text{capacity}} = \frac{E_\text{stored, t} + E_\text{received} - E_\text{delivered}}{Q_\text{capacity}} \\ \end{align*}

The SOC is adjusted each timestep to reflect the energy balance within the storage unit. If the requested heat exceeds available storage, the delivery is capped to the actual available energy.