00001
00010 #ifndef _metrics_H
00011 #define _metrics_H
00012
00013 #include <stdarg.h>
00014 #include "gridlabd.h"
00015
00016 #define CLEARBUF(BUF,N) ((char*)(memset((BUF),0,((N)>>3)+1)))
00017 #define MAKEBUF(N) CLEARBUF((char*)(malloc(((N)>>3)+1)),N)
00018 #define BITSET(BUF,N) (((BUF)[(N)>>3])|=(1<<((N)&7)))
00019 #define BITCLR(BUF,N) (((BUF)[(N)>>3])&=(~(1<<((N)&7))))
00020 #define COUNTBITS(BUF,N) (0 )
00021
00022 typedef struct s_event {
00023 TIMESTAMP event_time;
00024
00025 int32 Ni;
00026 int32 Nmi;
00027 double ri;
00028 struct s_event *next;
00029 } EVENT;
00030
00031 typedef struct s_totals {
00032 int16 period;
00033 int16 Nevents;
00034 int16 IMe;
00035 int32 CI;
00036 double CMI;
00037 int32 CN;
00038 int32 CNT;
00039 int32 CNK;
00040 double CMIE;
00041 double IMi;
00042 double LT;
00043 double Li;
00044 double LDI;
00045 } TOTALS;
00046
00047 class metrics {
00048
00049 public:
00050 double SAIFI;
00051 double SAIDI;
00052 double CAIDI;
00053 double CAIFI;
00054 double CTAIDI;
00055 double ASAI;
00056 double ASIFI;
00057 double ASIDI;
00058 double CEMI;
00059 double MAIFI;
00060 double MAIFIE;
00061 double CEMSMI;
00062 int32 n;
00063 private:
00064 EVENT *eventlist;
00065 FINDLIST *customers;
00066 FINDLIST *interrupted;
00067 FILE *fp;
00068 TOTALS totals;
00069 bool first_year;
00070 public:
00071 static double major_event_threshold;
00072 static bool report_event_log;
00073 public:
00074 char report_file[1024];
00075 public:
00076
00077 metrics(MODULE *module);
00078 int create(void);
00079 int init(OBJECT *parent);
00080 TIMESTAMP postsync(TIMESTAMP t0, TIMESTAMP t1);
00081 public:
00082 static CLASS *oclass;
00083 static metrics *defaults;
00084 public:
00085 inline EVENT *get_event() { return eventlist;};
00086 inline void add_event(EVENT *p) { p->next=eventlist; eventlist=p;};
00087 inline void del_event() {if (eventlist) eventlist=eventlist->next;};
00088 OBJECT *start_event(EVENT *pEvent, FINDLIST *objectlist,const char *targets,char *event_values,char *old_values, int size);
00089 void end_event(OBJECT* obj, const char *targets, char *old_values);
00090 private:
00091 double asai(void);
00092 double ctaidi(void);
00093 double caidi(void);
00094 double saidi(void);
00095 double caifi(void);
00096 double saifi(void);
00097 double asifi(void);
00098 double asidi(void);
00099 double cemi(void);
00100 double maifi(void);
00101 double maifie(void);
00102 double cemsmi(void);
00103 };
00104
00105 #endif
00106