00001 #ifndef _LOAD_TRACKER_H
00002 #define _LOAD_TRACKER_H
00003
00004 #include "gridlabd.h"
00005
00006 class load_tracker
00007 {
00008 private:
00009 typedef union
00010 {
00011 double* d;
00012 complex* c;
00013 int16* i16;
00014 int32* i32;
00015 int64* i64;
00016 } VALUEPOINTER;
00017 public:
00018 static CLASS *oclass;
00019 public:
00020 typedef enum {REAL=0,IMAGINARY=1,MAGNITUDE=2,ANGLE=3};
00021 enumeration operation;
00022 public:
00023 OBJECT* target;
00024 char256 target_prop;
00025 double full_scale;
00026 double setpoint;
00027 double deadband;
00028 double damping;
00029 double output;
00030 double feedback;
00031 private:
00032 PROPERTYTYPE type;
00033 VALUEPOINTER pointer;
00034 private:
00035 void update_feedback_variable();
00036 public:
00037
00038 inline const char *get_name(void) const { static char tmp[64]; OBJECT *obj=OBJECTHDR(this); return obj->name?obj->name:(sprintf(tmp,"%s:%d",obj->oclass->name,obj->id)>0?tmp:"(unknown)");};
00039
00040 inline unsigned int get_id(void) const {return OBJECTHDR(this)->id;};
00041 public:
00042 load_tracker(MODULE *mod);
00043 inline load_tracker(CLASS *cl=oclass){};
00044 int create(void);
00045 int init(OBJECT *parent);
00046 TIMESTAMP presync(TIMESTAMP t0);
00047 TIMESTAMP postsync(TIMESTAMP t0, TIMESTAMP t1);
00048 TIMESTAMP sync(TIMESTAMP t0);
00049 int isa(char *classname);
00050 };
00051
00052 #endif // _LOAD_TRACKER_H
00053