Класс SEESControl

#include <SEESControl.h>

Граф наследования:SEESControl:

Inheritance graph
[см. легенду]
Граф связей класса SEESControl:

Collaboration graph
[см. легенду]

Полный список членов класса

Классы

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         };

Элементы перечислений:
tmOffTimerBeg  ВНИМАНИЕ! Этот таймер всегда должен быть в конце списка!
00168         {
00169             tmUpdatePowerInfo,
00170             tmOffTimerBeg       
00171         };


Методы

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 }


Объявления и описания членов классов находятся в файлах:

Документация по uniset-algorithms. Последние изменения: Fri Dec 12 14:27:17 2014. Создано системой  doxygen 1.5.9