|
uniset-algorithms 0.2
|
00001 00005 // ------------------------------------------------------------------------------------------ 00006 #ifndef SEESGroup_H_ 00007 #define SEESGroup_H_ 00008 // ------------------------------------------------------------------------------------------ 00009 #include <list> 00010 #include <vector> 00011 #include <map> 00012 #include <UniSetTypes.h> 00013 #include <UniversalInterface.h> 00014 #include <PassiveTimer.h> 00015 #include <Trigger.h> 00016 #include <DebugStream.h> 00017 #include <SandClock.h> 00018 // ------------------------------------------------------------------------------------------ 00019 class SEES; 00020 typedef std::list<SEES*> SESList; 00021 // ------------------------------------------------------------------------------------------ 00023 class SEESGroup 00024 { 00025 public: 00026 00027 SEESGroup( int num, const std::string name="" ); 00028 ~SEESGroup(); 00029 00030 friend std::ostream& operator<<(std::ostream& os, SEESGroup& g ); 00031 friend std::ostream& operator<<(std::ostream& os, SEESGroup* g ); 00032 friend std::ostream& print_chain(std::ostream& os, SEESGroup* g ); 00033 00034 inline int getNumber(){ return gnum; } 00035 inline std::string getName(){ return myname; } 00036 00037 long getP(); 00038 long getU(); 00039 long getF(); 00040 bool isUdev(); 00041 bool isFdev(); 00042 long getReservPower(); 00044 void step(); 00045 void update(); 00046 00048 void updatePowerInfo(); 00049 00050 void requiredReserv( bool set ); 00051 bool isNoReserv(); 00052 bool isReadyForLoading(); 00053 void addGroup( SEESGroup* gr ); 00054 bool add( SEES* ses ); 00055 bool del( SEES* ses ); 00056 void clear(); 00057 00059 bool isProtection(); 00060 00065 int acceptQG( int num )throw(UniSetTypes::NameNotFound); 00066 00068 void releaseQG( int num )throw(UniSetTypes::NameNotFound); 00069 00074 bool canRun( int num )throw(UniSetTypes::NameNotFound); 00075 00076 SEES* get( int num ); 00077 inline SESList getSESList(){ return lst; } 00078 00080 struct ReservInfo 00081 { 00082 ReservInfo(): 00083 ses(0), 00084 waitRunning(false), 00085 waitStopping(false) 00086 { 00087 ptPause.setTiming(0); 00088 trChangeState.hi(true); 00089 } 00090 00091 ReservInfo(SEES* s): 00092 ses(s), 00093 waitRunning(false), 00094 waitStopping(false) 00095 { 00096 ptPause.setTiming(0); 00097 trChangeState.hi(true); 00098 } 00099 00100 SEES* ses; 00101 PassiveTimer ptPause; 00102 Trigger trChangeState; 00103 bool waitRunning; 00104 bool waitStopping; 00105 }; 00106 00107 typedef std::list<ReservInfo> RList; 00108 00109 static DebugStream dlog; 00110 static void init_dlog( DebugStream& dlog ); 00111 00112 inline void setReservStatePause(int s){ reservStatePause = s; } 00113 inline void setCommandTimeout( int s ){ reservCommandTimeout = s; } 00114 inline void setReservTime( int s ){ checkReservTime = s; } 00115 inline void setMaxWorkingDG( int s ){ maxWorkingDG = s; } 00116 int getWorkingDG(); 00117 00118 inline void setFdev( int f_min_, int f_max_, int f_msec ) 00119 { 00120 f_min = f_min_; f_max=f_max_; 00121 if( f_msec > 0 ) 00122 sc_Fdev.run(f_msec); 00123 } 00124 00125 inline void setUdev( int u_min_, int u_max_, int U_msec ) 00126 { 00127 U_min = u_min_; U_max=u_max_; 00128 if( U_msec > 0 ) 00129 sc_Udev.run(U_msec); 00130 } 00131 00132 protected: 00133 SEESGroup(); 00134 00135 UniSetTypes::uniset_mutex lstMutex; 00136 int gnum; 00137 std::string myname; 00138 // ---------------------------------------------------------------------------------- 00139 int qf_locked; 00140 // ---------------------------------------------------------------------------------- 00141 SESList lst; 00142 // ---------------------------------------------------------------------------------- 00143 // Управление резервом 00144 SEES* leader; 00145 RList rlst; 00146 // ---------------------------------------------------------------------------------- 00147 int maxWorkingDG; 00148 int countWorkingDG; 00149 UniSetTypes::uniset_mutex maxrunMutex; 00150 // ---------------------------------------------------------------------------------- 00153 static void update( RList& rlist, ReservInfo& ri ); 00154 00156 void reserv( bool set ); 00157 00159 void checkReserv(); 00160 00162 bool resetReserv(); 00163 00165 void makeReservList(); 00166 00170 void checkAloneWorking(); 00171 00173 void updateCounters(); 00174 00175 int reservStatePause; 00176 int reservCommandTimeout; 00177 int checkReservTime; 00178 PassiveTimer ptCheckReserv; 00179 00180 // пороги отклонения частоты и напряжения 00181 int f_min; 00182 int f_max; 00183 int U_min; 00184 int U_max; 00185 SandClock sc_Fdev; 00186 SandClock sc_Udev; 00187 bool U_dev; 00188 bool f_dev; 00190 private: 00191 }; 00192 // ------------------------------------------------------------------------------------------ 00193 #endif // SEESGroup_H_ 00194 // ------------------------------------------------------------------------------------------
1.7.4