00001
00002
00003
00004
00005
00006
00007
00008 #ifndef _METRICS_COLLECTOR_H_
00009 #define _METRICS_COLLECTOR_H_
00010
00011 #include "tape.h"
00012 #include "../powerflow/link.h"
00013
00014 #define MTR_MIN_REAL_POWER 0
00015 #define MTR_MAX_REAL_POWER 1
00016 #define MTR_AVG_REAL_POWER 2
00017 #define MTR_MIN_REAC_POWER 3
00018 #define MTR_MAX_REAC_POWER 4
00019 #define MTR_AVG_REAC_POWER 5
00020 #define MTR_REAL_ENERGY 6
00021 #define MTR_REAC_ENERGY 7
00022 #define MTR_BILL 8
00023 #define MTR_MIN_VLL 9
00024 #define MTR_MAX_VLL 10
00025 #define MTR_AVG_VLL 11
00026 #define MTR_MIN_VLN 12
00027 #define MTR_MAX_VLN 13
00028 #define MTR_AVG_VLN 14
00029 #define MTR_MIN_VUNB 15
00030 #define MTR_MAX_VUNB 16
00031 #define MTR_AVG_VUNB 17
00032 #define MTR_ABOVE_A_DUR 18
00033 #define MTR_ABOVE_A_CNT 19
00034 #define MTR_BELOW_A_DUR 20
00035 #define MTR_BELOW_A_CNT 21
00036 #define MTR_ABOVE_B_DUR 22
00037 #define MTR_ABOVE_B_CNT 23
00038 #define MTR_BELOW_B_DUR 24
00039 #define MTR_BELOW_B_CNT 25
00040 #define MTR_BELOW_10_DUR 26
00041 #define MTR_BELOW_10_CNT 27
00042 #define MTR_ARRAY_SIZE 28
00043
00044 #define HSE_MIN_HVAC_LOAD 0
00045 #define HSE_MAX_HVAC_LOAD 1
00046 #define HSE_AVG_HVAC_LOAD 2
00047 #define HSE_MIN_TOTAL_LOAD 3
00048 #define HSE_MAX_TOTAL_LOAD 4
00049 #define HSE_AVG_TOTAL_LOAD 5
00050 #define HSE_MIN_AIR_TEMP 6
00051 #define HSE_MAX_AIR_TEMP 7
00052 #define HSE_AVG_AIR_TEMP 8
00053 #define HSE_AVG_DEV_COOLING 9
00054 #define HSE_AVG_DEV_HEATING 10
00055 #define HSE_ARRAY_SIZE 11
00056
00057 #define WH_MIN_ACTUAL_LOAD 0
00058 #define WH_MAX_ACTUAL_LOAD 1
00059 #define WH_AVG_ACTUAL_LOAD 2
00060 #define WH_ARRAY_SIZE 3
00061
00062 #define INV_MIN_REAL_POWER 0
00063 #define INV_MAX_REAL_POWER 1
00064 #define INV_AVG_REAL_POWER 2
00065 #define INV_MIN_REAC_POWER 3
00066 #define INV_MAX_REAC_POWER 4
00067 #define INV_AVG_REAC_POWER 5
00068 #define INV_ARRAY_SIZE 6
00069
00070 #define FDR_MIN_REAL_POWER 0
00071 #define FDR_MAX_REAL_POWER 1
00072 #define FDR_AVG_REAL_POWER 2
00073 #define FDR_MED_REAL_POWER 3
00074 #define FDR_MIN_REAC_POWER 4
00075 #define FDR_MAX_REAC_POWER 5
00076 #define FDR_AVG_REAC_POWER 6
00077 #define FDR_MED_REAC_POWER 7
00078 #define FDR_REAL_ENERGY 8
00079 #define FDR_REAC_ENERGY 9
00080 #define FDR_MIN_REAL_LOSS 10
00081 #define FDR_MAX_REAL_LOSS 11
00082 #define FDR_AVG_REAL_LOSS 12
00083 #define FDR_MED_REAL_LOSS 13
00084 #define FDR_MIN_REAC_LOSS 14
00085 #define FDR_MAX_REAC_LOSS 15
00086 #define FDR_AVG_REAC_LOSS 16
00087 #define FDR_MED_REAC_LOSS 17
00088 #define FDR_ARRAY_SIZE 18
00089
00090 #define CAP_OPERATION_CNT 0
00091 #define CAP_ARRAY_SIZE 1
00092
00093 #define REG_OPERATION_CNT 0
00094 #define REG_ARRAY_SIZE 1
00095
00096 EXPORT void new_metrics_collector(MODULE *);
00097
00098 #ifdef __cplusplus
00099
00100
00101 typedef struct vol_violation {
00102 double durationViolation;
00103 int countViolation;
00104 } VIOLATION_RETURN;
00105
00106
00107 class metrics_collector{
00108 public:
00109 static metrics_collector *defaults;
00110 static CLASS *oclass, *pclass;
00111
00112 metrics_collector(MODULE *);
00113 int create();
00114 int init(OBJECT *);
00115 int isa(char *);
00116 TIMESTAMP postsync(TIMESTAMP, TIMESTAMP);
00117
00118 int commit(TIMESTAMP);
00119
00120 public:
00121 double interval_length_dbl;
00122
00123 friend class metrics_collector_writer;
00124
00125 private:
00126
00127 int read_line(OBJECT *obj);
00128 int write_line(TIMESTAMP, OBJECT *obj);
00129
00130 void copyHistories(int from, int to);
00131 void interpolateHistories(int idx, TIMESTAMP t);
00132 void interpolate(double array[], int idx, double denom, double top);
00133 double findMax(double array[], int size);
00134 double findMin(double array[], int size);
00135 double findAverage(double array[], int size);
00136 double findMedian(double array[], int size);
00137 vol_violation findOutLimit(bool firstCall, double array[], bool checkAbove, double limitVal, int size);
00138
00139
00140 static PROPERTY *propTriplexNomV;
00141 static PROPERTY *propTriplexV1;
00142 static PROPERTY *propTriplexV2;
00143 static PROPERTY *propTriplexV12;
00144 static PROPERTY *propTriplexBill;
00145 static PROPERTY *propTriplexPrice;
00146 static PROPERTY *propTriplexP;
00147 static PROPERTY *propTriplexQ;
00148
00149 static PROPERTY *propMeterNomV;
00150 static PROPERTY *propMeterVa;
00151 static PROPERTY *propMeterVb;
00152 static PROPERTY *propMeterVc;
00153 static PROPERTY *propMeterVab;
00154 static PROPERTY *propMeterVbc;
00155 static PROPERTY *propMeterVca;
00156 static PROPERTY *propMeterBill;
00157 static PROPERTY *propMeterPrice;
00158 static PROPERTY *propMeterP;
00159 static PROPERTY *propMeterQ;
00160
00161 static PROPERTY *propHouseLoad;
00162 static PROPERTY *propHouseHVAC;
00163 static PROPERTY *propHouseAirTemp;
00164 static PROPERTY *propHouseCoolSet;
00165 static PROPERTY *propHouseHeatSet;
00166
00167 static PROPERTY *propWaterLoad;
00168
00169 static PROPERTY *propInverterS;
00170
00171 static PROPERTY *propCapCountA;
00172 static PROPERTY *propCapCountB;
00173 static PROPERTY *propCapCountC;
00174
00175 static PROPERTY *propRegCountA;
00176 static PROPERTY *propRegCountB;
00177 static PROPERTY *propRegCountC;
00178
00179 static PROPERTY *propSwingSubLoad;
00180 static PROPERTY *propSwingMeterS;
00181
00182 TIMESTAMP next_write;
00183 TIMESTAMP start_time;
00184 bool write_now;
00185 bool first_write;
00186 bool log_me;
00187 void log_to_console(char *msg, TIMESTAMP t);
00188 static bool log_set;
00189
00190 char* parent_string;
00191 char parent_name[256];
00192 double *metrics;
00193
00194
00195 double *real_power_array;
00196 double *reactive_power_array;
00197 double *voltage_vll_array;
00198 double *voltage_vln_array;
00199 double *voltage_unbalance_array;
00200 double price_parent;
00201 double bill_parent;
00202
00203
00204 double *total_load_array;
00205 double *hvac_load_array;
00206 double *air_temperature_array;
00207 double *dev_cooling_array;
00208 double *dev_heating_array;
00209
00210
00211 double *wh_load_array;
00212 char waterheaterName[256];
00213
00214
00215
00216
00217
00218
00219 double *count_array;
00220
00221
00222 FINDLIST *link_objects;
00223 double *real_power_loss_array;
00224 double *reactive_power_loss_array;
00225
00226 TIMESTAMP interval_length;
00227 int vector_length;
00228 TIMESTAMP *time_array;
00229
00230 int curr_index;
00231 };
00232
00233 #endif // C++
00234
00235 #endif // _METRICS_COLLECTOR_H_
00236
00237