Heat Demand

Note

A heat demand 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_demand(prosumer, t_feed_demand_c=nan, t_return_demand_c=nan, name=None, index=None, in_service=True, period=0, level=0, order=0, **kwargs)[source]

Creates a heat demand element and a controller in prosumer[“heat_demand”] and an heat demand controller

INPUT:

prosumer - The prosumer within this heat demand should be created

OPTIONAL:
t_feed_demand_c (float, default nan) - Default feed temperature [C]. Used as a

fallback when no t_feed_demand_c time-series input is mapped to the controller.

t_return_demand_c (float, default nan) - Default return temperature [C]. Used as a

fallback when no t_return_demand_c time-series input is mapped to the controller.

name (string, default None) - A custom name for this heat demand

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

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

OUTPUT:

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

EXAMPLE:

create_controlled_heat_demand(prosumer, “heat_demand1”)

Controller

Heat Demand Controller logic

Input Static Data

Parameter

Description

Unit

name

Unique name or identifier for the heat demand element.

N/A

t_feed_demand_c

Default feed temperature level used if no time-series value is provided.

Degree Celsius

t_return_demand_c

Default return temperature level used if no time-series value is provided.

Degree Celsius

in_service

True for in_service or False for out of service

boolean

Input Time Series

Parameter

Description

Unit

q_demand_kw

Demand heat power

kW

mdot_demand_kg_per_s

Demand required mass flow

kg/s

t_feed_demand_c

Demand required feed temperature level

Degree Celsius

t_return_demand_c

Demand required return temperature level

Degree Celsius

q_received_kw

Heat power already received from upstream elements (optional, for chained mappings)

kW

Output Time Series

Parameter

Description

Unit

q_received_kw

Heat power effectively received at the demand

kW

q_uncovered_kw

Uncovered heat power. Can be negative if the power provided is greater than the required power

kW

mdot_kg_per_s

Mass flow rate actually received by the demand

kg/s

t_in_c

Actual inlet temperature of the demand

Degree Celsius

t_out_c

Actual outlet temperature of the demand

Degree Celsius

Mapping

The Heat Demand Controller can be mapped using FluidMixMapping.

  • The heat demand can be used as responder for a FluidMix mapping, taking the output from another controller as its input

  • The heat demand can also be used as responder for a Generic mapping, in this case the results from another controller are mapped to the following inputs of the heat demand:

    • q_received_kw

  • No output are mapped, as the heat demand does not act as an initiator.

Model

class pandaprosumer.controller.models.heat_demand.HeatDemandController(prosumer, heat_demand_object, order=-1, level=-1, in_service=True, index=None, name=None, **kwargs)[source]

Controller for Heat Demand.

Parameters:
  • prosumer – The prosumer object

  • heat_demand_object – The heat demand object

  • order – The order of the controller

  • level – The level of the controller

  • in_service – The in-service status of the controller

  • index – The index of the controller

  • name – The name of the controller

  • kwargs – Additional keyword arguments

control_step(prosumer)[source]

Executes the control step for the controller.

Parameters:

prosumer – The prosumer object

name_class()[source]

Return the controller class identifier used in results and logging.

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 demand model take four inputs \(Q\), \(\dot{m}\), \(T_\text{feed}\) and \(T_\text{return}\)

Only three of these inputs should be provided, typically from timeseries data through a ConstProfile controller. The fourth one will be inferred from the relation

\begin{align*} Q = \dot{m} * Cp * (T_\text{feed} - T_\text{return}) \end{align*}