|
uniset-algorithms
0.2
|
#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 |
датчик автомата (только состояние) |
{
soUnknown,
soSEESGroup,
soAutomat,
soASensor
};
| enum SEESControl::Timers |
{
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;
}
1.7.6.1