#include <SEESControl.h>
Классы | |
| struct | AInfo |
| struct | OffInfo |
| struct | Structure |
| struct | StructureObject |
Открытые типы | |
| enum | Timers { tmUpdatePowerInfo, tmOffTimerBeg } |
| enum | StructureObjectTypes { soUnknown, soSEESGroup, soAutomat, soASensor } |
|
typedef std::list < StructureObject > | StructureObjectList |
Открытые члены | |
| SEESControl (int num, const std::string &sname, xmlNode *node=UniSetTypes::conf->getNode("SEESControl")) | |
| bool | isAlone (int num) |
| bool | acceptQG (int num) |
| void | releaseQG (int num) |
| bool | canRun (int num) |
Открытые статические члены | |
| static void | init_dlog (DebugStream &dlog) |
Статические открытые данные | |
| static DebugStream | dlog |
Защищенные члены | |
| virtual void | step () |
| void | processingMessage (UniSetTypes::VoidMessage *msg) |
| void | sensorInfo (UniSetTypes::SensorMessage *sm) |
| void | timerInfo (UniSetTypes::TimerMessage *tm) |
| void | seesInfo (SEESMessage *sm) |
| void | automatInfo (AutomatMessage *m) |
| virtual void | askSensors (UniversalIO::UIOCommand cmd) |
| void | command (UniSetTypes::ObjectId id, bool st) |
| void | setControl (bool state) |
| bool | checkSESProtection () |
| void | checkReservPower () |
| void | updatePowerInfo () |
| void | updateStructure () |
| void | updateGroupData () |
Друзья | |
| std::ostream & | operator<< (std::ostream &os, SEESControl &am) |
| std::ostream & | operator<< (std::ostream &os, SEESControl *am) |
| std::ostream & | operator<< (std::ostream &os, Structure *s) |
| std::ostream & | operator<< (std::ostream &os, const Structure &s) |
Блокировку отключения резерва при неработающем "основном"
Посылка сообщений
Задержку на отключение резерва при вкл. основного
Запрет отключения основного или предварительный запуск резервного, при попытке отключить единственный основной.
Управление резервной мощностью
Контроль максимального количества работающих ГДГ
Стоит ли запускать ДГ выбранный "основным"(в режиме автомат), если при этом на шинах уже кто-то есть. Щаз не запускается.. Только по "blackout"(обеcточивание шин).
Реализация алгоритма управления СЭС
Типы объектов встречаемых в структуре
| soSEESGroup | группа |
| soAutomat | автомат из списка автоматов |
| soASensor | датчик автомата (только состояние) |
00175 { 00176 soUnknown, 00177 soSEESGroup, 00178 soAutomat, 00179 soASensor 00180 };
| enum SEESControl::Timers |
| bool SEESControl::acceptQG | ( | int | num | ) |
захват приоритета включения генераторного автомата
00394 { 00395 { // lock 00396 UniSetTypes::uniset_mutex_lock lock(grMutex, 5000); 00397 00398 if( qf_locked ) 00399 { 00400 if( qf_locked == num ) 00401 { 00402 SEESControl::dlog[Debug::INFO] << myname << "(acceptQG): QG" << num << " ALREADY ACCEPTED..." << endl; 00403 return true; 00404 } 00405 00406 SEESControl::dlog[Debug::INFO] << myname << "(acceptQG): NOT ACCEPT QG" << num << " qf locked..." << endl; 00407 return false; 00408 } 00409 00410 for( GroupList::iterator it=grouplist.begin(); it!=grouplist.end(); ++it ) 00411 { 00412 try 00413 { 00414 qf_locked = (*it)->gr->acceptQG(num); 00415 return (qf_locked == num); 00416 } 00417 catch( NameNotFound& ex ){} 00418 } 00419 } 00420 00421 SEESControl::dlog[Debug::INFO] << myname << "(acceptQG): ACCEPT QG" << num << endl; 00422 qf_locked = num; 00423 return true; 00424 }
| bool SEESControl::canRun | ( | int | num | ) |
проверка можно ли запускать ещё один ДГ
00343 { 00344 UniSetTypes::uniset_mutex_lock lock(grMutex, 5000); 00345 for( GroupList::iterator it=grouplist.begin(); it!=grouplist.end(); ++it ) 00346 { 00347 try 00348 { 00349 return (*it)->gr->canRun(num); 00350 } 00351 catch( NameNotFound& ex ){} 00352 } 00353 00354 SEESControl::dlog[Debug::CRIT] << myname << "(canRun): Unknown GROUP for ses"<< num << endl; 00355 return false; 00356 }
| bool SEESControl::isAlone | ( | int | num | ) |
проверка работает ли соседний(другой) ДГ
00359 { 00360 { // lock 00361 UniSetTypes::uniset_mutex_lock lock(grMutex, 5000); 00362 00363 for( SEESList::iterator it=seslist.begin(); it!=seslist.end(); ++it ) 00364 { 00365 if( (*it)->getNumber()!=num && (*it)->isOnMode() ) 00366 return false; 00367 } 00368 } 00369 00370 return true; 00371 }
| void SEESControl::releaseQG | ( | int | num | ) |
освобождение приоритета включения генераторного автомата
00427 { 00428 { // lock 00429 UniSetTypes::uniset_mutex_lock lock(grMutex, 4000); 00430 00431 for( GroupList::iterator it=grouplist.begin(); it!=grouplist.end(); ++it ) 00432 { 00433 try 00434 { 00435 (*it)->gr->releaseQG(num); 00436 qf_locked = 0; 00437 return; 00438 } 00439 catch( NameNotFound& ex ){} 00440 } 00441 } 00442 00443 SEESControl::dlog[Debug::WARN] << myname << "(releaseQG): RELEASE QG" << num << " BUT NOT ACCEPTED!!"<< endl; 00444 }
1.5.9