Полный список членов класса
Классы |
| struct | APSGroupInfo |
| struct | APSSensorInfo |
Открытые члены |
|
| APSControl (UniSetTypes::ObjectId id, const std::string name="APSControl") |
Открытые статические члены |
|
static void | init_dlog (DebugStream &dlog) |
Статические открытые данные |
|
static DebugStream | dlog |
Защищенные типы |
| enum | Timers { ptHeartBeat
} |
typedef std::map
< UniSetTypes::ObjectId,
APSGroupInfo > | APSGroupList |
Защищенные члены |
| void | processingMessage (UniSetTypes::VoidMessage *msg) |
| void | askSensors (UniversalIO::UIOCommand cmd) |
| void | sysCommand (UniSetTypes::SystemMessage *sm) |
| void | sensorInfo (UniSetTypes::SensorMessage *sm) |
| void | timerInfo (UniSetTypes::TimerMessage *tm) |
| void | makeAPS (UniSetTypes::ObjectId id, bool state) |
| void | makeAPSLamp (bool newAPS, bool isAnyAPS) |
| void | makeNewAPSSensor (bool newAPS) |
|
bool | initAPS (xmlNode *cnode) |
|
virtual void | sigterm (int signo) |
|
void | offOutputs (bool all) |
|
bool | checkTestMode () |
Защищенные данные |
std::map
< UniSetTypes::ObjectId,
APSSensorInfo > | sensorToAPS |
std::map
< UniSetTypes::ObjectId,
UniSetTypes::ObjectId > | blockedSensors |
|
APSGroupList | apsGroupsInfo |
|
SMInterface * | smi |
|
UniSetTypes::ObjectId | testSensor |
|
UniSetTypes::ObjectId | nodeTestSensor |
|
bool | in_testSensor |
|
bool | in_nodeTestSensor |
|
UniSetTypes::ObjectId | sidHeartBeat |
|
int | maxHeartBeat |
|
timeout_t | heartbeatTime |
| UniSetTypes::ObjectId | newaps_s |
| UniSetTypes::ObjectId | confirm_s |
|
bool | confirmMode |
| UniSetTypes::ObjectId | apsLamp_c |
|
timeout_t | smReadyTimeout |
|
bool | TermOffAps |
|
std::string | f_field |
|
std::string | f_value |
| timeout_t | apsMakePause |
Методы
| void APSControl::askSensors |
( |
UniversalIO::UIOCommand |
cmd | ) |
[protected] |
работа с датчиками
- Аргументы:
-
| cmd | - команда (заказ, отказ) |
{
if( !smi->waitSMready(smReadyTimeout) )
{
dlog << endl;
dlog[Debug::CRIT] << myname << ": SM not ready (waiting=" << smReadyTimeout << " msec)!!! SIGTERM.\n\n";
raise(SIGTERM);
}
try
{
cerr << myname << " ask group sensors..." << endl;
for( APSGroupList::iterator It = apsGroupsInfo.begin(); It != apsGroupsInfo.end(); It++ )
{
dlog[Debug::INFO] << "(askSensors): ApsGroupId " << It->first << endl;
list<ObjectId>::iterator sIt;
for( sIt = It->second.sensIdList.begin() ; sIt != It->second.sensIdList.end() ; sIt++ )
{
try
{
smi->askSensor(*sIt,command,getId());
}
catch(Exception& ex)
{
dlog(Debug::INFO) << endl;
dlog[Debug::CRIT] << myname << "(askSensors): id=" << (*sIt) << " : " << ex << endl;
}
catch(...)
{
dlog[Debug::CRIT] << myname << "(askSensors): неудалось заказать датчик " << *sIt << endl;
}
}
}
cerr << myname << " ask blockers..." << endl;
map<ObjectId,ObjectId>::iterator bIt;
for( bIt = blockedSensors.begin(); bIt != blockedSensors.end(); bIt++ )
{
smi->askSensor(bIt->second,command,getId());
}
cerr << myname << " ask spec sensors..." << endl;
if( confirm_s!=DefaultObjectId )
smi->askSensor(confirm_s, command,getId());
if( testSensor!=DefaultObjectId )
smi->askSensor(testSensor, command,getId());
if( nodeTestSensor!=DefaultObjectId )
smi->askSensor(nodeTestSensor, command,getId());
}
catch(Exception& ex)
{
dlog[Debug::CRIT] << myname << "(askSensors): " << ex << endl;
}
}
| void APSControl::makeAPS |
( |
UniSetTypes::ObjectId |
id, |
|
|
bool |
state |
|
) |
| [protected] |
формирует обобщенный датчик АПС и специальный программный датчик по приходу новой АПС
- Аргументы:
-
| id | - идентификатор пришедшего датчика |
| state | - состояние пришедшего датчика |
{
dlog[Debug::INFO] << "(makeAPS): id = " << id << " state = " << state << endl;
bool newAPS = false;
bool APSState = false;
bool isAnyAPS = false;
map<UniSetTypes::ObjectId,APSSensorInfo>::iterator itSTA = sensorToAPS.find(id);
if( itSTA == sensorToAPS.end() && id != confirm_s )
{
dlog[Debug::INFO] << "Проверка на существование сенсора "<<id<<" в массиве (сенсор;АПС) не прошла"<< endl;
return;
}
if( confirm_s!=DefaultObjectId && id == confirm_s )
{
if( !state )
return;
confirmMode = true;
map<ObjectId,APSGroupInfo>::iterator aIt = apsGroupsInfo.begin();
for( ; aIt != apsGroupsInfo.end(); aIt++)
{
if(aIt->second.apsState)
{
isAnyAPS = true;
break;
}
}
makeNewAPSSensor(false);
makeAPSLamp( false, isAnyAPS );
return;
}
else
{
if( state && !itSTA->second.state )
newAPS = true;
itSTA->second.state = state;
}
ObjectId apsId = itSTA->second.apsId;
APSGroupList::iterator it = apsGroupsInfo.find(apsId);
if( it == apsGroupsInfo.end() )
{
dlog[Debug::INFO] << "Проверка на существование APS "<<apsId<<" в массиве групп АПС не прошла"<< endl;
return;
}
list<ObjectId>::iterator sIt = it->second.sensIdList.begin();
for( ; sIt != it->second.sensIdList.end(); sIt++)
{
if( sensorToAPS[*sIt].state )
{
if( !it->second.apsState )
{
if( confirmMode && state )
{
confirmMode = false;
}
}
APSState=true;
isAnyAPS=true;
break;
}
}
if( APSState )
{
it->second.apsState = true;
try
{
if( newAPS )
{
smi->saveLocalState(apsId,false);
msleep(apsMakePause);
}
smi->saveLocalState(apsId,true);
}
catch(...)
{
dlog[Debug::WARN] << myname << "[makeAPS]: ... \n";
}
}
else
{
it->second.apsState = false;
try
{
smi->saveLocalState(apsId,false);
}
catch(...)
{
dlog[Debug::WARN] << myname << "[makeAPS]: ... \n";
}
}
for(it=apsGroupsInfo.begin();it!=apsGroupsInfo.end();it++)
{
if(it->second.apsState==true)
{
isAnyAPS=true;
break;
}
}
makeNewAPSSensor(newAPS);
if( !itSTA->second.no_apslamp )
makeAPSLamp( newAPS, isAnyAPS );
else if( !newAPS )
makeAPSLamp( false, isAnyAPS );
}
| void APSControl::makeAPSLamp |
( |
bool |
newAPS, |
|
|
bool |
isAnyAPS |
|
) |
| [protected] |
формирование лампы на колонке
- Аргументы:
-
| newAPS | - состояние специального програмного датчика |
| isAnyAPS | - наличие АПС в системе |
{
if( newAPS )
{
dlog[Debug::INFO] << "(apsLamp_c): blink --##--##--##--##--##--##--" << endl;
if( apsLamp_c != DefaultObjectId )
{
try
{
smi->setValue(apsLamp_c, lmpBLINK);
}
catch(...)
{
dlog[Debug::WARN] << myname << "[apsLamp_c]: catch... \n";
}
}
}
else if( confirmMode )
{
if( isAnyAPS )
{
dlog[Debug::INFO] << "(apsLamp_c): on #############################" << endl;
if( apsLamp_c != DefaultObjectId )
{
try
{
smi->setValue(apsLamp_c,lmpON);
}
catch(...)
{
dlog[Debug::WARN] << myname << "[apsLamp_c]: catch... \n";
}
}
}
else
{
dlog[Debug::INFO] << "(apsLamp_c): off --------------------------" << endl;
if( apsLamp_c != DefaultObjectId )
{
try
{
smi->setValue(apsLamp_c, lmpOFF);
}
catch(...)
{
dlog[Debug::WARN] << myname << "[apsLamp_c]: catch... \n";
}
}
confirmMode = false;
}
}
}
| void APSControl::makeNewAPSSensor |
( |
bool |
newAPS | ) |
[protected] |
формирование датчика "новая АПС"
{
if( newaps_s != DefaultObjectId )
{
dlog[Debug::INFO] << "(makeAPS): newaps_s=1" << endl;
try
{
if( newAPS )
smi->saveLocalState( newaps_s, true );
else if( confirmMode )
smi->saveLocalState( newaps_s, false );
}
catch(...)
{
dlog[Debug::WARN] << myname << "[new_aps]: catch... \n";
}
}
}
| void APSControl::processingMessage |
( |
UniSetTypes::VoidMessage * |
msg | ) |
[protected] |
обработка новых сообщений
- Аргументы:
-
| msg | - обрабатываемое сообщение |
{
try
{
switch(msg->type)
{
case Message::SensorInfo:
{
SensorMessage sm(msg);
sensorInfo(&sm);
break;
}
case Message::SysCommand:
{
SystemMessage sm(msg);
sysCommand(&sm);
break;
}
case Message::Timer:
{
TimerMessage tm(msg);
timerInfo(&tm);
break;
}
default:
dlog[Debug::INFO] << myname << "(processingMessage): неизвестное сообщение " << msg->type << endl;
break;
}
}
catch( Exception& ex )
{
dlog[Debug::CRIT] << myname << "(processingMessage): " << ex << endl;
}
}
| void APSControl::sensorInfo |
( |
UniSetTypes::SensorMessage * |
sm | ) |
[protected] |
обработка сообщений об изменении состояния датчиков
- Аргументы:
-
| sm | - сообщение об изменении состояния датчика |
| void APSControl::sysCommand |
( |
UniSetTypes::SystemMessage * |
sm | ) |
[protected] |
обработка системных сообщений
- Аргументы:
-
| void APSControl::timerInfo |
( |
UniSetTypes::TimerMessage * |
tm | ) |
[protected] |
обработка сообщений о срабатывания таймера
- Аргументы:
-
| tm | - сообщение о срабатывании таймера |
Данные класса
идентификатор лампы срабатывания АПС в ПЭЖ (Световая колонка АПС в МО)
пауза при "мигании" обощённой АПС при срабатывании новой АПС из группы
идентификатор кнопки квитирования (Кнопка квитирования в ПЭЖ)
идентификатор обобщенного датчика (Сработала АПС в ПЭЖ)
Объявления и описания членов классов находятся в файлах: