The house_e object implements a single family home. More...
Enumerations | |
enum | IMPLICITENDUSEFLAGS { IEU_LIGHTS = 0x00000001, IEU_PLUGS = 0x00000002, IEU_OCCUPANCY = 0x00000004, IEU_DISHWASHER = 0x00000100, IEU_MICROWAVE = 0x00000200, IEU_FREEZER = 0x00010000, IEU_REFRIGERATOR = 0x00020000, IEU_RANGE = 0x00040000, IEU_EVCHARGER = 0x00080000, IEU_WATERHEATER = 0x00100000, IEU_CLOTHESWASHER = 0x01000000, IEU_DRYER = 0x02000000, IEU_ALL = 0x03170303 } |
enum | IMPLICITENDUSESOURCE { IES_ELCAP1990 = 0, IES_ELCAP2010 = 1, IES_RBSA2014 = 2 } |
Functions | |
CIRCUIT * | house_e::attach (OBJECT *obj, double limit, int is220=false, enduse *pEnduse=NULL) |
Attaches an end-use object to a house_e panel The attach() method automatically assigns an end-use load to the first appropriate available circuit. | |
house_e::house_e (MODULE *module) | |
House object constructor: Registers the class and publishes the variables that can be set by the user. | |
int | house_e::init (OBJECT *parent) |
Map circuit variables to meter. | |
int | house_e::init_climate (void) |
Checks for climate object and maps the climate variables to the house_e object variables. | |
TIMESTAMP | house_e::postsync (TIMESTAMP t0, TIMESTAMP t1) |
Removes load contributions from parent object. | |
TIMESTAMP | house_e::presync (TIMESTAMP t0, TIMESTAMP t1) |
Updates the aggregated power from all end uses, calculates the HVAC kWh use for the next synch time. | |
TIMESTAMP | house_e::sync (TIMESTAMP t0, TIMESTAMP t1) |
Updates the total internal gain and synchronizes with the system equipment load. | |
TIMESTAMP | house_e::sync_thermostat (TIMESTAMP t0, TIMESTAMP t1) |
The PLC control code for house_e thermostat. | |
void | house_e::update_system (double dt=0) |
HVAC load synchronizaion is based on the equipment capacity, COP, solar loads and total internal gain from end uses. | |
Variables | |
static enumeration | house_e::implicit_enduse_source = IES_ELCAP1990 |
source of implicit enduses (e.g., ELCAP1990, ELCAP2010, RBSA2014) | |
static set | house_e::implicit_enduses_active = IEU_ALL |
implicit enduses that are to be activated |
The house_e object implements a single family home.
The house_e only includes the heating/cooling system and the power panel. All other end-uses must be explicitly defined and attached to the panel using the house_e::attach() method.
Residential panels use a split secondary transformer:
-----)||(------------------ 1 <-- 120V )||( 120V ^ 1puV )||(----------- 3(N) 240V <-- 0V )||( 120V v -----)||(------------------ 2 <-- 120V
120V objects are assigned alternatively to circuits 1-3 and 2-3 in the order in which they call attach. 240V objects are assigned to circuit 1-2
Circuit breakers will open on over-current with respect to the maximum current given by load when house_e::attach() was called. After a breaker opens, it is reclosed within an average of 5 minutes (on an exponential distribution). Each time the breaker is reclosed, the breaker failure probability is increased. The probability of failure is always 1/N where N is initially a large number (e.g., 100). N is progressively decremented until it reaches 1 and the probability of failure is 100%.
The Equivalent Thermal Parameter (ETP) approach is used to model the residential loads and energy consumption. Solving the ETP model simultaneously for T_{air} and T_{mass}, the heating/cooling loads can be obtained as a function of time.
In the current implementation, the HVAC equipment is defined as part of the house_e and attached to the electrical panel with a 50 amp/220-240V circuit.
The use of implicit enduses is controlled globally by the implicit_enduse global variable. All houses in the system will employ the same set of global enduses, meaning that the loadshape is controlled by the default schedule.
The original concept for ETP was developed by Rob Pratt and Todd Taylor around 1990. The first derivation and implementation of the solution was done by Ross Guttromson and David Chassin for PDSS in 2004.
Contract terms are defined according to which contract type is being used. For subsidized and fixed price contracts, the terms are defined using the following format:
period=[YQMWDH];fee=[$/period];energy=[c/kWh];
Time-use contract terms are defined using
period=[YQMWDH];fee=[$/period];offpeak=[c/kWh];onpeak=[c/kWh];hours=[int24mask];
When TOU includes critical peak pricing, use
period=[YQMWDH];fee=[$/period];offpeak=[c/kWh];onpeak=[c/kWh];hours=[int24mask]>;critical=[$/kWh];
RTP is defined using
period=[YQMWDH];fee=[$/period];bid_fee=[$/bid];market=[name];
Demand pricing uses
period=[YQMWDH];fee=[$/period];energy=[c/kWh];demand_limit=[kW];demand_price=[$/kW];
enum IMPLICITENDUSEFLAGS |
IEU_LIGHTS |
implicit lights load |
IEU_PLUGS |
implicit plugs load |
IEU_OCCUPANCY |
implicit occupancy load |
IEU_DISHWASHER |
implicit dishwasher load |
IEU_MICROWAVE |
implicit microwave load |
IEU_FREEZER |
implicit freezer load |
IEU_REFRIGERATOR |
implicit refrigerator load |
IEU_RANGE |
implicit cooking load |
IEU_EVCHARGER |
implicit evcharger load |
IEU_WATERHEATER |
implicit waterheater load |
IEU_CLOTHESWASHER |
implicit clotheswasher load |
IEU_DRYER |
implicit dryer load |
IEU_ALL |
all (needed to filter) |
enum IMPLICITENDUSESOURCE |
CIRCUIT * house_e::attach | ( | OBJECT * | obj, | |
double | breaker_amps, | |||
int | is220 = false , |
|||
enduse * | pLoad = NULL | |||
) | [inherited] |
Attaches an end-use object to a house_e panel The attach() method automatically assigns an end-use load to the first appropriate available circuit.
obj | object to attach | |
breaker_amps | breaker capacity (in Amps) | |
is220 | 0 for 120V, 1 for 240V load | |
pLoad | reference to load structure |
Definition at line 1774 of file house_e.cpp.
house_e::house_e | ( | MODULE * | mod | ) | [inherited] |
House object constructor: Registers the class and publishes the variables that can be set by the user.
Sets default randomized values for published variables.
Definition at line 163 of file house_e.cpp.
References IES_ELCAP1990, IES_ELCAP2010, IES_RBSA2014, IEU_CLOTHESWASHER, IEU_DISHWASHER, IEU_DRYER, IEU_EVCHARGER, IEU_FREEZER, IEU_LIGHTS, IEU_MICROWAVE, IEU_OCCUPANCY, IEU_PLUGS, IEU_RANGE, IEU_REFRIGERATOR, and IEU_WATERHEATER.
int house_e::init | ( | OBJECT * | parent | ) | [inherited] |
Map circuit variables to meter.
Initalize house_e and HVAC model properties, and internal gain variables.
Definition at line 1270 of file house_e.cpp.
int house_e::init_climate | ( | void | ) | [inherited] |
Checks for climate object and maps the climate variables to the house_e object variables.
Currently Tout, RHout and solar flux data from TMY files are used. If no climate object is linked, then Tout will be set to 74 degF, RHout is set to 75% and solar flux will be set to zero for all orientations.
Definition at line 772 of file house_e.cpp.
TIMESTAMP house_e::sync | ( | TIMESTAMP | t0, | |
TIMESTAMP | t1 | |||
) | [inherited] |
Updates the total internal gain and synchronizes with the system equipment load.
Also synchronizes the voltages and current in the panel with the meter.
Definition at line 2529 of file house_e.cpp.
TIMESTAMP house_e::sync_thermostat | ( | TIMESTAMP | t0, | |
TIMESTAMP | t1 | |||
) | [inherited] |
The PLC control code for house_e thermostat.
The heat or cool mode is based on the house_e air temperature, thermostat setpoints and deadband. This function will update T<mode>{On,Off} as necessary to maintain the setpoints.
Definition at line 2740 of file house_e.cpp.
void house_e::update_system | ( | double | dt = 0 |
) | [inherited] |
HVAC load synchronizaion is based on the equipment capacity, COP, solar loads and total internal gain from end uses.
The modeling approach is based on the Equivalent Thermal Parameter (ETP) method of calculating the air and mass temperature in the conditioned space. These are solved using a dual decay solver to obtain the time for next state change based on the thermostat set points. This synchronization function updates the HVAC equipment load and power draw.
Definition at line 1979 of file house_e.cpp.