Commit d5d1d2b8 authored by Pavel Vainerman's avatar Pavel Vainerman

(IORFile): небольшой рефакторинг интерфейса. Сделал функции статическими,

т.к. по сути это класс "вспомогательных функций". (codegen): небольшая правка параметра для натстройки лога, перегенерировал UObject_SK
parent 856d7807
...@@ -634,7 +634,7 @@ end_private(false) ...@@ -634,7 +634,7 @@ end_private(false)
mylog->setLogName(myname); mylog->setLogName(myname);
{ {
ostringstream s; ostringstream s;
s << myname << "-log"; s << argprefix << "log";
conf->initLogStream(mylog,s.str()); conf->initLogStream(mylog,s.str());
} }
...@@ -965,7 +965,7 @@ askPause(uniset_conf()->getPIntProp(cnode,"askPause",2000)) ...@@ -965,7 +965,7 @@ askPause(uniset_conf()->getPIntProp(cnode,"askPause",2000))
mylog->setLogName(myname); mylog->setLogName(myname);
{ {
ostringstream s; ostringstream s;
s << myname << "-log"; s << argprefix << "log";
conf->initLogStream(mylog, s.str()); conf->initLogStream(mylog, s.str());
} }
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
Name: libuniset2 Name: libuniset2
Version: 2.0 Version: 2.0
Release: alt17 Release: alt18
Summary: UniSet - library for building distributed industrial control systems Summary: UniSet - library for building distributed industrial control systems
...@@ -404,8 +404,16 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname ...@@ -404,8 +404,16 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
#%_pkgconfigdir/libUniSet2SMDBServer.pc #%_pkgconfigdir/libUniSet2SMDBServer.pc
#%_pkgconfigdir/libUniSet2*.pc #%_pkgconfigdir/libUniSet2*.pc
%exclude %_pkgconfigdir/libUniSet2.pc %exclude %_pkgconfigdir/libUniSet2.pc
# history of current unpublished changes
# ..
%changelog %changelog
* Sat Feb 28 2015 Pavel Vainerman <pv@altlinux.ru> 2.0-alt18
- codegen: set default argprefix=myname (object name)
- codegen: fixed minor bug in mylog..
- refactoring IORFile interface
* Sat Feb 21 2015 Pavel Vainerman <pv@altlinux.ru> 2.0-alt17 * Sat Feb 21 2015 Pavel Vainerman <pv@altlinux.ru> 2.0-alt17
- use omni_options[] argument for ORB_init(). - use omni_options[] argument for ORB_init().
- minor fixes - minor fixes
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ. ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ.
*/ */
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// generate timestamp: 2015-02-02+03:00 // generate timestamp: 2015-02-28+03:00
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#ifndef UObject_SK_H_ #ifndef UObject_SK_H_
#define UObject_SK_H_ #define UObject_SK_H_
...@@ -42,18 +42,18 @@ class UObject_SK: ...@@ -42,18 +42,18 @@ class UObject_SK:
void init_dlog( std::shared_ptr<DebugStream> d ); void init_dlog( std::shared_ptr<DebugStream> d );
// "синтаксический сахар"..для логов // "синтаксический сахар"..для логов
#define myinfo if( mylog->debugging(Debug::INFO) ) mylog->any() #define myinfo if( mylog->debugging(Debug::INFO) ) mylog->info()
#define mywarn if( mylog->debugging(Debug::WARN) ) mylog->any() #define mywarn if( mylog->debugging(Debug::WARN) ) mylog->warn()
#define mycrit if( mylog->debugging(Debug::CRIT) ) mylog->any() #define mycrit if( mylog->debugging(Debug::CRIT) ) mylog->crit()
#define mylog1 if( mylog->debugging(Debug::LEVEL1) ) mylog->any() #define mylog1 if( mylog->debugging(Debug::LEVEL1) ) mylog->level1()
#define mylog2 if( mylog->debugging(Debug::LEVEL2) ) mylog->any() #define mylog2 if( mylog->debugging(Debug::LEVEL2) ) mylog->level2()
#define mylog3 if( mylog->debugging(Debug::LEVEL3) ) mylog->any() #define mylog3 if( mylog->debugging(Debug::LEVEL3) ) mylog->level3()
#define mylog4 if( mylog->debugging(Debug::LEVEL4) ) mylog->any() #define mylog4 if( mylog->debugging(Debug::LEVEL4) ) mylog->level4()
#define mylog5 if( mylog->debugging(Debug::LEVEL5) ) mylog->any() #define mylog5 if( mylog->debugging(Debug::LEVEL5) ) mylog->level5()
#define mylog6 if( mylog->debugging(Debug::LEVEL6) ) mylog->any() #define mylog6 if( mylog->debugging(Debug::LEVEL6) ) mylog->level6()
#define mylog7 if( mylog->debugging(Debug::LEVEL7) ) mylog->any() #define mylog7 if( mylog->debugging(Debug::LEVEL7) ) mylog->level7()
#define mylog8 if( mylog->debugging(Debug::LEVEL8) ) mylog->any() #define mylog8 if( mylog->debugging(Debug::LEVEL8) ) mylog->level8()
#define mylog9 if( mylog->debugging(Debug::LEVEL9) ) mylog->any() #define mylog9 if( mylog->debugging(Debug::LEVEL9) ) mylog->level9()
#define mylogany mylog->any() #define mylogany mylog->any()
...@@ -107,6 +107,7 @@ class UObject_SK: ...@@ -107,6 +107,7 @@ class UObject_SK:
int sleep_msec; /*!< пауза между итерациями */ int sleep_msec; /*!< пауза между итерациями */
bool active; bool active;
const std::string argprefix;
UniSetTypes::ObjectId smTestID; /*!< идентификатор датчика для тестирования готовности SM */ UniSetTypes::ObjectId smTestID; /*!< идентификатор датчика для тестирования готовности SM */
// управление датчиком "сердцебиения" // управление датчиком "сердцебиения"
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ. ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ.
*/ */
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// generate timestamp: 2015-02-02+03:00 // generate timestamp: 2015-02-28+03:00
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#include <memory> #include <memory>
#include "Configuration.h" #include "Configuration.h"
...@@ -45,23 +45,24 @@ forceOut(false), ...@@ -45,23 +45,24 @@ forceOut(false),
end_private(false) end_private(false)
{ {
ucrit << "UObject: init failed!!!!!!!!!!!!!!!" << endl; ucrit << "UObject: init failed!!!!!!!!!!!!!!!" << endl;
throw Exception( string(myname+": init failed!!!") ); throw Exception( string(myname+": init failed!!!") );
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// ( val, confval, default val ) // ( val, confval, default val )
static const std::string init3_str( const std::string& s1, const std::string& s2, const std::string& s3 ) static const std::string init3_str( const std::string& s1, const std::string& s2, const std::string& s3 )
{ {
if( !s1.empty() ) if( !s1.empty() )
return s1; return s1;
if( !s2.empty() ) if( !s2.empty() )
return s2; return s2;
return s3; return s3;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
UObject_SK::UObject_SK( ObjectId id, xmlNode* cnode, const std::string& argprefix ): UObject_SK::UObject_SK( ObjectId id, xmlNode* cnode, const std::string& _argprefix ):
UniSetObject(id), UniSetObject(id),
argprefix( (_argprefix.empty() ? myname+"-" : argprefix) ),
// Инициализация идентификаторов (имена берутся из конф. файла) // Инициализация идентификаторов (имена берутся из конф. файла)
// Используемые идентификаторы сообщений (имена берутся из конф. файла) // Используемые идентификаторы сообщений (имена берутся из конф. файла)
...@@ -81,82 +82,82 @@ forceOut(false), ...@@ -81,82 +82,82 @@ forceOut(false),
end_private(false) end_private(false)
{ {
auto conf = uniset_conf(); auto conf = uniset_conf();
if( UniSetTypes::findArgParam("--print-id-list",uniset_conf()->getArgc(),uniset_conf()->getArgv()) != -1 ) if( UniSetTypes::findArgParam("--print-id-list",uniset_conf()->getArgc(),uniset_conf()->getArgv()) != -1 )
{ {
// abort(); // abort();
} }
if( getId() == DefaultObjectId ) if( getId() == DefaultObjectId )
{ {
ostringstream err; ostringstream err;
err << "(UObject::init): Unknown ObjectID!"; err << "(UObject::init): Unknown ObjectID!";
throw SystemError( err.str() ); throw SystemError( err.str() );
} }
mylog = make_shared<DebugStream>(); mylog = make_shared<DebugStream>();
mylog->setLogName(myname); mylog->setLogName(myname);
{ {
ostringstream s; ostringstream s;
s << myname << "-log"; s << argprefix << "-log";
conf->initLogStream(mylog,s.str()); conf->initLogStream(mylog,s.str());
} }
UniXML::iterator it(cnode); UniXML::iterator it(cnode);
forceOut = conf->getArgPInt("--" + argprefix + "force-out",it.getProp("forceOut"),false); forceOut = conf->getArgPInt("--" + argprefix + "force-out",it.getProp("forceOut"),false);
string heart = conf->getArgParam("--" + argprefix + "heartbeat-id",it.getProp("heartbeat_id")); string heart = conf->getArgParam("--" + argprefix + "heartbeat-id",it.getProp("heartbeat_id"));
if( !heart.empty() ) if( !heart.empty() )
{ {
idHeartBeat = conf->getSensorID(heart); idHeartBeat = conf->getSensorID(heart);
if( idHeartBeat == DefaultObjectId ) if( idHeartBeat == DefaultObjectId )
{ {
ostringstream err; ostringstream err;
err << myname << ": не найден идентификатор для датчика 'HeartBeat' " << heart; err << myname << ": не найден идентификатор для датчика 'HeartBeat' " << heart;
throw SystemError(err.str()); throw SystemError(err.str());
} }
int heartbeatTime = conf->getArgPInt("--" + argprefix + "heartbeat-time",it.getProp("heartbeatTime"),conf->getHeartBeatTime()); int heartbeatTime = conf->getArgPInt("--" + argprefix + "heartbeat-time",it.getProp("heartbeatTime"),conf->getHeartBeatTime());
if( heartbeatTime>0 ) if( heartbeatTime>0 )
ptHeartBeat.setTiming(heartbeatTime); ptHeartBeat.setTiming(heartbeatTime);
else else
ptHeartBeat.setTiming(UniSetTimer::WaitUpTime); ptHeartBeat.setTiming(UniSetTimer::WaitUpTime);
maxHeartBeat = conf->getArgPInt("--" + argprefix + "heartbeat-max",it.getProp("heartbeat_max"), 10);
}
// Инициализация значений maxHeartBeat = conf->getArgPInt("--" + argprefix + "heartbeat-max",it.getProp("heartbeat_max"), 10);
}
sleep_msec = conf->getArgPInt("--" + argprefix + "sleep-msec","150", 150);
resetMsgTime = conf->getPIntProp(cnode,"resetMsgTime", 2000); // Инициализация значений
ptResetMsg.setTiming(resetMsgTime);
sleep_msec = conf->getArgPInt("--" + argprefix + "sleep-msec","150", 150);
smReadyTimeout = conf->getArgInt("--" + argprefix + "sm-ready-timeout",""); resetMsgTime = conf->getPIntProp(cnode,"resetMsgTime", 2000);
if( smReadyTimeout == 0 ) ptResetMsg.setTiming(resetMsgTime);
smReadyTimeout = 60000;
else if( smReadyTimeout < 0 )
smReadyTimeout = UniSetTimer::WaitUpTime;
smTestID = conf->getSensorID(init3_str(conf->getArgParam("--" + argprefix + "sm-test-id"),conf->getProp(cnode,"smTestID"),"")); smReadyTimeout = conf->getArgInt("--" + argprefix + "sm-ready-timeout","");
if( smReadyTimeout == 0 )
smReadyTimeout = 60000;
else if( smReadyTimeout < 0 )
smReadyTimeout = UniSetTimer::WaitUpTime;
activateTimeout = conf->getArgPInt("--" + argprefix + "activate-timeout", 20000); smTestID = conf->getSensorID(init3_str(conf->getArgParam("--" + argprefix + "sm-test-id"),conf->getProp(cnode,"smTestID"),""));
int msec = conf->getArgPInt("--" + argprefix + "startup-timeout", 10000); activateTimeout = conf->getArgPInt("--" + argprefix + "activate-timeout", 20000);
ptStartUpTimeout.setTiming(msec);
// ===================== <variables> ===================== int msec = conf->getArgPInt("--" + argprefix + "startup-timeout", 10000);
ptStartUpTimeout.setTiming(msec);
// ===================== end of <variables> =====================
// ===================== <variables> =====================
// ===================== end of <variables> =====================
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -167,36 +168,36 @@ UObject_SK::~UObject_SK() ...@@ -167,36 +168,36 @@ UObject_SK::~UObject_SK()
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UObject_SK::updateValues() void UObject_SK::updateValues()
{ {
// Опрашиваем все входы... // Опрашиваем все входы...
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UObject_SK::updatePreviousValues() void UObject_SK::updatePreviousValues()
{ {
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UObject_SK::checkSensors() void UObject_SK::checkSensors()
{ {
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
bool UObject_SK::alarm( UniSetTypes::ObjectId _code, bool _state ) bool UObject_SK::alarm( UniSetTypes::ObjectId _code, bool _state )
{ {
if( _code == UniSetTypes::DefaultObjectId ) if( _code == UniSetTypes::DefaultObjectId )
{ {
ucrit << getName() ucrit << getName()
<< "(alarm): попытка послать сообщение с DefaultObjectId" << "(alarm): попытка послать сообщение с DefaultObjectId"
<< endl; << endl;
return false; return false;
} }
ulog1 << getName() << "(alarm): " << ( _state ? "SEND " : "RESET " ) << endl; ulog1 << getName() << "(alarm): " << ( _state ? "SEND " : "RESET " ) << endl;
ulog1 << " not found MessgeOID?!!" << endl; ulog1 << " not found MessgeOID?!!" << endl;
return false; return false;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UObject_SK::resetMsg() void UObject_SK::resetMsg()
...@@ -207,11 +208,11 @@ void UObject_SK::resetMsg() ...@@ -207,11 +208,11 @@ void UObject_SK::resetMsg()
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UObject_SK::testMode( bool _state ) void UObject_SK::testMode( bool _state )
{ {
if( !_state ) if( !_state )
return; return;
// отключаем все выходы // отключаем все выходы
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -220,140 +221,140 @@ void UObject_SK::testMode( bool _state ) ...@@ -220,140 +221,140 @@ void UObject_SK::testMode( bool _state )
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void UObject_SK::init_dlog( std::shared_ptr<DebugStream> d ) void UObject_SK::init_dlog( std::shared_ptr<DebugStream> d )
{ {
UObject_SK::mylog = d; UObject_SK::mylog = d;
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void UObject_SK::processingMessage( UniSetTypes::VoidMessage* _msg ) void UObject_SK::processingMessage( UniSetTypes::VoidMessage* _msg )
{ {
try try
{ {
switch( _msg->type ) switch( _msg->type )
{ {
case Message::SensorInfo: case Message::SensorInfo:
preSensorInfo( reinterpret_cast<SensorMessage*>(_msg) ); preSensorInfo( reinterpret_cast<SensorMessage*>(_msg) );
break; break;
case Message::Timer: case Message::Timer:
preTimerInfo( reinterpret_cast<TimerMessage*>(_msg) ); preTimerInfo( reinterpret_cast<TimerMessage*>(_msg) );
break; break;
case Message::SysCommand: case Message::SysCommand:
sysCommand( reinterpret_cast<SystemMessage*>(_msg) ); sysCommand( reinterpret_cast<SystemMessage*>(_msg) );
break; break;
default: default:
break; break;
} }
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
ucrit << myname << "(processingMessage): " << ex << endl; ucrit << myname << "(processingMessage): " << ex << endl;
} }
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UObject_SK::sysCommand( const SystemMessage* _sm ) void UObject_SK::sysCommand( const SystemMessage* _sm )
{ {
switch( _sm->command ) switch( _sm->command )
{ {
case SystemMessage::WatchDog: case SystemMessage::WatchDog:
ulogany << myname << "(sysCommand): WatchDog" << endl; ulogany << myname << "(sysCommand): WatchDog" << endl;
if( !active || !ptStartUpTimeout.checkTime() ) if( !active || !ptStartUpTimeout.checkTime() )
{ {
uwarn << myname << "(sysCommand): игнорируем WatchDog, потому-что только-что стартанули" << endl; uwarn << myname << "(sysCommand): игнорируем WatchDog, потому-что только-что стартанули" << endl;
break; break;
} }
case SystemMessage::StartUp: case SystemMessage::StartUp:
{ {
waitSM(smReadyTimeout); waitSM(smReadyTimeout);
ptStartUpTimeout.reset(); ptStartUpTimeout.reset();
// т.к. для io-переменных важно соблюдать последовательность! // т.к. для io-переменных важно соблюдать последовательность!
// сперва обновить входы.. а потом уже выходы // сперва обновить входы.. а потом уже выходы
updateValues(); updateValues();
updateOutputs(true); // принудительное обновление выходов updateOutputs(true); // принудительное обновление выходов
preAskSensors(UniversalIO::UIONotify); preAskSensors(UniversalIO::UIONotify);
askSensors(UniversalIO::UIONotify); askSensors(UniversalIO::UIONotify);
active = true; active = true;
break; break;
} }
case SystemMessage::FoldUp: case SystemMessage::FoldUp:
case SystemMessage::Finish: case SystemMessage::Finish:
preAskSensors(UniversalIO::UIODontNotify); preAskSensors(UniversalIO::UIODontNotify);
askSensors(UniversalIO::UIODontNotify); askSensors(UniversalIO::UIODontNotify);
break; break;
case SystemMessage::LogRotate: case SystemMessage::LogRotate:
{ {
// переоткрываем логи // переоткрываем логи
mylogany << myname << "(sysCommand): logRotate" << endl; mylogany << myname << "(sysCommand): logRotate" << endl;
string fname( mylog->getLogFile() ); string fname( mylog->getLogFile() );
if( !fname.empty() ) if( !fname.empty() )
{ {
mylog->logFile(fname.c_str(),true); mylog->logFile(fname.c_str(),true);
mylogany << myname << "(sysCommand): ***************** mylog LOG ROTATE *****************" << endl; mylogany << myname << "(sysCommand): ***************** mylog LOG ROTATE *****************" << endl;
} }
} }
break; break;
default: default:
break; break;
} }
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UObject_SK::sigterm( int signo ) void UObject_SK::sigterm( int signo )
{ {
UniSetObject::sigterm(signo); UniSetObject::sigterm(signo);
active = false; active = false;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
bool UObject_SK::activateObject() bool UObject_SK::activateObject()
{ {
// блокирование обработки Startup // блокирование обработки Startup
// пока не пройдёт инициализация датчиков // пока не пройдёт инициализация датчиков
// см. sysCommand() // см. sysCommand()
{ {
activated = false; activated = false;
UniSetObject::activateObject(); UniSetObject::activateObject();
activated = true; activated = true;
} }
return true; return true;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UObject_SK::preTimerInfo( const UniSetTypes::TimerMessage* _tm ) void UObject_SK::preTimerInfo( const UniSetTypes::TimerMessage* _tm )
{ {
timerInfo(_tm); timerInfo(_tm);
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void UObject_SK::waitSM( int wait_msec, ObjectId _testID ) void UObject_SK::waitSM( int wait_msec, ObjectId _testID )
{ {
if( _testID == DefaultObjectId ) if( _testID == DefaultObjectId )
_testID = smTestID; _testID = smTestID;
if( _testID == DefaultObjectId ) if( _testID == DefaultObjectId )
return; return;
uinfo << myname << "(waitSM): waiting SM ready " uinfo << myname << "(waitSM): waiting SM ready "
<< wait_msec << " msec" << wait_msec << " msec"
<< " testID=" << _testID << endl; << " testID=" << _testID << endl;
if( !ui->waitReady(_testID,wait_msec) ) if( !ui->waitReady(_testID,wait_msec) )
{ {
ostringstream err; ostringstream err;
err << myname err << myname
<< "(waitSM): Не дождались готовности(exist) SharedMemory к работе в течение " << "(waitSM): Не дождались готовности(exist) SharedMemory к работе в течение "
<< wait_msec << " мсек"; << wait_msec << " мсек";
ucrit << err.str() << endl; ucrit << err.str() << endl;
// terminate(); // terminate();
// abort(); // abort();
raise(SIGTERM); raise(SIGTERM);
terminate(); terminate();
// throw SystemError(err.str()); // throw SystemError(err.str());
} }
} }
...@@ -362,149 +363,149 @@ void UObject_SK::waitSM( int wait_msec, ObjectId _testID ) ...@@ -362,149 +363,149 @@ void UObject_SK::waitSM( int wait_msec, ObjectId _testID )
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
void UObject_SK::callback() void UObject_SK::callback()
{ {
if( !active ) if( !active )
return; return;
try try
{ {
// проверка таймеров // проверка таймеров
checkTimers(this); checkTimers(this);
if( resetMsgTime>0 && trResetMsg.hi(ptResetMsg.checkTime()) ) if( resetMsgTime>0 && trResetMsg.hi(ptResetMsg.checkTime()) )
{ {
// cout << myname << ": ********* reset messages *********" << endl; // cout << myname << ": ********* reset messages *********" << endl;
resetMsg(); resetMsg();
} }
// обработка сообщений (таймеров и т.п.) // обработка сообщений (таймеров и т.п.)
for( unsigned int i=0; i<20; i++ ) for( unsigned int i=0; i<20; i++ )
{ {
if( !receiveMessage(msg) ) if( !receiveMessage(msg) )
break; break;
processingMessage(&msg); processingMessage(&msg);
updateOutputs(forceOut); updateOutputs(forceOut);
// updatePreviousValues(); // updatePreviousValues();
} }
// Выполнение шага программы // Выполнение шага программы
step(); step();
// "сердцебиение" // "сердцебиение"
if( idHeartBeat!=DefaultObjectId && ptHeartBeat.checkTime() ) if( idHeartBeat!=DefaultObjectId && ptHeartBeat.checkTime() )
{ {
ui->setValue(idHeartBeat,maxHeartBeat,UniversalIO::AI); ui->setValue(idHeartBeat,maxHeartBeat,UniversalIO::AI);
ptHeartBeat.reset(); ptHeartBeat.reset();
} }
// обновление выходов // обновление выходов
updateOutputs(forceOut); updateOutputs(forceOut);
updatePreviousValues(); updatePreviousValues();
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
ucrit << myname << "(execute): " << ex << endl; ucrit << myname << "(execute): " << ex << endl;
} }
catch( const CORBA::SystemException& ex ) catch( const CORBA::SystemException& ex )
{ {
ucrit << myname << "(execute): СORBA::SystemException: " ucrit << myname << "(execute): СORBA::SystemException: "
<< ex.NP_minorString() << endl; << ex.NP_minorString() << endl;
} }
catch( const std::exception&ex ) catch( const std::exception&ex )
{ {
ucrit << myname << "(execute): catch " << ex.what() << endl; ucrit << myname << "(execute): catch " << ex.what() << endl;
} }
if( !active ) if( !active )
return; return;
msleep( sleep_msec ); msleep( sleep_msec );
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UObject_SK::setValue( UniSetTypes::ObjectId _sid, long _val ) void UObject_SK::setValue( UniSetTypes::ObjectId _sid, long _val )
{ {
ui->setValue(_sid,_val); ui->setValue(_sid,_val);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UObject_SK::updateOutputs( bool _force ) void UObject_SK::updateOutputs( bool _force )
{ {
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UObject_SK::preSensorInfo( const UniSetTypes::SensorMessage* _sm ) void UObject_SK::preSensorInfo( const UniSetTypes::SensorMessage* _sm )
{ {
sensorInfo(_sm); sensorInfo(_sm);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UObject_SK::askSensor( UniSetTypes::ObjectId _sid, UniversalIO::UIOCommand _cmd, UniSetTypes::ObjectId _node ) void UObject_SK::askSensor( UniSetTypes::ObjectId _sid, UniversalIO::UIOCommand _cmd, UniSetTypes::ObjectId _node )
{ {
ui->askRemoteSensor(_sid,_cmd,_node,getId()); ui->askRemoteSensor(_sid,_cmd,_node,getId());
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
long UObject_SK::getValue( UniSetTypes::ObjectId _sid ) long UObject_SK::getValue( UniSetTypes::ObjectId _sid )
{ {
try try
{ {
return ui->getValue(_sid); return ui->getValue(_sid);
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
ucrit << myname << "(getValue): " << ex << endl; ucrit << myname << "(getValue): " << ex << endl;
throw; throw;
} }
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UObject_SK::preAskSensors( UniversalIO::UIOCommand _cmd ) void UObject_SK::preAskSensors( UniversalIO::UIOCommand _cmd )
{ {
PassiveTimer ptAct(activateTimeout); PassiveTimer ptAct(activateTimeout);
while( !activated && !ptAct.checkTime() ) while( !activated && !ptAct.checkTime() )
{ {
cout << myname << "(preAskSensors): wait activate..." << endl; cout << myname << "(preAskSensors): wait activate..." << endl;
msleep(300); msleep(300);
if( activated ) if( activated )
break; break;
} }
if( !activated ) if( !activated )
ucrit << myname ucrit << myname
<< "(preAskSensors): ************* don`t activated?! ************" << endl; << "(preAskSensors): ************* don`t activated?! ************" << endl;
for( ;; ) for( ;; )
{ {
try try
{ {
return; return;
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
ucrit << myname << "(preAskSensors): " << ex << endl; ucrit << myname << "(preAskSensors): " << ex << endl;
} }
catch( const std::exception&ex ) catch( const std::exception&ex )
{ {
ucrit << myname << "(execute): catch " << ex.what() << endl; ucrit << myname << "(execute): catch " << ex.what() << endl;
} }
msleep(askPause); msleep(askPause);
} }
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UObject_SK::setMsg( UniSetTypes::ObjectId _code, bool _state ) void UObject_SK::setMsg( UniSetTypes::ObjectId _code, bool _state )
{ {
// блокируем сброс (т.к. он автоматически по таймеру) // блокируем сброс (т.к. он автоматически по таймеру)
if( !_state ) if( !_state )
{ {
ptResetMsg.reset(); ptResetMsg.reset();
return; return;
} }
alarm( _code, _state ); alarm( _code, _state );
ptResetMsg.reset(); ptResetMsg.reset();
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
...@@ -37,12 +37,13 @@ class IORFile ...@@ -37,12 +37,13 @@ class IORFile
public: public:
IORFile(); IORFile();
std::string getIOR( const ObjectId id ) const; static std::string getIOR( const ObjectId id );
void setIOR( const ObjectId id, const std::string& sior ) const; static void setIOR( const ObjectId id, const std::string& sior );
void unlinkIOR( const ObjectId id ) const; static void unlinkIOR( const ObjectId id );
static std::string getFileName( const ObjectId id );
protected: protected:
std::string genFName( const ObjectId id ) const;
private: private:
}; };
......
...@@ -37,9 +37,9 @@ IORFile::IORFile() ...@@ -37,9 +37,9 @@ IORFile::IORFile()
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
string IORFile::getIOR( const ObjectId id ) const string IORFile::getIOR( const ObjectId id )
{ {
string fname( genFName(id) ); string fname( getFileName(id) );
ifstream ior_file(fname.c_str()); ifstream ior_file(fname.c_str());
string sior; string sior;
ior_file >> sior; ior_file >> sior;
...@@ -47,9 +47,9 @@ string IORFile::getIOR( const ObjectId id ) const ...@@ -47,9 +47,9 @@ string IORFile::getIOR( const ObjectId id ) const
return std::move(sior); return std::move(sior);
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
void IORFile::setIOR( const ObjectId id, const string& sior ) const void IORFile::setIOR( const ObjectId id, const string& sior )
{ {
string fname( genFName(id) ); string fname( getFileName(id) );
ofstream ior_file(fname.c_str(), ios::out | ios::trunc); ofstream ior_file(fname.c_str(), ios::out | ios::trunc);
if( !ior_file ) if( !ior_file )
...@@ -62,13 +62,13 @@ void IORFile::setIOR( const ObjectId id, const string& sior ) const ...@@ -62,13 +62,13 @@ void IORFile::setIOR( const ObjectId id, const string& sior ) const
ior_file.close(); ior_file.close();
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
void IORFile::unlinkIOR( const ObjectId id ) const void IORFile::unlinkIOR( const ObjectId id )
{ {
string fname( genFName(id) ); string fname( getFileName(id) );
unlink(fname.c_str()); unlink(fname.c_str());
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
string IORFile::genFName( const ObjectId id ) const string IORFile::getFileName( const ObjectId id )
{ {
ostringstream fname; ostringstream fname;
fname << uniset_conf()->getLockDir() << id; fname << uniset_conf()->getLockDir() << id;
......
...@@ -17,12 +17,8 @@ TEST_CASE("IORFile", "[iorfile][basic]" ) ...@@ -17,12 +17,8 @@ TEST_CASE("IORFile", "[iorfile][basic]" )
ior.setIOR(testID,iorstr); ior.setIOR(testID,iorstr);
REQUIRE( ior.getIOR(testID) == iorstr ); REQUIRE( ior.getIOR(testID) == iorstr );
// здесь выносим "наружу" немного "внутренней кухни" IORFile, CHECK( file_exist(ior.getFileName(testID)) );
// т.к. снаружи не известно как формируется "название файла"
ostringstream s;
s << uniset_conf()->getLockDir() << testID;
CHECK( file_exist(s.str()) );
ior.unlinkIOR(testID); ior.unlinkIOR(testID);
CHECK_FALSE( file_exist(s.str()) ); CHECK_FALSE( file_exist(ior.getFileName(testID)) );
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment