uniset-algorithms 0.2
SEESGroup.h
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 // ------------------------------------------------------------------------------------------