uniset-algorithms  0.2
Классы | Открытые типы | Открытые члены | Открытые статические члены | Статические открытые данные | Защищенные члены | Друзья
Класс 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 

датчик автомата (только состояние)

        {
            soUnknown,
            soSEESGroup,    
            soAutomat,      
            soASensor       
        };
Элементы перечислений:
tmOffTimerBeg 

ВНИМАНИЕ! Этот таймер всегда должен быть в конце списка!

        {
            tmUpdatePowerInfo,
            tmOffTimerBeg       
        };

Методы

bool SEESControl::acceptQG ( int  num)

захват приоритета включения генераторного автомата

{
    { // lock
        UniSetTypes::uniset_mutex_lock lock(grMutex, 5000);
        
        if( qf_locked )
        {
            if( qf_locked == num )
            {
                SEESControl::dlog[Debug::INFO] << myname << "(acceptQG): QG" << num << " ALREADY ACCEPTED..." << endl;
                return true;
            }

            SEESControl::dlog[Debug::INFO] << myname << "(acceptQG): NOT ACCEPT QG" << num << " qf locked..." << endl;
            return false;
        }
        
        for( GroupList::iterator it=grouplist.begin(); it!=grouplist.end(); ++it )
        {
            try
            {
                qf_locked = (*it)->gr->acceptQG(num);
                return (qf_locked == num);
            }
            catch( NameNotFound& ex ){}
        }
    }
    
    SEESControl::dlog[Debug::INFO] << myname << "(acceptQG): ACCEPT QG" << num << endl;
    qf_locked = num;
    return true;
}
bool SEESControl::canRun ( int  num)

проверка можно ли запускать ещё один ДГ

{
    UniSetTypes::uniset_mutex_lock lock(grMutex, 5000);
    for( GroupList::iterator it=grouplist.begin(); it!=grouplist.end(); ++it )
    {
        try
        {
            return (*it)->gr->canRun(num);
        }
        catch( NameNotFound& ex ){}
    }

    SEESControl::dlog[Debug::CRIT] << myname << "(canRun):  Unknown GROUP for ses"<< num << endl;
    return false;
}
bool SEESControl::isAlone ( int  num)

проверка работает ли соседний(другой) ДГ

{
    { // lock
        UniSetTypes::uniset_mutex_lock lock(grMutex, 5000);

        for( SEESList::iterator it=seslist.begin(); it!=seslist.end(); ++it )
        {
            if( (*it)->getNumber()!=num && (*it)->isOnMode() )
                return false;
        }
    }

    return true;
}
void SEESControl::releaseQG ( int  num)

освобождение приоритета включения генераторного автомата

{
    { // lock
        UniSetTypes::uniset_mutex_lock lock(grMutex, 4000);

        for( GroupList::iterator it=grouplist.begin(); it!=grouplist.end(); ++it )
        {
            try
            {
                (*it)->gr->releaseQG(num);
                qf_locked = 0;
                return;
            }
            catch( NameNotFound& ex ){}
        }
    }

    SEESControl::dlog[Debug::WARN] << myname << "(releaseQG): RELEASE QG" << num << " BUT NOT ACCEPTED!!"<< endl;
}

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