00001
00002
00003
00004 #ifndef _CAPACITOR_H
00005 #define _CAPACITOR_H
00006
00007 #include "powerflow.h"
00008 #include "node.h"
00009
00010 #define TSNVRDBL 9223372036854775808.0
00011 EXPORT SIMULATIONMODE interupdate_capacitor(OBJECT *obj, unsigned int64 delta_time, unsigned long dt, unsigned int iteration_count_val, bool interupdate_pos);
00012
00013 class capacitor : public node
00014 {
00015 public:
00016 typedef enum {MANUAL=0, VAR=1, VOLT=2, VARVOLT=3, CURRENT=4} CAPCONTROL;
00017 typedef enum {OPEN=0, CLOSED=1} CAPSWITCH;
00018 typedef enum {BANK=0, INDIVIDUAL=1} CAPCONTROL2;
00019
00020 set pt_phase;
00021 set phases_connected;
00022 double voltage_set_high;
00023 double voltage_set_low;
00024 double voltage_center;
00025 double voltage_deadband;
00026 double VAr_set_high;
00027 double VAr_set_low;
00028 double VAr_center;
00029 double VAr_deadband;
00030 double current_set_high;
00031 double current_set_low;
00032 double current_center;
00033 double current_deadband;
00034 double capacitor_A;
00035 double capacitor_B;
00036 double capacitor_C;
00037 enumeration control;
00038 enumeration control_level;
00039 enumeration switchA_state;
00040 enumeration switchB_state;
00041 enumeration switchC_state;
00042 CAPSWITCH prev_switchA_state;
00043 CAPSWITCH prev_switchB_state;
00044 CAPSWITCH prev_switchC_state;
00045 CAPSWITCH init_switchA_state;
00046 CAPSWITCH init_switchB_state;
00047 CAPSWITCH init_switchC_state;
00048 int16 switchA_changed;
00049 int16 switchB_changed;
00050 int16 switchC_changed;
00051 double prev_time;
00052 double cap_switchA_count;
00053 double cap_switchB_count;
00054 double cap_switchC_count;
00055 OBJECT *RemoteSensor;
00056 OBJECT *SecondaryRemote;
00057 double time_delay;
00058 double dwell_time;
00059 double lockout_time;
00060 void toggle_bank_status(bool des_status);
00061
00062 bool cap_sync_fxn(double time_value);
00063 int cap_prePost_fxn(double time_value);
00064 double cap_postPost_fxn(double result, double time_value);
00065 SIMULATIONMODE inter_deltaupdate_capacitor(unsigned int64 delta_time, unsigned long dt, unsigned int iteration_count_val, bool interupdate_pos);
00066
00067 protected:
00068 double time_to_change;
00069 double dwell_time_left;
00070 double lockout_time_left_A;
00071 double lockout_time_left_B;
00072 double lockout_time_left_C;
00073 double last_time;
00074 double cap_nominal_voltage;
00075
00076 public:
00077 int create(void);
00078 TIMESTAMP postsync(TIMESTAMP t0);
00079 TIMESTAMP sync(TIMESTAMP t0);
00080 capacitor(MODULE *mod);
00081 inline capacitor(CLASS *cl=oclass):node(cl){};
00082 int init(OBJECT *parent);
00083 int isa(char *classname);
00084 int kmldata(int (*stream)(const char*,...));
00085
00086 private:
00087 complex cap_value[3];
00088 CAPSWITCH switchA_state_Next;
00089 CAPSWITCH switchB_state_Next;
00090 CAPSWITCH switchC_state_Next;
00091 CAPSWITCH switchA_state_Req_Next;
00092 CAPSWITCH switchB_state_Req_Next;
00093 CAPSWITCH switchC_state_Req_Next;
00094 CAPSWITCH switchA_state_Prev;
00095 CAPSWITCH switchB_state_Prev;
00096 CAPSWITCH switchC_state_Prev;
00097 double VArVals[3];
00098 double CurrentVals[3];
00099 bool NotFirstIteration;
00100 OBJECT *RNode;
00101 OBJECT *RLink;
00102 bool Iteration_Toggle;
00103 bool NR_cycle_cap;
00104 bool deltamode_reiter_request;
00105 gld_property *RNode_voltage[3];
00106 gld_property *RNode_voltaged[3];
00107 gld_property *RLink_indiv_power_in[3];
00108 gld_property *RLink_current_in[3];
00109 FUNCTIONADDR RLink_calculate_power_fxn;
00110
00111 public:
00112 static CLASS *pclass;
00113 static CLASS *oclass;
00114 };
00115
00116 #endif // _CAPACITOR_H