|
uniset-algorithms
0.2
|
00001 00114 // ------------------------------------------------------------------------------------------ 00115 #ifndef SEESControl_H_ 00116 #define SEESControl_H_ 00117 // ------------------------------------------------------------------------------------------ 00118 #include <list> 00119 #include <vector> 00120 #include <map> 00121 #include <ObjectsManager_LT.h> 00122 #include <TriggerOR.h> 00123 #include <TriggerOutput.h> 00124 #include <Trigger.h> 00125 #include "SEESMessages.h" 00126 #include "AutomatMessages.h" 00127 #include "APSLamp.h" 00128 #include "SEESControl_SK.h" 00129 #include "SEESGroup.h" 00130 #include "ASensor.h" 00131 #include "PriorityController.h" 00132 #include "UnionGroups.h" 00133 // ------------------------------------------------------------------------------------------ 00134 class SEES; 00135 class Automat; 00136 00151 class SEESControl: 00152 public SEESControl_SK 00153 { 00154 public: 00155 SEESControl( int num, const std::string sname, xmlNode* node=UniSetTypes::conf->getNode("SEESControl") ); 00156 virtual ~SEESControl(); 00157 00158 bool isAlone( int num ); 00159 bool acceptQG( int num ); 00160 void releaseQG( int num ); 00162 bool canRun( int num ); 00164 friend std::ostream& operator<<(std::ostream& os, SEESControl& am ); 00165 friend std::ostream& operator<<(std::ostream& os, SEESControl* am ); 00166 00167 enum Timers 00168 { 00169 tmUpdatePowerInfo, 00170 tmOffTimerBeg 00171 }; 00172 00174 enum StructureObjectTypes 00175 { 00176 soUnknown, 00177 soSEESGroup, 00178 soAutomat, 00179 soASensor 00180 }; 00181 00183 struct StructureObject 00184 { 00185 StructureObject( UnionGroups* group ): 00186 type(soSEESGroup), 00187 group(group), 00188 avt(0), 00189 asens(0) 00190 {} 00191 00192 StructureObject( Automat* avt ): 00193 type(soAutomat), 00194 group(0), 00195 avt(avt), 00196 asens(0) 00197 {} 00198 00199 StructureObject( ASensor* s ): 00200 type(soASensor), 00201 group(0), 00202 avt(0), 00203 asens(s) 00204 {} 00205 00206 StructureObjectTypes type; 00207 UnionGroups* group; 00208 Automat* avt; 00209 ASensor* asens; 00210 00211 friend std::ostream& operator<<(std::ostream& os, StructureObject& o ); 00212 friend std::ostream& operator<<(std::ostream& os, StructureObject* o ); 00213 }; 00214 00215 typedef std::list<StructureObject> StructureObjectList; 00216 00217 struct Structure 00218 { 00219 Structure(){} 00220 00221 StructureObjectList lst; 00222 00223 void addGroup( UnionGroups* group ); 00224 void addAutomat( Automat* avt ); 00225 void addASensor( ASensor* asens ); 00226 00227 }; 00228 00229 friend std::ostream& operator<<(std::ostream& os, Structure* s ); 00230 friend std::ostream& operator<<(std::ostream& os, const Structure& s ); 00231 00232 static DebugStream dlog; 00233 static void init_dlog( DebugStream& dlog ); 00234 00235 protected: 00236 SEESControl(); 00237 00238 virtual void step(); 00239 void processingMessage( UniSetTypes::VoidMessage *msg ); 00240 void sensorInfo( UniSetTypes::SensorMessage *sm ); 00241 void timerInfo( UniSetTypes::TimerMessage *tm ); 00242 void seesInfo( SEESMessage *sm ); 00243 void automatInfo( AutomatMessage* m ); 00244 virtual void askSensors( UniversalIO::UIOCommand cmd ); 00245 00246 void command( UniSetTypes::ObjectId id, bool st ); 00247 00248 void setControl( bool state ); 00249 bool checkSESProtection(); 00250 void checkReservPower(); 00251 void updatePowerInfo(); 00252 void updateStructure(); 00253 void updateGroupData(); 00254 00255 private: 00256 void init(); 00257 void buildSESList( xmlNode* confnode ); 00258 void buildAutomatList( xmlNode* confnode ); 00259 void buildOFFList( xmlNode* confnode ); 00260 void buildStructure( xmlNode* confnode ); 00261 void buildGroup( UniXML_iterator& it ); 00262 void buildAutomat( UniXML_iterator& it ); 00263 void buildASensor( UniXML_iterator& it ); 00264 00265 int findAutomat( const std::string name ); 00266 SEES* findSESByName( const std::string name ); 00267 Automat* findAutomatByName( const std::string name ); 00268 00269 PriorityController* prior; 00270 00272 TriggerOutput<SEESControl, UniSetTypes::ObjectId, bool>* msg; 00273 00274 // ---------------------------------------------------------------------------------- 00275 int maxWorkingDG; 00278 // ---------------------------------------------------------------------------------- 00279 typedef std::list<SEES*> SEESList; 00280 SEESList seslist; 00281 // ---------------------------------------------------------------------------------- 00282 GroupList grouplist; 00283 UniSetTypes::uniset_mutex grMutex; 00284 int qf_locked; 00285 // ---------------------------------------------------------------------------------- 00286 Structure sesStructure; 00287 // ---------------------------------------------------------------------------------- 00288 typedef std::list<ASensor*> ASensorList; 00289 ASensorList asenslist; 00290 // ---------------------------------------------------------------------------------- 00291 bool sesProtection; 00292 // static void printLockedList( SESMap& slst ); 00293 int checkReservTime; 00294 int reservStatePause; 00295 int reservCommandTimeout; 00298 // ---------------------------------- 00299 // Управление автоматами 00300 struct AInfo 00301 { 00302 AInfo():avt(0),pwr(0),name(""){} 00303 Automat* avt; 00304 int pwr; 00305 std::string name; 00306 }; 00307 00308 typedef std::vector<AInfo> AList; 00309 AList alst; 00310 00311 struct OffInfo 00312 { 00313 OffInfo():a(-1),b(-1),off_msec(0), 00314 tmrRunning(false), 00315 prepare_mid(UniSetTypes::DefaultObjectId), 00316 mid(UniSetTypes::DefaultObjectId) 00317 {} 00318 00319 int a; // работавший источник (будет отключён) 00320 int b; // подключённый источник 00321 int off_msec; // время до автоматического отключения 00322 bool tmrRunning; 00323 UniSetTypes::ObjectId prepare_mid; // предупреждение об отключении 00324 UniSetTypes::ObjectId mid; // сообщение об отключении 00325 }; 00326 00327 typedef std::vector<OffInfo> OFFList; 00328 OFFList olst; 00329 void checkOffList( UniSetTypes::ObjectId id ); 00330 00331 PassiveTimer ptCheckReservPower; /*<! таймер пересчёта текущего резерва по мощности */ 00332 int num; 00333 00334 PassiveTimer ptUpdatePowerInfo; 00336 // пороги отклонения частоты и напряжения 00337 int f_min; 00338 int f_max; 00339 int U_min; 00340 int U_max; 00341 int f_msec; 00342 int U_msec; 00343 }; 00344 // ------------------------------------------------------------------------------------------ 00345 #endif // SEESControl_H_
1.7.6.1