00001
00002
00003
00004 #ifndef _TRIPLEXMETER_H
00005 #define _TRIPLEXMETER_H
00006
00007 #include "powerflow.h"
00008 #include "triplex_node.h"
00009
00010 EXPORT SIMULATIONMODE interupdate_triplex_meter(OBJECT *obj, unsigned int64 delta_time, unsigned long dt, unsigned int iteration_count_val, bool interupdate_pos);
00011
00012 class triplex_meter : public triplex_node
00013 {
00014 public:
00015 complex measured_voltage[3];
00016 complex measured_current[3];
00017 double measured_real_energy;
00018 double measured_real_energy_delta;
00019 double measured_reactive_energy;
00020 double measured_reactive_energy_delta;
00021 double measured_real_max_voltage_in_interval[3];
00022 double measured_imag_max_voltage_in_interval[3];
00023 double measured_real_min_voltage_in_interval[3];
00024 double measured_imag_min_voltage_in_interval[3];
00025 double measured_avg_voltage_mag_in_interval[3];
00026 double measured_real_avg_power_in_interval;
00027 double measured_reactive_avg_power_in_interval;
00028 double measured_real_max_power_in_interval;
00029 double measured_reactive_max_power_in_interval;
00030 double measured_real_min_power_in_interval;
00031 double measured_reactive_min_power_in_interval;
00032 double measured_min_max_avg_timestep;
00033
00034 double measured_energy_delta_timestep;
00035 complex measured_power;
00036 complex indiv_measured_power[3];
00037 double measured_demand;
00038 double measured_real_power;
00039 double last_measured_real_power;
00040 double measured_reactive_power;
00041 double last_measured_reactive_power;
00042 complex tpmeter_power_consumption;
00043 bool tpmeter_interrupted;
00044 bool tpmeter_interrupted_secondary;
00045 TIMESTAMP next_time;
00046 TIMESTAMP dt;
00047 TIMESTAMP last_t;
00048
00049 #ifdef SUPPORT_OUTAGES
00050 int16 sustained_count;
00051 int16 momentary_count;
00052 int16 total_count;
00053 int16 s_flag;
00054 int16 t_flag;
00055 complex pre_load;
00056 #endif
00057
00058 double hourly_acc;
00059 double previous_monthly_bill;
00060 double previous_monthly_energy;
00061 double monthly_bill;
00062 double monthly_fee;
00063 double monthly_energy;
00064 typedef enum {
00065 BM_NONE,
00066 BM_UNIFORM,
00067 BM_TIERED,
00068 BM_HOURLY,
00069 BM_TIERED_RTP,
00070 BM_TIERED_TOU
00071 } BILLMODE;
00072 enumeration bill_mode;
00073 OBJECT *power_market;
00074 PROPERTY *price_prop;
00075 int32 bill_day;
00076 int last_bill_month;
00077 double price, last_price;
00078 double price_base, last_price_base;
00079 double tier_price[3], tier_energy[3], last_tier_price[3];
00080
00081 int check_prices();
00082
00083 private:
00084 double process_bill(TIMESTAMP t1);
00085 double previous_energy_total;
00086 double last_measured_real_energy;
00087 double last_measured_reactive_energy;
00088 complex last_measured_voltage[3];
00089 complex last_measured_max_voltage[3];
00090 complex last_measured_min_voltage[3];
00091 double last_measured_max_real_power;
00092 double last_measured_min_real_power;
00093 double last_measured_max_reactive_power;
00094 double last_measured_min_reactive_power;
00095 double last_measured_avg_real_power;
00096 double last_measured_avg_reactive_power;
00097 double last_measured_avg_voltage[3];
00098 TIMESTAMP last_delta_timestamp;
00099 TIMESTAMP last_stat_timestamp;
00100 TIMESTAMP start_timestamp;
00101 TIMESTAMP interval_dt;
00102 int interval_count;
00103
00104 public:
00105 static CLASS *oclass;
00106 static CLASS *pclass;
00107 public:
00108 triplex_meter(MODULE *mod);
00109 inline triplex_meter(CLASS *cl=oclass):triplex_node(cl){};
00110 int create(void);
00111 int init(OBJECT *parent);
00112 TIMESTAMP presync(TIMESTAMP t0);
00113 TIMESTAMP sync(TIMESTAMP t0);
00114 TIMESTAMP postsync(TIMESTAMP t0, TIMESTAMP t1);
00115 int isa(char *classname);
00116
00117 SIMULATIONMODE inter_deltaupdate_triplex_meter(unsigned int64 delta_time, unsigned long dt, unsigned int iteration_count_val, bool interupdate_pos);
00118 int kmldata(int (*stream)(const char*,...));
00119 };
00120
00121 #endif // _TRIPLEXMETER_H