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