Commit 1ab76485 authored by Pavel Vainerman's avatar Pavel Vainerman

В целях оптимизации: ОТКАЗАЛСЯ от (так и не ставшей необходимой) идеи "alias"…

В целях оптимизации: ОТКАЗАЛСЯ от (так и не ставшей необходимой) идеи "alias" для "node", и соответственно избавился от необходимости передавать и работать в IOContoller(IONotifyController,ShraredMemory) с ПАРОЙ id,node НО nеперь стало НЕЛЬЗЯ на одном узле запустить "ДВА НАБОРА ОДИНАКОВЫХ ДАТЧИКОВ ОТЛИЧАЮЩИХСЯ ТОЛЬКО УЗЛОМ(node)".
parent b11ac98e
...@@ -62,24 +62,24 @@ interface IOController_i : UniSetManager_i ...@@ -62,24 +62,24 @@ interface IOController_i : UniSetManager_i
UniSetTypes::ObjectId node; /*!< узел на котором он находится */ UniSetTypes::ObjectId node; /*!< узел на котором он находится */
}; };
long getValue(in SensorInfo si) raises(NameNotFound,Undefined); long getValue(in UniSetTypes::ObjectId sid) raises(NameNotFound,Undefined);
void setValue(in SensorInfo si, in long value, void setValue(in UniSetTypes::ObjectId sid, in long value,
in UniSetTypes::ObjectId sup_id) raises(NameNotFound); in UniSetTypes::ObjectId sup_id) raises(NameNotFound);
// установка неопределённого состояния // установка неопределённого состояния
// (пока работает только для аналоговых датчиков) // (пока работает только для аналоговых датчиков)
void setUndefinedState(in SensorInfo si, in boolean undefined, in UniSetTypes::ObjectId sup_id ) void setUndefinedState(in UniSetTypes::ObjectId sid, in boolean undefined, in UniSetTypes::ObjectId sup_id )
raises(NameNotFound); raises(NameNotFound);
// fast version (не вырабатывает исключения) // fast version (не вырабатывает исключения)
oneway void fastSetValue(in SensorInfo si, in long value, in UniSetTypes::ObjectId sup_id); oneway void fastSetValue(in UniSetTypes::ObjectId sid, in long value, in UniSetTypes::ObjectId sup_id);
UniversalIO::IOType getIOType(in SensorInfo si) raises(NameNotFound); UniversalIO::IOType getIOType(in UniSetTypes::ObjectId sid) raises(NameNotFound);
// --- Интерфейс для конфигурирования --- // --- Интерфейс для конфигурирования ---
/*! Получение неколиброванного значения */ /*! Получение неколиброванного значения */
long getRawValue( in SensorInfo si ) raises(NameNotFound); long getRawValue( in UniSetTypes::ObjectId sid ) raises(NameNotFound);
struct CalibrateInfo struct CalibrateInfo
{ {
...@@ -90,8 +90,8 @@ interface IOController_i : UniSetManager_i ...@@ -90,8 +90,8 @@ interface IOController_i : UniSetManager_i
short precision; /*!< точность */ short precision; /*!< точность */
}; };
void calibrate( in SensorInfo si, in CalibrateInfo ci, in UniSetTypes::ObjectId adminId ) raises(NameNotFound); void calibrate( in UniSetTypes::ObjectId sid, in CalibrateInfo ci, in UniSetTypes::ObjectId adminId ) raises(NameNotFound);
CalibrateInfo getCalibrateInfo( in SensorInfo si ) raises(NameNotFound); CalibrateInfo getCalibrateInfo( in UniSetTypes::ObjectId sid ) raises(NameNotFound);
// --- Интерфес получения информации о всех датчиках --- // --- Интерфес получения информации о всех датчиках ---
/*! Информация об аналоговом датчике */ /*! Информация об аналоговом датчике */
...@@ -114,7 +114,7 @@ interface IOController_i : UniSetManager_i ...@@ -114,7 +114,7 @@ interface IOController_i : UniSetManager_i
typedef sequence<SensorIOInfo> SensorInfoSeq; typedef sequence<SensorIOInfo> SensorInfoSeq;
SensorInfoSeq getSensorsMap(); SensorInfoSeq getSensorsMap();
SensorIOInfo getSensorIOInfo( in SensorInfo si ) raises(NameNotFound); SensorIOInfo getSensorIOInfo( in UniSetTypes::ObjectId sid ) raises(NameNotFound);
// -- Функции работы со списком датчиков -- // -- Функции работы со списком датчиков --
...@@ -146,7 +146,7 @@ interface IOController_i : UniSetManager_i ...@@ -146,7 +146,7 @@ interface IOController_i : UniSetManager_i
long tv_usec; /*!< время последнего изменения датчика, мксек (gettimeofday) */ long tv_usec; /*!< время последнего изменения датчика, мксек (gettimeofday) */
}; };
ShortIOInfo getChangedTime(in SensorInfo si) raises(NameNotFound); ShortIOInfo getChangedTime( in UniSetTypes::ObjectId sid ) raises(NameNotFound);
/*! Информация о дискретном датчике */ /*! Информация о дискретном датчике */
...@@ -183,7 +183,7 @@ interface IONotifyController_i : IOController_i ...@@ -183,7 +183,7 @@ interface IONotifyController_i : IOController_i
* Позволяет заказывать как дискретные так и аналоговые датчики * Позволяет заказывать как дискретные так и аналоговые датчики
* \sa UniversalIO::UniversalIOController::askSensor() * \sa UniversalIO::UniversalIOController::askSensor()
*/ */
void askSensor(in SensorInfo si, in UniSetTypes::ConsumerInfo ci, in UniversalIO::UIOCommand cmd ) raises(NameNotFound,IOBadParam); void askSensor(in UniSetTypes::ObjectId sid, in UniSetTypes::ConsumerInfo ci, in UniversalIO::UIOCommand cmd ) raises(NameNotFound,IOBadParam);
/*! /*!
Заказ сразу списка объектов. Заказ сразу списка объектов.
...@@ -225,7 +225,7 @@ interface IONotifyController_i : IOController_i ...@@ -225,7 +225,7 @@ interface IONotifyController_i : IOController_i
* Если invert=false, порог срабатывает при условии >= hilimit и отпускается при <= lowlimit * Если invert=false, порог срабатывает при условии >= hilimit и отпускается при <= lowlimit
* Если invert=true, порог срабатывает при условии <= lowlimit и отпускается при <= hilimit * Если invert=true, порог срабатывает при условии <= lowlimit и отпускается при <= hilimit
*/ */
void askThreshold(in SensorInfo si, in UniSetTypes::ConsumerInfo ci, in UniSetTypes::ThresholdId tid, void askThreshold(in UniSetTypes::ObjectId sid, in UniSetTypes::ConsumerInfo ci, in UniSetTypes::ThresholdId tid,
in long lowLimit, in long hiLimit, in boolean invert, in long lowLimit, in long hiLimit, in boolean invert,
in UniversalIO::UIOCommand cmd ) raises(NameNotFound, IOBadParam, BadRange); in UniversalIO::UIOCommand cmd ) raises(NameNotFound, IOBadParam, BadRange);
...@@ -233,7 +233,7 @@ interface IONotifyController_i : IOController_i ...@@ -233,7 +233,7 @@ interface IONotifyController_i : IOController_i
/*! Получение информации о пороге /*! Получение информации о пороге
* Т.к. пороги могут иметь одинаковый tid для разных аналоговых датчиков, то передаётся и SensorInfo * Т.к. пороги могут иметь одинаковый tid для разных аналоговых датчиков, то передаётся и SensorInfo
*/ */
ThresholdInfo getThresholdInfo( in SensorInfo si, in UniSetTypes::ThresholdId tid ) raises(NameNotFound); ThresholdInfo getThresholdInfo( in UniSetTypes::ObjectId sid, in UniSetTypes::ThresholdId tid ) raises(NameNotFound);
struct ThresholdList struct ThresholdList
{ {
...@@ -246,7 +246,7 @@ interface IONotifyController_i : IOController_i ...@@ -246,7 +246,7 @@ interface IONotifyController_i : IOController_i
typedef sequence<ThresholdList> ThresholdsListSeq; typedef sequence<ThresholdList> ThresholdsListSeq;
/*! получить список порогов для датчка "si" */ /*! получить список порогов для датчка "si" */
ThresholdList getThresholds( in SensorInfo si ) raises(NameNotFound); ThresholdList getThresholds( in UniSetTypes::ObjectId sid ) raises(NameNotFound);
/*! получить список ВСЕХ датчиков по которым созданы пороги */ /*! получить список ВСЕХ датчиков по которым созданы пороги */
ThresholdsListSeq getThresholdsList(); ThresholdsListSeq getThresholdsList();
......
...@@ -31,7 +31,7 @@ void SharedMemory::help_print( int argc, const char* const* argv ) ...@@ -31,7 +31,7 @@ void SharedMemory::help_print( int argc, const char* const* argv )
cout << "--pulsar-msec - период 'мигания'. По умолчанию: 5000." << endl; cout << "--pulsar-msec - период 'мигания'. По умолчанию: 5000." << endl;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
SharedMemory::SharedMemory( ObjectId id, string datafile, std::string confname ): SharedMemory::SharedMemory( ObjectId id, const std::string& datafile, const std::string& confname ):
IONotifyController_LT(id), IONotifyController_LT(id),
heartbeatCheckTime(5000), heartbeatCheckTime(5000),
histSaveTime(0), histSaveTime(0),
...@@ -101,20 +101,18 @@ SharedMemory::SharedMemory( ObjectId id, string datafile, std::string confname ) ...@@ -101,20 +101,18 @@ SharedMemory::SharedMemory( ObjectId id, string datafile, std::string confname )
activateTimeout = conf->getArgPInt("--activate-timeout", 10000); activateTimeout = conf->getArgPInt("--activate-timeout", 10000);
siPulsar.id = DefaultObjectId; sidPulsar = DefaultObjectId;
siPulsar.node = DefaultObjectId;
string p = conf->getArgParam("--pulsar-id",it.getProp("pulsar_id")); string p = conf->getArgParam("--pulsar-id",it.getProp("pulsar_id"));
if( !p.empty() ) if( !p.empty() )
{ {
siPulsar.id = conf->getSensorID(p); sidPulsar = conf->getSensorID(p);
if( siPulsar.id == DefaultObjectId ) if( sidPulsar == DefaultObjectId )
{ {
ostringstream err; ostringstream err;
err << myname << ": ID not found ('pulsar') for " << p; err << myname << ": ID not found ('pulsar') for " << p;
dcrit << myname << "(init): " << err.str() << endl; dcrit << myname << "(init): " << err.str() << endl;
throw SystemError(err.str()); throw SystemError(err.str());
} }
siPulsar.node = conf->getLocalNode();
msecPulsar = conf->getArgPInt("--pulsar-msec",it.getProp("pulsar_msec"), 5000); msecPulsar = conf->getArgPInt("--pulsar-msec",it.getProp("pulsar_msec"), 5000);
} }
} }
...@@ -149,11 +147,11 @@ void SharedMemory::timerInfo( const TimerMessage *tm ) ...@@ -149,11 +147,11 @@ void SharedMemory::timerInfo( const TimerMessage *tm )
saveHistory(); saveHistory();
else if( tm->id == tmPulsar ) else if( tm->id == tmPulsar )
{ {
if( siPulsar.id != DefaultObjectId ) if( sidPulsar != DefaultObjectId )
{ {
bool st = (bool)localGetValue(itPulsar,siPulsar); bool st = (bool)localGetValue(itPulsar,sidPulsar);
st ^= true; st ^= true;
localSetValue(itPulsar,siPulsar, (st ? 1:0), getId() ); localSetValue(itPulsar,sidPulsar, (st ? 1:0), getId() );
} }
} }
} }
...@@ -283,24 +281,19 @@ void SharedMemory::checkHeartBeat() ...@@ -283,24 +281,19 @@ void SharedMemory::checkHeartBeat()
return; return;
} }
IOController_i::SensorInfo si;
si.node = conf->getLocalNode();
bool wdtpingOK = true; bool wdtpingOK = true;
for( HeartBeatList::iterator it=hlist.begin(); it!=hlist.end(); ++it ) for( HeartBeatList::iterator it=hlist.begin(); it!=hlist.end(); ++it )
{ {
try try
{ {
si.id = it->a_sid; long val = localGetValue(it->ioit,it->a_sid);
long val = localGetValue(it->ioit,si);
val --; val --;
if( val < -1 ) if( val < -1 )
val = -1; val = -1;
localSetValue(it->ioit,si,val,getId()); localSetValue(it->ioit,it->a_sid,val,getId());
si.id = it->d_sid; localSetValue(it->ioit,it->d_sid,( val >= 0 ? true:false),getId());
localSetValue(it->ioit,si,( val >= 0 ? true:false),getId());
// проверяем нужна ли "перезагрузка" по данному датчику // проверяем нужна ли "перезагрузка" по данному датчику
if( wdt && it->ptReboot.getInterval() ) if( wdt && it->ptReboot.getInterval() )
...@@ -642,16 +635,13 @@ void SharedMemory::saveHistory() ...@@ -642,16 +635,13 @@ void SharedMemory::saveHistory()
for( HistoryList::iterator hit=it->hlst.begin(); hit!=it->hlst.end(); ++hit ) for( HistoryList::iterator hit=it->hlst.begin(); hit!=it->hlst.end(); ++hit )
{ {
if( hit->ioit != myioEnd() ) if( hit->ioit != myioEnd() )
hit->add( localGetValue( hit->ioit, hit->ioit->second.si ), it->size ); hit->add( localGetValue( hit->ioit, hit->ioit->second.si.id ), it->size );
else else
{ {
IOController_i::SensorInfo si;
si.id = hit->id;
si.node = conf->getLocalNode();
try try
{ {
hit->add( localGetValue( hit->ioit, si ), it->size ); hit->add( localGetValue( hit->ioit, hit->id ), it->size );
continue; continue;
} }
catch(...){} catch(...){}
......
...@@ -151,7 +151,7 @@ ...@@ -151,7 +151,7 @@
держиться равным "1" (т.е. 1 - процесс "жив"). Если процесс "вылетает" и перестаёт обновлять свой счётчик, держиться равным "1" (т.е. 1 - процесс "жив"). Если процесс "вылетает" и перестаёт обновлять свой счётчик,
то через некоторое количество тактов его счётчик становится меньше нуля. Как только это происходит, SM фиксирует, то через некоторое количество тактов его счётчик становится меньше нуля. Как только это происходит, SM фиксирует,
"недоступность" процесса, и выставляет дискретный датчик в ноль (т.е. 0 - процесс вылетел(недоступен)). "недоступность" процесса, и выставляет дискретный датчик в ноль (т.е. 0 - процесс вылетел(недоступен)).
При этом, имеется возможность для некоторых процессов (обычно для особо важных, без которых работа невозможна) указать, При этом, имеется возможность для некоторых процессов (обычно для особо важных, без которых работа невозможна) указать,
время ожидания "перезапуска процесса"(heartbeat_reboot_msec) и в случае если для SM настроена работа с WDT-таймером время ожидания "перезапуска процесса"(heartbeat_reboot_msec) и в случае если для SM настроена работа с WDT-таймером
и за заданное время процесс не перезапустился (не обновил свой счётчик), происходит и за заданное время процесс не перезапустился (не обновил свой счётчик), происходит
...@@ -163,11 +163,11 @@ ...@@ -163,11 +163,11 @@
<br>\b heartbeat_node="ses" - фильтрующее поле (см. --heartbeat-node) <br>\b heartbeat_node="ses" - фильтрующее поле (см. --heartbeat-node)
<br>\b heartbeat_reboot_msec - время ожидания перезапуска процесса. Это необязательный параметр, задаётся только в случае <br>\b heartbeat_reboot_msec - время ожидания перезапуска процесса. Это необязательный параметр, задаётся только в случае
необходимости перезапуска контроллера. необходимости перезапуска контроллера.
Пример задания датчиков "сердцебияния": Пример задания датчиков "сердцебияния":
<br>_31_04_AS - аналоговый (счётчик) <br>_31_04_AS - аналоговый (счётчик)
<br>_41_04_S - дискретный ("доступность процесса") <br>_41_04_S - дискретный ("доступность процесса")
\code \code
<item default="10" heartbeat="1" heartbeat_ds_name="_41_04_S" heartbeat_node="ses" heartbeat_reboot_msec="10000" <item default="10" heartbeat="1" heartbeat_ds_name="_41_04_S" heartbeat_node="ses" heartbeat_reboot_msec="10000"
id="103104" iotype="AI" name="_31_04_AS" textname="SES: IO heartbeat"/> id="103104" iotype="AI" name="_31_04_AS" textname="SES: IO heartbeat"/>
...@@ -177,8 +177,8 @@ ...@@ -177,8 +177,8 @@
<msg mtype="1" text="КСЭС: отключился ввод\вывод" value="0"/> <msg mtype="1" text="КСЭС: отключился ввод\вывод" value="0"/>
</MessagesList> </MessagesList>
</item> </item>
\endcode \endcode
\section sec_SM_History Механизм аварийного дампа \section sec_SM_History Механизм аварийного дампа
"Аварийный дамп" представляет из себя набор циклических буферов "Аварийный дамп" представляет из себя набор циклических буферов
...@@ -216,22 +216,22 @@ ...@@ -216,22 +216,22 @@
size - количество точек в хранимой истории size - количество точек в хранимой истории
filter - поле используемое в качестве фильтра, определяющего датчики filter - поле используемое в качестве фильтра, определяющего датчики
входящие в данную группу (историю). входящие в данную группу (историю).
\endcode \endcode
Каждый датчик может входить в любое количество групп (историй). Каждый датчик может входить в любое количество групп (историй).
Механизм фукнционирует по следующей логике: Механизм фукнционирует по следующей логике:
При запуске происходит считывание параметров секции <History> При запуске происходит считывание параметров секции <History>
и заполнение соответствующих структур хранения. При этом происходит и заполнение соответствующих структур хранения. При этом происходит
проход по секции <sensors> и если встречается "не пустое" поле заданное проход по секции <sensors> и если встречается "не пустое" поле заданное
в качестве фильтра (\b filter), датчик включается в соответствующую историю. в качестве фильтра (\b filter), датчик включается в соответствующую историю.
Далее каждые \b savetime мсек происходит запись очередной точки истории. Далее каждые \b savetime мсек происходит запись очередной точки истории.
При этом в конец буфера добавляется новое (текущее) значение датчика, При этом в конец буфера добавляется новое (текущее) значение датчика,
а одно устаревшее удаляется, тем самым всегда поддерживается буфер не более а одно устаревшее удаляется, тем самым всегда поддерживается буфер не более
\b size точек. \b size точек.
Помимо этого в фукнциях изменения датчиков (saveXXX, setXXX) отслеживается Помимо этого в фукнциях изменения датчиков (saveXXX, setXXX) отслеживается
изменение состояния "детонаторов". Если срабатывает заданое условие для изменение состояния "детонаторов". Если срабатывает заданое условие для
"сброса" дампа, инициируется сигнал, в который передаётся идентификатор истории "сброса" дампа, инициируется сигнал, в который передаётся идентификатор истории
...@@ -251,13 +251,12 @@ ...@@ -251,13 +251,12 @@
(реализованное в базовом классе IONotifyController). (реализованное в базовом классе IONotifyController).
Параметр командной строки \b --db-logging 1 позволяет включить этот механизм Параметр командной строки \b --db-logging 1 позволяет включить этот механизм
(в свою очередь работа с БД требует отдельной настройки). (в свою очередь работа с БД требует отдельной настройки).
*/ */
class SharedMemory: class SharedMemory:
public IONotifyController_LT public IONotifyController_LT
{ {
public: public:
SharedMemory( UniSetTypes::ObjectId id, std::string datafile, std::string confname="" ); SharedMemory( UniSetTypes::ObjectId id, const std::string& datafile, const std::string& confname="" );
virtual ~SharedMemory(); virtual ~SharedMemory();
/*! глобальная функция для инициализации объекта */ /*! глобальная функция для инициализации объекта */
...@@ -417,9 +416,9 @@ class SharedMemory: ...@@ -417,9 +416,9 @@ class SharedMemory:
int evntPause; int evntPause;
int activateTimeout; int activateTimeout;
virtual void loggingInfo(UniSetTypes::SensorMessage& sm); virtual void loggingInfo( UniSetTypes::SensorMessage& sm );
virtual void dumpOrdersList(const IOController_i::SensorInfo& si, const IONotifyController::ConsumerList& lst){} virtual void dumpOrdersList( const UniSetTypes::ObjectId sid, const IONotifyController::ConsumerList& lst ){}
virtual void dumpThresholdList(const IOController_i::SensorInfo& si, const IONotifyController::ThresholdExtList& lst){} virtual void dumpThresholdList( const UniSetTypes::ObjectId sid, const IONotifyController::ThresholdExtList& lst ){}
bool dblogging; bool dblogging;
...@@ -434,7 +433,7 @@ class SharedMemory: ...@@ -434,7 +433,7 @@ class SharedMemory:
bool isActivated(); bool isActivated();
IOStateList::iterator itPulsar; IOStateList::iterator itPulsar;
IOController_i::SensorInfo siPulsar; UniSetTypes::ObjectId sidPulsar;
int msecPulsar; int msecPulsar;
private: private:
......
...@@ -18,7 +18,7 @@ class SMInterface ...@@ -18,7 +18,7 @@ class SMInterface
void setUndefinedState( IOController_i::SensorInfo& si, bool undefined, UniSetTypes::ObjectId supplier ); void setUndefinedState( IOController_i::SensorInfo& si, bool undefined, UniSetTypes::ObjectId supplier );
long getValue ( UniSetTypes::ObjectId id ); long getValue ( UniSetTypes::ObjectId id );
void askSensor( UniSetTypes::ObjectId id, UniversalIO::UIOCommand cmd, void askSensor( UniSetTypes::ObjectId id, UniversalIO::UIOCommand cmd,
UniSetTypes::ObjectId backid = UniSetTypes::DefaultObjectId ); UniSetTypes::ObjectId backid = UniSetTypes::DefaultObjectId );
...@@ -38,11 +38,11 @@ class SMInterface ...@@ -38,11 +38,11 @@ class SMInterface
*/ */
void localSetUndefinedState( IOController::IOStateList::iterator& it, void localSetUndefinedState( IOController::IOStateList::iterator& it,
bool undefined, UniSetTypes::ObjectId sid ); bool undefined, UniSetTypes::ObjectId sid );
// специальные функции // специальные функции
IOController::IOStateList::iterator ioEnd(); IOController::IOStateList::iterator ioEnd();
void initIterator( IOController::IOStateList::iterator& it ); void initIterator( IOController::IOStateList::iterator& it );
bool exist(); bool exist();
bool waitSMready( int msec, int pause=5000 ); bool waitSMready( int msec, int pause=5000 );
bool waitSMworking( UniSetTypes::ObjectId, int msec, int pause=3000 ); bool waitSMworking( UniSetTypes::ObjectId, int msec, int pause=3000 );
...@@ -51,7 +51,7 @@ class SMInterface ...@@ -51,7 +51,7 @@ class SMInterface
inline UniSetTypes::ObjectId ID(){ return myid; } inline UniSetTypes::ObjectId ID(){ return myid; }
inline IONotifyController* SM(){ return ic; } inline IONotifyController* SM(){ return ic; }
inline UniSetTypes::ObjectId getSMID(){ return shmID; } inline UniSetTypes::ObjectId getSMID(){ return shmID; }
protected: protected:
IONotifyController* ic; IONotifyController* ic;
UInterface* ui; UInterface* ui;
......
...@@ -99,63 +99,56 @@ SMInterface::~SMInterface() ...@@ -99,63 +99,56 @@ SMInterface::~SMInterface()
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
void SMInterface::setValue ( UniSetTypes::ObjectId id, long value ) void SMInterface::setValue( UniSetTypes::ObjectId id, long value )
{ {
IOController_i::SensorInfo si;
si.id = id;
si.node = conf->getLocalNode();
if( ic ) if( ic )
{ {
BEG_FUNC1(SMInterface::setValue) BEG_FUNC1(SMInterface::setValue)
ic->fastSetValue(si,value,myid); ic->fastSetValue(id,value,myid);
return; return;
END_FUNC(SMInterface::setValue) END_FUNC(SMInterface::setValue)
} }
IOController_i::SensorInfo si;
si.id = id;
si.node = conf->getLocalNode();
BEG_FUNC1(SMInterface::setValue) BEG_FUNC1(SMInterface::setValue)
ui->fastSetValue(si,value,myid); ui->fastSetValue(si,value,myid);
return; return;
END_FUNC(SMInterface::setValue) END_FUNC(SMInterface::setValue)
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
long SMInterface::getValue ( UniSetTypes::ObjectId id ) long SMInterface::getValue( UniSetTypes::ObjectId id )
{ {
IOController_i::SensorInfo si;
si.id = id;
si.node = conf->getLocalNode();
if( ic ) if( ic )
{ {
BEG_FUNC1(SMInterface::getValue) BEG_FUNC1(SMInterface::getValue)
return ic->getValue(si); return ic->getValue(id);
END_FUNC(SMInterface::getValue) END_FUNC(SMInterface::getValue)
} }
BEG_FUNC1(SMInterface::getValue) BEG_FUNC1(SMInterface::getValue)
return ui->getValue(si.id,si.node); return ui->getValue(id);
END_FUNC(SMInterface::getValue) END_FUNC(SMInterface::getValue)
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
void SMInterface::askSensor( UniSetTypes::ObjectId id, UniversalIO::UIOCommand cmd, UniSetTypes::ObjectId backid ) void SMInterface::askSensor( UniSetTypes::ObjectId id, UniversalIO::UIOCommand cmd, UniSetTypes::ObjectId backid )
{ {
IOController_i::SensorInfo_var si;
si->id = id;
si->node = conf->getLocalNode();
ConsumerInfo_var ci; ConsumerInfo_var ci;
ci->id = (backid==DefaultObjectId) ? myid : backid; ci->id = (backid==DefaultObjectId) ? myid : backid;
ci->node = conf->getLocalNode(); ci->node = conf->getLocalNode();
if( ic ) if( ic )
{ {
BEG_FUNC1(SMInterface::askSensor) BEG_FUNC1(SMInterface::askSensor)
ic->askSensor(si, ci, cmd ); ic->askSensor(id, ci, cmd);
return; return;
END_FUNC(SMInterface::askSensor) END_FUNC(SMInterface::askSensor)
} }
BEG_FUNC1(SMInterface::askSensor) BEG_FUNC1(SMInterface::askSensor)
ui->askRemoteSensor(si->id,cmd,si->node,ci->id); ui->askRemoteSensor(id,cmd,conf->getLocalNode(),ci->id);
return; return;
END_FUNC(SMInterface::askSensor) END_FUNC(SMInterface::askSensor)
} }
...@@ -180,7 +173,7 @@ IONotifyController_i::ThresholdsListSeq* SMInterface::getThresholdsList() ...@@ -180,7 +173,7 @@ IONotifyController_i::ThresholdsListSeq* SMInterface::getThresholdsList()
{ {
BEG_FUNC1(SMInterface::getThresholdsList) BEG_FUNC1(SMInterface::getThresholdsList)
return ic->getThresholdsList(); return ic->getThresholdsList();
END_FUNC(SMInterface::getThresholdsList) END_FUNC(SMInterface::getThresholdsList)
} }
BEG_FUNC(SMInterface::getThresholdsList) BEG_FUNC(SMInterface::getThresholdsList)
...@@ -194,12 +187,12 @@ void SMInterface::setUndefinedState( IOController_i::SensorInfo& si, bool undefi ...@@ -194,12 +187,12 @@ void SMInterface::setUndefinedState( IOController_i::SensorInfo& si, bool undefi
if( ic ) if( ic )
{ {
BEG_FUNC1(SMInterface::setUndefinedState) BEG_FUNC1(SMInterface::setUndefinedState)
ic->setUndefinedState(si,undefined,sup_id); ic->setUndefinedState(si.id,undefined,sup_id);
return; return;
END_FUNC(SMInterface::setUndefinedState) END_FUNC(SMInterface::setUndefinedState)
} }
BEG_FUNC(SMInterface::setUndefinedState) BEG_FUNC(SMInterface::setUndefinedState)
shm->setUndefinedState(si,undefined,sup_id); shm->setUndefinedState(si.id,undefined,sup_id);
return; return;
END_FUNC(SMInterface::setUndefinedState) END_FUNC(SMInterface::setUndefinedState)
} }
...@@ -232,7 +225,7 @@ void SMInterface::localSetValue( IOController::IOStateList::iterator& it, ...@@ -232,7 +225,7 @@ void SMInterface::localSetValue( IOController::IOStateList::iterator& it,
IOController_i::SensorInfo si; IOController_i::SensorInfo si;
si.id = sid; si.id = sid;
si.node = conf->getLocalNode(); si.node = conf->getLocalNode();
ic->localSetValue(it,si,value,sup_id); ic->localSetValue(it,si.id,value,sup_id);
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
long SMInterface::localGetValue( IOController::IOStateList::iterator& it, UniSetTypes::ObjectId sid ) long SMInterface::localGetValue( IOController::IOStateList::iterator& it, UniSetTypes::ObjectId sid )
...@@ -241,10 +234,7 @@ long SMInterface::localGetValue( IOController::IOStateList::iterator& it, UniSet ...@@ -241,10 +234,7 @@ long SMInterface::localGetValue( IOController::IOStateList::iterator& it, UniSet
return getValue( sid ); return getValue( sid );
// CHECK_IC_PTR(localGetValue) // CHECK_IC_PTR(localGetValue)
IOController_i::SensorInfo si; return ic->localGetValue(it,sid);
si.id = sid;
si.node = conf->getLocalNode();
return ic->localGetValue(it,si);
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
void SMInterface::localSetUndefinedState( IOController::IOStateList::iterator& it, void SMInterface::localSetUndefinedState( IOController::IOStateList::iterator& it,
...@@ -257,15 +247,12 @@ void SMInterface::localSetUndefinedState( IOController::IOStateList::iterator& i ...@@ -257,15 +247,12 @@ void SMInterface::localSetUndefinedState( IOController::IOStateList::iterator& i
IOController_i::SensorInfo si; IOController_i::SensorInfo si;
si.id = sid; si.id = sid;
si.node = conf->getLocalNode(); si.node = conf->getLocalNode();
setUndefinedState( si,undefined,myid); setUndefinedState(si,undefined,myid);
return; return;
} }
IOController_i::SensorInfo si; ic->localSetUndefinedState(it,undefined,sid);
si.id = sid; }
si.node = conf->getLocalNode();
ic->localSetUndefinedState(it,undefined,si);
}
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
void SMInterface::initIterator( IOController::IOStateList::iterator& it ) void SMInterface::initIterator( IOController::IOStateList::iterator& it )
{ {
...@@ -286,10 +273,10 @@ bool SMInterface::waitSMready( int ready_timeout, int pmsec ) ...@@ -286,10 +273,10 @@ bool SMInterface::waitSMready( int ready_timeout, int pmsec )
break; break;
} }
catch(...){} catch(...){}
msleep(pmsec); msleep(pmsec);
} }
return sm_ready; return sm_ready;
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
......
...@@ -46,7 +46,7 @@ void TestProc::sysCommand( const UniSetTypes::SystemMessage* sm ) ...@@ -46,7 +46,7 @@ void TestProc::sysCommand( const UniSetTypes::SystemMessage* sm )
askTimer(tmLogControl,checkLogTime); askTimer(tmLogControl,checkLogTime);
// В начальный момент времени блокирующий датчик =0, поэтому d2_check_s должен быть равен depend_off_value (-50). // В начальный момент времени блокирующий датчик =0, поэтому d2_check_s должен быть равен depend_off_value (-50).
cerr << myname << "(startup): check init depend: " << ( getValue(d2_check_s) == -50 ? "OK" : "FAIL" ) << endl; cerr << myname << "(startup): check init depend: " << ( getValue(d2_check_s) == -50 ? "ok" : "FAIL" ) << endl;
} }
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -73,7 +73,7 @@ void TestProc::sensorInfo( const SensorMessage *sm ) ...@@ -73,7 +73,7 @@ void TestProc::sensorInfo( const SensorMessage *sm )
} }
else if( sm->id == check_undef_s ) else if( sm->id == check_undef_s )
{ {
cerr << myname << "(sensorInfo): CHECK UNDEFINED STATE ==> " << (sm->undefined==undef ? "OK" : "FAIL") << endl; cerr << myname << "(sensorInfo): CHECK UNDEFINED STATE ==> " << (sm->undefined==undef ? "ok" : "FAIL") << endl;
} }
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -118,13 +118,13 @@ void TestProc::test_depend() ...@@ -118,13 +118,13 @@ void TestProc::test_depend()
setValue(depend_c,0); setValue(depend_c,0);
setValue(set_d1_check_s,test_val); setValue(set_d1_check_s,test_val);
setValue(set_d2_check_s,test_val); setValue(set_d2_check_s,test_val);
cerr << myname << ": check depend OFF: d1: " << ( getValue(d1_check_s) == 0 ? "OK" : "FAIL" ) << endl; cerr << myname << ": check depend OFF: d1: " << ( getValue(d1_check_s) == 0 ? "ok" : "FAIL" ) << endl;
cerr << myname << ": check depend OFF: d2: " << ( getValue(d2_check_s) == -50 ? "OK" : "FAIL" ) << endl; cerr << myname << ": check depend OFF: d2: " << ( getValue(d2_check_s) == -50 ? "ok" : "FAIL" ) << endl;
// set depend 1 // set depend 1
setValue(depend_c,1); setValue(depend_c,1);
cerr << myname << ": check depend ON: d1: " << ( getValue(d1_check_s) == test_val ? "OK" : "FAIL" ) << endl; cerr << myname << ": check depend ON: d1: " << ( getValue(d1_check_s) == test_val ? "ok" : "FAIL" ) << endl;
cerr << myname << ": check depend ON: d2: " << ( getValue(d2_check_s) == test_val ? "OK" : "FAIL" ) << endl; cerr << myname << ": check depend ON: d2: " << ( getValue(d2_check_s) == test_val ? "ok" : "FAIL" ) << endl;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void TestProc::test_undefined_state() void TestProc::test_undefined_state()
...@@ -145,10 +145,10 @@ void TestProc::test_thresholds() ...@@ -145,10 +145,10 @@ void TestProc::test_thresholds()
cerr << myname << ": Check thresholds..." << endl; cerr << myname << ": Check thresholds..." << endl;
setValue(t_set_c,0); setValue(t_set_c,0);
cerr << myname << ": check threshold OFF value: " << ( getValue(t_check_s) == 0 ? "OK" : "FAIL" ) << endl; cerr << myname << ": check threshold OFF value: " << ( getValue(t_check_s) == 0 ? "ok" : "FAIL" ) << endl;
setValue(t_set_c,378); setValue(t_set_c,378);
cerr << myname << ": check threshold ON value: " << ( getValue(t_check_s) == 1 ? "OK" : "FAIL" ) << endl; cerr << myname << ": check threshold ON value: " << ( getValue(t_check_s) == 1 ? "ok" : "FAIL" ) << endl;
cerr << myname << ": ask threshold and check.. " << endl; cerr << myname << ": ask threshold and check.. " << endl;
...@@ -159,10 +159,10 @@ void TestProc::test_thresholds() ...@@ -159,10 +159,10 @@ void TestProc::test_thresholds()
ui.askThreshold( t_set_c, tid, UniversalIO::UIONotify, 10, 20 ); ui.askThreshold( t_set_c, tid, UniversalIO::UIONotify, 10, 20 );
IONotifyController_i::ThresholdInfo ti = ui.getThresholdInfo(t_set_c,tid); IONotifyController_i::ThresholdInfo ti = ui.getThresholdInfo(t_set_c,tid);
cerr << myname << ": ask OFF threshold: " << ( ti.state == IONotifyController_i::NormalThreshold ? "OK" : "FAIL" ) << endl; cerr << myname << ": ask OFF threshold: " << ( ti.state == IONotifyController_i::NormalThreshold ? "ok" : "FAIL" ) << endl;
setValue(t_set_c, 25); setValue(t_set_c, 25);
ti = ui.getThresholdInfo(t_set_c,tid); ti = ui.getThresholdInfo(t_set_c,tid);
cerr << myname << ": ask ON threshold: " << ( ti.state == IONotifyController_i::HiThreshold ? "OK" : "FAIL" ) << endl; cerr << myname << ": ask ON threshold: " << ( ti.state == IONotifyController_i::HiThreshold ? "ok" : "FAIL" ) << endl;
} }
catch( Exception& ex ) catch( Exception& ex )
{ {
......
...@@ -118,7 +118,7 @@ namespace UniSetTypes ...@@ -118,7 +118,7 @@ namespace UniSetTypes
UniSetTypes::ObjectId getControllerID( const std::string& name ); UniSetTypes::ObjectId getControllerID( const std::string& name );
UniSetTypes::ObjectId getObjectID( const std::string& name ); UniSetTypes::ObjectId getObjectID( const std::string& name );
UniSetTypes::ObjectId getServiceID( const std::string& name ); UniSetTypes::ObjectId getServiceID( const std::string& name );
UniSetTypes::ObjectId getNodeID( const std::string& name, const std::string& alias="" ); UniSetTypes::ObjectId getNodeID( const std::string& name );
inline const std::string getConfFileName() const { return fileConfName; } inline const std::string getConfFileName() const { return fileConfName; }
inline std::string getImagesDir() const { return imagesDir; } // временно inline std::string getImagesDir() const { return imagesDir; } // временно
......
...@@ -41,25 +41,25 @@ class IOController: ...@@ -41,25 +41,25 @@ class IOController:
{ {
public: public:
IOController(const std::string& name, const std::string& section); IOController( const std::string& name, const std::string& section );
IOController(UniSetTypes::ObjectId id); IOController( const UniSetTypes::ObjectId id );
~IOController(); ~IOController();
virtual UniSetTypes::ObjectType getType(){ return UniSetTypes::ObjectType("IOController"); } virtual UniSetTypes::ObjectType getType(){ return UniSetTypes::ObjectType("IOController"); }
virtual CORBA::Long getValue( const IOController_i::SensorInfo& si ); virtual CORBA::Long getValue( UniSetTypes::ObjectId sid );
// -------------------- !!!!!!!!! --------------------------------- // -------------------- !!!!!!!!! ---------------------------------
// Реализуются конкретным i/o контроллером // Реализуются конкретным i/o контроллером
// Не забывайте писать реализацию этих функций // Не забывайте писать реализацию этих функций
virtual void setValue( const IOController_i::SensorInfo& si, CORBA::Long value, virtual void setValue( UniSetTypes::ObjectId sid, CORBA::Long value,
UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId ); UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId );
virtual void fastSetValue( const IOController_i::SensorInfo& si, CORBA::Long value, virtual void fastSetValue( UniSetTypes::ObjectId sid, CORBA::Long value,
UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId ); UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId );
// ---------------------------------------------------------------- // ----------------------------------------------------------------
virtual void setUndefinedState(const IOController_i::SensorInfo& si, virtual void setUndefinedState( UniSetTypes::ObjectId sid,
CORBA::Boolean undefined, CORBA::Boolean undefined,
UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId ); UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId );
...@@ -68,30 +68,30 @@ class IOController: ...@@ -68,30 +68,30 @@ class IOController:
virtual UniSetTypes::IDSeq* setOutputSeq( const IOController_i::OutSeq& lst, UniSetTypes::ObjectId sup_id ); virtual UniSetTypes::IDSeq* setOutputSeq( const IOController_i::OutSeq& lst, UniSetTypes::ObjectId sup_id );
// ---------------------------------------------------------------- // ----------------------------------------------------------------
virtual UniversalIO::IOType getIOType( const IOController_i::SensorInfo& si ); virtual UniversalIO::IOType getIOType( UniSetTypes::ObjectId sid );
virtual IOController_i::SensorInfoSeq* getSensorsMap(); virtual IOController_i::SensorInfoSeq* getSensorsMap();
virtual IOController_i::SensorIOInfo getSensorIOInfo( const IOController_i::SensorInfo& si ); virtual IOController_i::SensorIOInfo getSensorIOInfo( UniSetTypes::ObjectId sid );
virtual CORBA::Long getRawValue(const IOController_i::SensorInfo& si); virtual CORBA::Long getRawValue(UniSetTypes::ObjectId sid);
virtual void calibrate(const IOController_i::SensorInfo& si, virtual void calibrate(UniSetTypes::ObjectId sid,
const IOController_i::CalibrateInfo& ci, const IOController_i::CalibrateInfo& ci,
UniSetTypes::ObjectId adminId ); UniSetTypes::ObjectId adminId );
IOController_i::CalibrateInfo getCalibrateInfo( const IOController_i::SensorInfo& si ); IOController_i::CalibrateInfo getCalibrateInfo( UniSetTypes::ObjectId sid );
inline IOController_i::SensorInfo SensorInfo(UniSetTypes::ObjectId id, inline IOController_i::SensorInfo SensorInfo( const UniSetTypes::ObjectId sid,
UniSetTypes::ObjectId node=UniSetTypes::conf->getLocalNode()) const UniSetTypes::ObjectId node=UniSetTypes::conf->getLocalNode())
{ {
IOController_i::SensorInfo si; IOController_i::SensorInfo si;
si.id = id; si.id = sid;
si.node = node; si.node = node;
return si; return si;
}; };
UniSetTypes::Message::Priority getPriority( const IOController_i::SensorInfo& si, UniversalIO::IOType type ); UniSetTypes::Message::Priority getPriority( const UniSetTypes::ObjectId id );
virtual IOController_i::ShortIOInfo getChangedTime( const IOController_i::SensorInfo& si ); virtual IOController_i::ShortIOInfo getChangedTime( const UniSetTypes::ObjectId id );
virtual IOController_i::ShortMapSeq* getSensors(); virtual IOController_i::ShortMapSeq* getSensors();
...@@ -99,7 +99,7 @@ class IOController: ...@@ -99,7 +99,7 @@ class IOController:
// предварительное объявление, чтобы в структуре объявить итератор.. // предварительное объявление, чтобы в структуре объявить итератор..
struct USensorInfo; struct USensorInfo;
typedef std::map<UniSetTypes::KeyType, USensorInfo> IOStateList; typedef std::map<UniSetTypes::ObjectId, USensorInfo> IOStateList;
// ================== Достпуные сигналы ================= // ================== Достпуные сигналы =================
/*! /*!
...@@ -111,14 +111,13 @@ class IOController: ...@@ -111,14 +111,13 @@ class IOController:
typedef sigc::signal<void, IOStateList::iterator&, IOController*> ChangeUndefinedStateSignal; typedef sigc::signal<void, IOStateList::iterator&, IOController*> ChangeUndefinedStateSignal;
// signal по изменению определённого датчика // signal по изменению определённого датчика
ChangeSignal signal_change_value( UniSetTypes::ObjectId id, UniSetTypes::ObjectId node ); ChangeSignal signal_change_value( UniSetTypes::ObjectId sid );
ChangeSignal signal_change_value( const IOController_i::SensorInfo& si );
// signal по изменению любого датчика // signal по изменению любого датчика
ChangeSignal signal_change_value(); ChangeSignal signal_change_value();
// сигналы по изменению флага "неопределённое состояние" (обрыв датчика например) // сигналы по изменению флага "неопределённое состояние" (обрыв датчика например)
ChangeUndefinedStateSignal signal_change_undefined_state( UniSetTypes::ObjectId id, UniSetTypes::ObjectId node ); ChangeUndefinedStateSignal signal_change_undefined_state( UniSetTypes::ObjectId sid );
ChangeUndefinedStateSignal signal_change_undefined_state( const IOController_i::SensorInfo& si );
ChangeUndefinedStateSignal signal_change_undefined_state(); ChangeUndefinedStateSignal signal_change_undefined_state();
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
...@@ -175,10 +174,10 @@ class IOController: ...@@ -175,10 +174,10 @@ class IOController:
inline int ioCount(){ return ioList.size(); } inline int ioCount(){ return ioList.size(); }
// доступ к элементам через итератор // доступ к элементам через итератор
virtual void localSetValue( IOStateList::iterator& it, const IOController_i::SensorInfo& si, virtual void localSetValue( IOStateList::iterator& it, const UniSetTypes::ObjectId sid,
CORBA::Long value, UniSetTypes::ObjectId sup_id ); CORBA::Long value, UniSetTypes::ObjectId sup_id );
virtual long localGetValue( IOStateList::iterator& it, const IOController_i::SensorInfo& si ); virtual long localGetValue( IOStateList::iterator& it, const UniSetTypes::ObjectId sid );
/*! функция выставления признака неопределённого состояния для аналоговых датчиков /*! функция выставления признака неопределённого состояния для аналоговых датчиков
...@@ -186,7 +185,7 @@ class IOController: ...@@ -186,7 +185,7 @@ class IOController:
// см. логику выставления в функции localSaveState // см. логику выставления в функции localSaveState
*/ */
virtual void localSetUndefinedState( IOStateList::iterator& it, bool undefined, virtual void localSetUndefinedState( IOStateList::iterator& it, bool undefined,
const IOController_i::SensorInfo& si ); const UniSetTypes::ObjectId sid );
protected: protected:
// переопределяем для добавления вызова регистрации датчиков // переопределяем для добавления вызова регистрации датчиков
...@@ -211,9 +210,7 @@ class IOController: ...@@ -211,9 +210,7 @@ class IOController:
void ioRegistration( const USensorInfo&, bool force=false ); void ioRegistration( const USensorInfo&, bool force=false );
/*! разрегистрация датчика */ /*! разрегистрация датчика */
void ioUnRegistration( const IOController_i::SensorInfo& si ); void ioUnRegistration( const UniSetTypes::ObjectId sid );
UniSetTypes::Message::Priority getMessagePriority(UniSetTypes::KeyType k, UniversalIO::IOType type);
// ------------------------------ // ------------------------------
inline IOController_i::SensorIOInfo inline IOController_i::SensorIOInfo
...@@ -243,7 +240,7 @@ class IOController: ...@@ -243,7 +240,7 @@ class IOController:
}; };
//! сохранение информации об изменении состояния датчика //! сохранение информации об изменении состояния датчика
virtual void logging(UniSetTypes::SensorMessage& sm); virtual void logging( UniSetTypes::SensorMessage& sm );
//! сохранение состояния всех датчиков в БД //! сохранение состояния всех датчиков в БД
virtual void dumpToDB(); virtual void dumpToDB();
......
...@@ -132,20 +132,20 @@ class IONotifyController: ...@@ -132,20 +132,20 @@ class IONotifyController:
public: public:
IONotifyController(const std::string& name, const std::string& section, NCRestorer* dumper=0); IONotifyController(const std::string& name, const std::string& section, NCRestorer* dumper=0);
IONotifyController(UniSetTypes::ObjectId id, NCRestorer* dumper=0); IONotifyController(const UniSetTypes::ObjectId id, NCRestorer* dumper=0);
virtual ~IONotifyController(); virtual ~IONotifyController();
virtual UniSetTypes::ObjectType getType(){ return UniSetTypes::ObjectType("IONotifyController"); } virtual UniSetTypes::ObjectType getType(){ return UniSetTypes::ObjectType("IONotifyController"); }
virtual void askSensor(const IOController_i::SensorInfo& si, const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd); virtual void askSensor(const UniSetTypes::ObjectId sid, const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd);
virtual void askThreshold(const IOController_i::SensorInfo& si, const UniSetTypes::ConsumerInfo& ci, virtual void askThreshold(const UniSetTypes::ObjectId sid, const UniSetTypes::ConsumerInfo& ci,
UniSetTypes::ThresholdId tid, UniSetTypes::ThresholdId tid,
CORBA::Long lowLimit, CORBA::Long hiLimit, CORBA::Boolean invert, CORBA::Long lowLimit, CORBA::Long hiLimit, CORBA::Boolean invert,
UniversalIO::UIOCommand cmd ); UniversalIO::UIOCommand cmd );
virtual IONotifyController_i::ThresholdInfo getThresholdInfo( const IOController_i::SensorInfo& si, UniSetTypes::ThresholdId tid ); virtual IONotifyController_i::ThresholdInfo getThresholdInfo( const UniSetTypes::ObjectId sid, UniSetTypes::ThresholdId tid );
virtual IONotifyController_i::ThresholdList* getThresholds(const IOController_i::SensorInfo& si ); virtual IONotifyController_i::ThresholdList* getThresholds(const UniSetTypes::ObjectId sid );
virtual IONotifyController_i::ThresholdsListSeq* getThresholdsList(); virtual IONotifyController_i::ThresholdsListSeq* getThresholdsList();
virtual UniSetTypes::IDSeq* askSensorsSeq(const UniSetTypes::IDSeq& lst, virtual UniSetTypes::IDSeq* askSensorsSeq(const UniSetTypes::IDSeq& lst,
...@@ -155,7 +155,7 @@ class IONotifyController: ...@@ -155,7 +155,7 @@ class IONotifyController:
// функция для работы напрямую черех iterator (оптимизация) // функция для работы напрямую черех iterator (оптимизация)
virtual void localSetValue( IOController::IOStateList::iterator& it, virtual void localSetValue( IOController::IOStateList::iterator& it,
const IOController_i::SensorInfo& si, UniSetTypes::ObjectId sid,
CORBA::Long value, UniSetTypes::ObjectId sup_id ); CORBA::Long value, UniSetTypes::ObjectId sup_id );
// -------------------------------------------- // --------------------------------------------
...@@ -263,27 +263,26 @@ class IONotifyController: ...@@ -263,27 +263,26 @@ class IONotifyController:
bool myIOFilter(const USensorInfo& ai, CORBA::Long newvalue, UniSetTypes::ObjectId sup_id); bool myIOFilter(const USensorInfo& ai, CORBA::Long newvalue, UniSetTypes::ObjectId sup_id);
//! посылка информации об изменении состояния датчика //! посылка информации об изменении состояния датчика
virtual void send(ConsumerListInfo& lst, UniSetTypes::SensorMessage& sm); virtual void send( ConsumerListInfo& lst, UniSetTypes::SensorMessage& sm );
//! проверка срабатывания пороговых датчиков //! проверка срабатывания пороговых датчиков
virtual void checkThreshold( IOStateList::iterator& li, virtual void checkThreshold( IOStateList::iterator& li, const UniSetTypes::ObjectId sid, bool send=true );
const IOController_i::SensorInfo& si, bool send=true );
//! поиск информации о пороговом датчике //! поиск информации о пороговом датчике
ThresholdExtList::iterator findThreshold( UniSetTypes::KeyType k, UniSetTypes::ThresholdId tid ); ThresholdExtList::iterator findThreshold( const UniSetTypes::ObjectId sid, const UniSetTypes::ThresholdId tid );
//! сохранение информации об изменении состояния датчика в базу //! сохранение информации об изменении состояния датчика в базу
virtual void loggingInfo(UniSetTypes::SensorMessage& sm); virtual void loggingInfo( UniSetTypes::SensorMessage& sm );
/*! сохранение списка заказчиков /*! сохранение списка заказчиков
По умолчанию делает dump, если объявлен dumper. По умолчанию делает dump, если объявлен dumper.
*/ */
virtual void dumpOrdersList(const IOController_i::SensorInfo& si, const IONotifyController::ConsumerListInfo& lst); virtual void dumpOrdersList( const UniSetTypes::ObjectId sid, const IONotifyController::ConsumerListInfo& lst );
/*! сохранение списка заказчиков пороговых датчиков /*! сохранение списка заказчиков пороговых датчиков
По умолчанию делает dump, если объявлен dumper. По умолчанию делает dump, если объявлен dumper.
*/ */
virtual void dumpThresholdList(const IOController_i::SensorInfo& si, const IONotifyController::ThresholdExtList& lst); virtual void dumpThresholdList( const UniSetTypes::ObjectId sid, const IONotifyController::ThresholdExtList& lst );
/*! чтение dump-файла */ /*! чтение dump-файла */
virtual void readDump(); virtual void readDump();
...@@ -292,9 +291,6 @@ class IONotifyController: ...@@ -292,9 +291,6 @@ class IONotifyController:
void onChangeUndefinedState( IOStateList::iterator& it, IOController* ic ); void onChangeUndefinedState( IOStateList::iterator& it, IOController* ic );
// UniSetTypes::uniset_rwmutex sig_mutex;
// ChangeSignal changeSignal;
private: private:
friend class NCRestorer; friend class NCRestorer;
...@@ -303,15 +299,14 @@ class IONotifyController: ...@@ -303,15 +299,14 @@ class IONotifyController:
bool removeConsumer(ConsumerListInfo& lst, const UniSetTypes::ConsumerInfo& cons ); //!< удалить потребителя сообщения bool removeConsumer(ConsumerListInfo& lst, const UniSetTypes::ConsumerInfo& cons ); //!< удалить потребителя сообщения
//! обработка заказа //! обработка заказа
void ask(AskMap& askLst, const IOController_i::SensorInfo& si, void ask(AskMap& askLst, const UniSetTypes::ObjectId sid,
const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd); const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd);
/*! добавить новый порог для датчика */ /*! добавить новый порог для датчика */
bool addThreshold(ThresholdExtList& lst, ThresholdInfoExt& ti, const UniSetTypes::ConsumerInfo& cons); bool addThreshold(ThresholdExtList& lst, ThresholdInfoExt& ti, const UniSetTypes::ConsumerInfo& cons);
/*! удалить порог для датчика */ /*! удалить порог для датчика */
bool removeThreshold(ThresholdExtList& lst, ThresholdInfoExt& ti, const UniSetTypes::ConsumerInfo& ci); bool removeThreshold(ThresholdExtList& lst, ThresholdInfoExt& ti, const UniSetTypes::ConsumerInfo& ci);
AskMap askIOList; /*!< список потребителей по аналоговым датчикам */ AskMap askIOList; /*!< список потребителей по аналоговым датчикам */
AskThresholdMap askTMap; /*!< список порогов по аналоговым датчикам */ AskThresholdMap askTMap; /*!< список порогов по аналоговым датчикам */
......
...@@ -37,12 +37,12 @@ class IORFile ...@@ -37,12 +37,12 @@ class IORFile
public: public:
IORFile(); IORFile();
std::string getIOR( const ObjectId id, const ObjectId node ) const; std::string getIOR( const ObjectId id ) const;
void setIOR( const ObjectId id, const ObjectId node, const std::string& sior ) const; void setIOR( const ObjectId id, const std::string& sior ) const;
void unlinkIOR( const ObjectId id, const ObjectId node ) const; void unlinkIOR( const ObjectId id ) const;
protected: protected:
std::string genFName( const ObjectId id, const ObjectId node ) const; std::string genFName( const ObjectId id ) const;
private: private:
}; };
......
...@@ -35,66 +35,40 @@ class ObjectIndex ...@@ -35,66 +35,40 @@ class ObjectIndex
ObjectIndex(){}; ObjectIndex(){};
virtual ~ObjectIndex(){}; virtual ~ObjectIndex(){};
static const std::string sepName;
static const std::string sepNode;
// info // info
virtual const ObjectInfo* getObjectInfo( const ObjectId )=0; virtual const ObjectInfo* getObjectInfo( const UniSetTypes::ObjectId )=0;
virtual const ObjectInfo* getObjectInfo( const std::string& name )=0; virtual const ObjectInfo* getObjectInfo( const std::string& name )=0;
// создание полного имени в репозитории по паре имя:узел
static std::string mkRepName( const std::string& repname, const std::string& nodename );
// создание имени узла по реальному и виртуальному
static std::string mkFullNodeName( const std::string& realnode, const std::string& virtnode );
// получить имя для регистрации в репозитории (т.е. без секции)
static std::string getBaseName( const std::string& fname ); static std::string getBaseName( const std::string& fname );
// object id // object id
virtual ObjectId getIdByName(const std::string& name)=0; virtual ObjectId getIdByName(const std::string& name)=0;
virtual std::string getNameById( const ObjectId id ); virtual std::string getNameById( const UniSetTypes::ObjectId id );
virtual std::string getNameById( const ObjectId id, const ObjectId node );
// node // node
virtual std::string getFullNodeName(const std::string& fullname); inline std::string getNodeName( const UniSetTypes::ObjectId id )
virtual std::string getVirtualNodeName(const std::string& fullNodeName); {
virtual std::string getRealNodeName(const std::string& fullNodeName); return getNameById(id);
virtual std::string getRealNodeName( const ObjectId id ); }
virtual std::string getName( const std::string& fullname ); inline ObjectId getNodeId( const std::string& name ) { return getIdByName(name); }
// src name // src name
virtual std::string getMapName(const ObjectId id)=0; virtual std::string getMapName( const UniSetTypes::ObjectId id )=0;
virtual std::string getTextName(const ObjectId id)=0; virtual std::string getTextName( const UniSetTypes::ObjectId id )=0;
// //
virtual std::ostream& printMap(std::ostream& os)=0; virtual std::ostream& printMap(std::ostream& os)=0;
// ext void initLocalNode( const UniSetTypes::ObjectId nodeid );
inline ObjectId getIdByFullName(const std::string& fname)
{
return getIdByName(getName(fname));
}
inline ObjectId getNodeId( const std::string& fullname )
{
return getIdByName( getFullNodeName(fullname) );
}
inline std::string getFullNodeName( const ObjectId nodeid )
{
return getMapName(nodeid);
}
void initLocalNode( ObjectId nodeid );
protected: protected:
std::string nmLocalNode; // для оптимизации std::string nmLocalNode; // для оптимизации
private: private:
}; };
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
} // end of namespace } // end of namespace
......
...@@ -41,25 +41,24 @@ class ObjectIndex_XML: ...@@ -41,25 +41,24 @@ class ObjectIndex_XML:
ObjectIndex_XML(UniXML& xml, int minSize=1000 ); ObjectIndex_XML(UniXML& xml, int minSize=1000 );
virtual ~ObjectIndex_XML(); virtual ~ObjectIndex_XML();
virtual const UniSetTypes::ObjectInfo* getObjectInfo(const ObjectId); virtual const UniSetTypes::ObjectInfo* getObjectInfo( const ObjectId );
virtual const UniSetTypes::ObjectInfo* getObjectInfo( const std::string& name ); virtual const UniSetTypes::ObjectInfo* getObjectInfo( const std::string& name );
virtual ObjectId getIdByName(const std::string& name); virtual ObjectId getIdByName( const std::string& name );
virtual std::string getMapName(const ObjectId id); virtual std::string getMapName( const ObjectId id );
virtual std::string getTextName(const ObjectId id); virtual std::string getTextName( const ObjectId id );
virtual std::ostream& printMap(std::ostream& os); virtual std::ostream& printMap(std::ostream& os);
friend std::ostream& operator<<(std::ostream& os, ObjectIndex_XML& oi ); friend std::ostream& operator<<(std::ostream& os, ObjectIndex_XML& oi );
protected: protected:
virtual void build(UniXML& xml); virtual void build(UniXML& xml);
unsigned int read_section( UniXML& xml, const std::string& sec, unsigned int ind ); unsigned int read_section( UniXML& xml, const std::string& sec, unsigned int ind );
unsigned int read_nodes( UniXML& xml, const std::string& sec, unsigned int ind ); unsigned int read_nodes( UniXML& xml, const std::string& sec, unsigned int ind );
private: private:
typedef std::map<std::string, ObjectId> MapObjectKey; typedef std::map<std::string, ObjectId> MapObjectKey;
MapObjectKey mok; // для обратного писка MapObjectKey mok; // для обратного писка
std::vector<ObjectInfo> omap; // для прямого поиска std::vector<ObjectInfo> omap; // для прямого поиска
}; };
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
} // end of namespace } // end of namespace
......
...@@ -23,7 +23,7 @@ class ObjectIndex_idXML: ...@@ -23,7 +23,7 @@ class ObjectIndex_idXML:
virtual std::ostream& printMap( std::ostream& os ); virtual std::ostream& printMap( std::ostream& os );
friend std::ostream& operator<<(std::ostream& os, ObjectIndex_idXML& oi ); friend std::ostream& operator<<(std::ostream& os, ObjectIndex_idXML& oi );
protected: protected:
virtual void build( UniXML& xml ); virtual void build( UniXML& xml );
void read_section( UniXML& xml, const std::string& sec ); void read_section( UniXML& xml, const std::string& sec );
......
...@@ -83,7 +83,7 @@ class UInterface ...@@ -83,7 +83,7 @@ class UInterface
// fast - это удалённый вызов "без подтверждения", он быстрее, но менее надёжен // fast - это удалённый вызов "без подтверждения", он быстрее, но менее надёжен
// т.к. вызывающий никогда не узнает об ошибке, если она была (датчик такой не найдён и т.п.) // т.к. вызывающий никогда не узнает об ошибке, если она была (датчик такой не найдён и т.п.)
void fastSetValue( IOController_i::SensorInfo& si, long value, UniSetTypes::ObjectId supplier ); void fastSetValue( const IOController_i::SensorInfo& si, long value, UniSetTypes::ObjectId supplier );
//! Получение состояния для списка указанных датчиков //! Получение состояния для списка указанных датчиков
IOController_i::SensorInfoSeq_var getSensorSeq( UniSetTypes::IDList& lst ); IOController_i::SensorInfoSeq_var getSensorSeq( UniSetTypes::IDList& lst );
...@@ -108,7 +108,7 @@ class UInterface ...@@ -108,7 +108,7 @@ class UInterface
// ------------------------------------------------------ // ------------------------------------------------------
// установка неопределённого состояния // установка неопределённого состояния
void setUndefinedState( IOController_i::SensorInfo& si, bool undefined, UniSetTypes::ObjectId supplier ); void setUndefinedState( const IOController_i::SensorInfo& si, bool undefined, UniSetTypes::ObjectId supplier );
// --------------------------------------------------------------- // ---------------------------------------------------------------
// Калибровка... пороги... // Калибровка... пороги...
...@@ -160,11 +160,9 @@ class UInterface ...@@ -160,11 +160,9 @@ class UInterface
// /*! регистрация объекта в репозитории */ // /*! регистрация объекта в репозитории */
void registered(const UniSetTypes::ObjectId id, const UniSetTypes::ObjectPtr oRef, bool force=false)const throw(UniSetTypes::ORepFailed); void registered(const UniSetTypes::ObjectId id, const UniSetTypes::ObjectPtr oRef, bool force=false)const throw(UniSetTypes::ORepFailed);
void registered(const UniSetTypes::ObjectId id, const UniSetTypes::ObjectId node, const UniSetTypes::ObjectPtr oRef, bool force=false)const throw(UniSetTypes::ORepFailed);
// /*! разрегистрация объекта */ // /*! разрегистрация объекта */
void unregister(const UniSetTypes::ObjectId id)throw(UniSetTypes::ORepFailed); void unregister(const UniSetTypes::ObjectId id)throw(UniSetTypes::ORepFailed);
void unregister(const UniSetTypes::ObjectId id, UniSetTypes::ObjectId node) throw(UniSetTypes::ORepFailed);
/*! получение ссылки на объект */ /*! получение ссылки на объект */
inline UniSetTypes::ObjectPtr resolve( const std::string& name ) const inline UniSetTypes::ObjectPtr resolve( const std::string& name ) const
...@@ -174,7 +172,6 @@ class UInterface ...@@ -174,7 +172,6 @@ class UInterface
inline UniSetTypes::ObjectPtr resolve( const UniSetTypes::ObjectId id ) const inline UniSetTypes::ObjectPtr resolve( const UniSetTypes::ObjectId id ) const
{ {
// std::string nm = oind->getNameById(id);
return rep.resolve( oind->getNameById(id) ); return rep.resolve( oind->getNameById(id) );
} }
...@@ -211,30 +208,19 @@ class UInterface ...@@ -211,30 +208,19 @@ class UInterface
return oind->getNameById(id); return oind->getNameById(id);
} }
inline std::string getNameById( const UniSetTypes::ObjectId id, const UniSetTypes::ObjectId node ) const
{
return oind->getNameById(id, node);
}
inline UniSetTypes::ObjectId getNodeId( const std::string& fullname ) const inline UniSetTypes::ObjectId getNodeId( const std::string& fullname ) const
{ {
return oind->getNodeId(fullname); return oind->getNodeId(fullname);
} }
inline std::string getName( const std::string& fullname ) const
{
return oind->getName(fullname);
}
inline std::string getTextName( const UniSetTypes::ObjectId id ) const inline std::string getTextName( const UniSetTypes::ObjectId id ) const
{ {
return oind->getTextName(id); return oind->getTextName(id);
} }
// --------------------------------------------------------------- // ---------------------------------------------------------------
// Получение указателей на вспомогательные классы. // Получение указателей на вспомогательные классы.
inline UniSetTypes::ObjectIndex* getObjectIndex() { return oind; } inline const UniSetTypes::ObjectIndex* getObjectIndex() { return oind; }
inline const UniSetTypes::Configuration* getConf() { return uconf; } inline const UniSetTypes::Configuration* getConf() { return uconf; }
// --------------------------------------------------------------- // ---------------------------------------------------------------
......
...@@ -37,9 +37,9 @@ IORFile::IORFile() ...@@ -37,9 +37,9 @@ IORFile::IORFile()
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
string IORFile::getIOR( const ObjectId id, const ObjectId node ) const string IORFile::getIOR( const ObjectId id ) const
{ {
string fname( genFName(id,node) ); string fname( genFName(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 ObjectId node ) const ...@@ -47,9 +47,9 @@ string IORFile::getIOR( const ObjectId id, const ObjectId node ) const
return sior; return sior;
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
void IORFile::setIOR( const ObjectId id, const ObjectId node, const string& sior ) const void IORFile::setIOR( const ObjectId id, const string& sior ) const
{ {
string fname( genFName(id,node) ); string fname( genFName(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,16 +62,16 @@ void IORFile::setIOR( const ObjectId id, const ObjectId node, const string& sior ...@@ -62,16 +62,16 @@ void IORFile::setIOR( const ObjectId id, const ObjectId node, const string& sior
ior_file.close(); ior_file.close();
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
void IORFile::unlinkIOR( const ObjectId id, const ObjectId node ) const void IORFile::unlinkIOR( const ObjectId id ) const
{ {
string fname( genFName(id,node) ); string fname( genFName(id) );
unlink(fname.c_str()); unlink(fname.c_str());
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
string IORFile::genFName( const ObjectId id, const ObjectId node ) const string IORFile::genFName( const ObjectId id ) const
{ {
ostringstream fname; ostringstream fname;
fname << conf->getLockDir() << id << "." << node; fname << conf->getLockDir() << id;
return fname.str(); return fname.str();
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
...@@ -196,26 +196,12 @@ namespace ORepHelpers ...@@ -196,26 +196,12 @@ namespace ORepHelpers
*/ */
const string getShortName( const string& fname, const std::string& brk ) const string getShortName( const string& fname, const std::string& brk )
{ {
/*
string::size_type pos = fname.rfind(brk); string::size_type pos = fname.rfind(brk);
if( pos == string::npos ) if( pos == string::npos )
return fname; return fname;
return fname.substr( pos+1, fname.length() ); return fname.substr( pos+1, fname.length() );
*/
string::size_type pos1 = fname.rfind(brk);
string::size_type pos2 = fname.rfind(conf->oind->sepName);
if( pos2 == string::npos && pos1 == string::npos )
return fname;
if( pos1 == string::npos )
return fname.substr( 0, pos2 );
if( pos2 == string::npos )
return fname.substr( pos1+1, fname.length() );
return fname.substr( pos1+1, pos2-pos1-1 );
} }
// --------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------
...@@ -231,17 +217,17 @@ namespace ORepHelpers ...@@ -231,17 +217,17 @@ namespace ORepHelpers
return ""; return "";
return fullName.substr(0, pos); return fullName.substr(0, pos);
} }
// --------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------
/* /*
* Запрещенные символы см. UniSetTypes::BadSymbols[] * Запрещенные символы см. UniSetTypes::BadSymbols[]
* \return Если не найдено запрещенных символов то будет возвращен 0, иначе найденный символ * \return Если не найдено запрещенных символов то будет возвращен 0, иначе найденный символ
*/ */
char checkBadSymbols(const string& str) char checkBadSymbols( const string& str )
{ {
using namespace UniSetTypes; using namespace UniSetTypes;
for ( unsigned int i=0;i<str.length();i++) for ( unsigned int i=0;i<str.length();i++)
{ {
for(unsigned int k=0; k<sizeof(BadSymbols); k++) for(unsigned int k=0; k<sizeof(BadSymbols); k++)
...@@ -251,7 +237,7 @@ namespace ORepHelpers ...@@ -251,7 +237,7 @@ namespace ORepHelpers
} }
} }
return 0; return 0;
} }
// --------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------
string BadSymbolsToStr() string BadSymbolsToStr()
...@@ -269,4 +255,3 @@ namespace ORepHelpers ...@@ -269,4 +255,3 @@ namespace ORepHelpers
} }
// --------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------
} }
...@@ -30,42 +30,13 @@ ...@@ -30,42 +30,13 @@
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
using namespace UniSetTypes; using namespace UniSetTypes;
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
const std::string ObjectIndex::sepName = "@"; //const std::string ObjectIndex::sepName = "@";
const std::string ObjectIndex::sepNode = ":"; //const std::string ObjectIndex::sepNode = ":";
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
string ObjectIndex::getNameById( const ObjectId id ) string ObjectIndex::getNameById( const ObjectId id )
{ {
string n(getMapName(id)); return getMapName(id);
if( n.empty() )
return "";
return mkRepName(n,nmLocalNode);
}
// -----------------------------------------------------------------------------------------
string ObjectIndex::getNameById( const ObjectId id, const ObjectId node )
{
const string t(getMapName(id));
if( t.empty() )
return "";
// оптимизация
if( node == conf->getLocalNode() )
return mkRepName(t,nmLocalNode);
return mkRepName(t,getMapName(node));
}
// -----------------------------------------------------------------------------------------
string ObjectIndex::mkRepName( const std::string& repname, const std::string& nodename )
{
return repname + sepName + nodename;
}
// -----------------------------------------------------------------------------------------
string ObjectIndex::mkFullNodeName( const std::string& realnode, const std::string& virtnode )
{
// realnode справа, что поиск и вырезание происходили быстрее
// эта функция часто используется...
return virtnode + sepNode + realnode;
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
std::string ObjectIndex::getBaseName( const std::string& fname ) std::string ObjectIndex::getBaseName( const std::string& fname )
...@@ -73,82 +44,11 @@ std::string ObjectIndex::getBaseName( const std::string& fname ) ...@@ -73,82 +44,11 @@ std::string ObjectIndex::getBaseName( const std::string& fname )
string::size_type pos = fname.rfind('/'); string::size_type pos = fname.rfind('/');
if( pos != string::npos ) if( pos != string::npos )
return fname.substr(pos+1); return fname.substr(pos+1);
return fname;
}
// -----------------------------------------------------------------------------------------
string ObjectIndex::getFullNodeName( const string& oname )
{
string::size_type pos = oname.rfind(sepName);
if( pos != string::npos )
return oname.substr(pos+1);
// Если не нашли разделитель name@vnode:rnode
// то пытаемся найти в данной строке сочетание vnode:rnode
string vnode = getVirtualNodeName(oname);
string rnode = getRealNodeName(oname);
if( !rnode.empty() )
{
if( vnode.empty() )
vnode = rnode;
return mkFullNodeName(rnode,vnode);
}
// Если не нашли, то возвращаем, полное имя return fname;
// ЛОКАЛЬНОГО узла...(для оптимизации хранимого в классе)
if( !nmLocalNode.empty() )
return mkFullNodeName(nmLocalNode,nmLocalNode);
nmLocalNode = getMapName(UniSetTypes::conf->getLocalNode());
return mkFullNodeName(nmLocalNode,nmLocalNode);
}
// -----------------------------------------------------------------------------------------
string ObjectIndex::getVirtualNodeName( const string& fname )
{
string::size_type pos1 = fname.rfind(sepName);
string::size_type pos2 = fname.rfind(sepNode);
if( pos2 == string::npos )
return "";
if( pos1!=string::npos )
return fname.substr( pos1+1, pos2-pos1-1 );
return "";
}
// -----------------------------------------------------------------------------------------
string ObjectIndex::getRealNodeName( const string& fname )
{
string::size_type pos = fname.rfind(sepNode);
if( pos != string::npos )
return fname.substr(pos+1);
if( !nmLocalNode.empty() )
return nmLocalNode;
nmLocalNode = getMapName(UniSetTypes::conf->getLocalNode());
return nmLocalNode;
}
// -----------------------------------------------------------------------------------------
std::string ObjectIndex::getRealNodeName( const ObjectId id )
{
string n(getMapName(id));
if( n.empty() )
return "";
return getRealNodeName(n);
}
// -----------------------------------------------------------------------------------------
string ObjectIndex::getName( const string& fname )
{
string::size_type pos = fname.rfind(sepName);
if( pos != string::npos )
return fname.substr(0,pos);
return "";
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
void ObjectIndex::initLocalNode( ObjectId nodeid ) void ObjectIndex::initLocalNode( const ObjectId nodeid )
{ {
nmLocalNode = getMapName(nodeid); nmLocalNode = getMapName(nodeid);
} }
......
...@@ -239,12 +239,8 @@ unsigned int ObjectIndex_XML::read_nodes( UniXML& xml, const std::string& sec, u ...@@ -239,12 +239,8 @@ unsigned int ObjectIndex_XML::read_nodes( UniXML& xml, const std::string& sec, u
for( ;it.getCurrent(); it.goNext() ) for( ;it.getCurrent(); it.goNext() )
{ {
omap[ind].id = ind; omap[ind].id = ind;
string name(xml.getProp(it,"name")); string nodename(xml.getProp(it,"name"));
string alias(xml.getProp(it,"alias"));
if( alias.empty() )
alias = name;
string nodename = mkFullNodeName(name,alias);
delete[] omap[ind].repName; delete[] omap[ind].repName;
omap[ind].repName = new char[nodename.size()+1]; omap[ind].repName = new char[nodename.size()+1];
strcpy( omap[ind].repName, nodename.c_str() ); strcpy( omap[ind].repName, nodename.c_str() );
......
...@@ -195,18 +195,14 @@ void ObjectIndex_idXML::read_nodes( UniXML& xml, const std::string& sec ) ...@@ -195,18 +195,14 @@ void ObjectIndex_idXML::read_nodes( UniXML& xml, const std::string& sec )
} }
string name(it.getProp("name")); string name(it.getProp("name"));
string alias(it.getProp("alias"));
if( alias.empty() )
alias = name;
string nodename = mkFullNodeName(name,alias); inf.repName = new char[name.size()+1];
inf.repName = new char[nodename.size()+1]; strcpy( inf.repName, name.c_str() );
strcpy( inf.repName, nodename.c_str() );
// textname // textname
string textname(xml.getProp(it,"textname")); string textname(xml.getProp(it,"textname"));
if( textname.empty() ) if( textname.empty() )
textname = nodename; textname = name;
inf.textName = new char[textname.size()+1]; inf.textName = new char[textname.size()+1];
strcpy( inf.textName, textname.c_str() ); strcpy( inf.textName, textname.c_str() );
...@@ -214,7 +210,7 @@ void ObjectIndex_idXML::read_nodes( UniXML& xml, const std::string& sec ) ...@@ -214,7 +210,7 @@ void ObjectIndex_idXML::read_nodes( UniXML& xml, const std::string& sec )
inf.data = (void*)(xmlNode*)(it); inf.data = (void*)(xmlNode*)(it);
omap.insert(MapObjects::value_type(inf.id,inf)); // omap[inf.id] = inf; omap.insert(MapObjects::value_type(inf.id,inf)); // omap[inf.id] = inf;
mok.insert(MapObjectKey::value_type(nodename,inf.id)); // mok[name] = inf.id; mok.insert(MapObjectKey::value_type(name,inf.id)); // mok[name] = inf.id;
} }
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
......
...@@ -44,13 +44,13 @@ void NCRestorer::addlist( IONotifyController* ic, SInfo& inf, IONotifyController ...@@ -44,13 +44,13 @@ void NCRestorer::addlist( IONotifyController* ic, SInfo& inf, IONotifyController
{ {
UniSetTypes::KeyType k( key(inf.si.id,inf.si.node) ); UniSetTypes::KeyType k( key(inf.si.id,inf.si.node) );
// Проверка зарегистрирован-ли данный датчик // Проверка зарегистрирован-ли данный датчик
// если такого дискретного датчика нет, то здесь сработает исключение... // если такого дискретного датчика нет, то здесь сработает исключение...
if( !force ) if( !force )
{ {
try try
{ {
ic->getIOType(inf.si); ic->getIOType(inf.si.id);
} }
catch(...) catch(...)
{ {
...@@ -66,7 +66,7 @@ void NCRestorer::addlist( IONotifyController* ic, SInfo& inf, IONotifyController ...@@ -66,7 +66,7 @@ void NCRestorer::addlist( IONotifyController* ic, SInfo& inf, IONotifyController
default: default:
ucrit << ic->getName() << "(askDumper::addlist): НЕИЗВЕСТНЫЙ ТИП ДАТЧИКА! -> " ucrit << ic->getName() << "(askDumper::addlist): НЕИЗВЕСТНЫЙ ТИП ДАТЧИКА! -> "
<< conf->oind->getNameById(inf.si.id,inf.si.node) << endl; << conf->oind->getNameById(inf.si.id) << endl;
return; return;
break; break;
...@@ -85,7 +85,7 @@ void NCRestorer::addlist( IONotifyController* ic, SInfo& inf, IONotifyController ...@@ -85,7 +85,7 @@ void NCRestorer::addlist( IONotifyController* ic, SInfo& inf, IONotifyController
default: default:
ucrit << ic->getName() << "(NCRestorer::addlist): НЕИЗВЕСТНЫЙ ТИП ДАТЧИКА!-> " ucrit << ic->getName() << "(NCRestorer::addlist): НЕИЗВЕСТНЫЙ ТИП ДАТЧИКА!-> "
<< conf->oind->getNameById(inf.si.id,inf.si.node) << endl; << conf->oind->getNameById(inf.si.id) << endl;
break; break;
} }
} }
...@@ -98,7 +98,7 @@ void NCRestorer::addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyC ...@@ -98,7 +98,7 @@ void NCRestorer::addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyC
{ {
try try
{ {
ic->getIOType(inf.si); ic->getIOType(inf.si.id);
} }
catch(...) catch(...)
{ {
...@@ -162,7 +162,7 @@ void NCRestorer::init_depends_signals( IONotifyController* ic ) ...@@ -162,7 +162,7 @@ void NCRestorer::init_depends_signals( IONotifyController* ic )
<< " dep_name=(" << it->second.d_si.id << ")'" << conf->oind->getMapName(it->second.d_si.id) << "'" << " dep_name=(" << it->second.d_si.id << ")'" << conf->oind->getMapName(it->second.d_si.id) << "'"
<< endl; << endl;
IOController::ChangeSignal s = ic->signal_change_value(it->second.d_si); IOController::ChangeSignal s = ic->signal_change_value(it->second.d_si.id);
s.connect( sigc::mem_fun( &it->second, &IOController::USensorInfo::checkDepend) ); s.connect( sigc::mem_fun( &it->second, &IOController::USensorInfo::checkDepend) );
} }
} }
......
...@@ -363,7 +363,7 @@ void NCRestorer_XML::read_thresholds(const UniXML& xml, xmlNode* node, IONotifyC ...@@ -363,7 +363,7 @@ void NCRestorer_XML::read_thresholds(const UniXML& xml, xmlNode* node, IONotifyC
uwarn << ic->getName() uwarn << ic->getName()
<< "(read_thresholds): не смог получить информацию о пороге" << "(read_thresholds): не смог получить информацию о пороге"
<< " для датчика " << " для датчика "
<< conf->oind->getNameById(inf.si.id,inf.si.node) << endl; << conf->oind->getNameById(inf.si.id) << endl;
continue; continue;
} }
...@@ -384,7 +384,7 @@ void NCRestorer_XML::read_thresholds(const UniXML& xml, xmlNode* node, IONotifyC ...@@ -384,7 +384,7 @@ void NCRestorer_XML::read_thresholds(const UniXML& xml, xmlNode* node, IONotifyC
uwarn << ic->getName() uwarn << ic->getName()
<< "(read_thresholds): не смог получить список заказчиков" << "(read_thresholds): не смог получить список заказчиков"
<< " для порога " << ti.id << " для порога " << ti.id
<< " датчика " << conf->oind->getNameById(inf.si.id,inf.si.node) << endl; << " датчика " << conf->oind->getNameById(inf.si.id) << endl;
} }
} }
} }
......
...@@ -281,7 +281,7 @@ void Configuration::initConfiguration( int argc, const char* const* argv ) ...@@ -281,7 +281,7 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
{ {
new_argv[i] = "-ORBInitRef"; new_argv[i] = "-ORBInitRef";
string name(oind->getRealNodeName(it->id)); string name(oind->getNodeName(it->id));
ostringstream param; ostringstream param;
param << this << name; param << this << name;
name = param.str(); name = param.str();
...@@ -513,12 +513,7 @@ void Configuration::initParameters() ...@@ -513,12 +513,7 @@ void Configuration::initParameters()
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void Configuration::setLocalNode( const string& nodename ) void Configuration::setLocalNode( const string& nodename )
{ {
string virtnode = oind->getVirtualNodeName(nodename); localNode = oind->getIdByName(nodename);
string nn(nodename);
if( virtnode.empty() )
nn = oind->mkFullNodeName(nodename,nodename);
localNode = oind->getIdByName(nn);
if( localNode == DefaultObjectId ) if( localNode == DefaultObjectId )
{ {
...@@ -527,8 +522,8 @@ void Configuration::setLocalNode( const string& nodename ) ...@@ -527,8 +522,8 @@ void Configuration::setLocalNode( const string& nodename )
ucrit << err.str() << endl; ucrit << err.str() << endl;
throw Exception(err.str()); throw Exception(err.str());
} }
localNodeName = oind->getRealNodeName(nn); localNodeName = nodename;
oind->initLocalNode(localNode); oind->initLocalNode(localNode);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -620,9 +615,9 @@ void Configuration::createNodesList() ...@@ -620,9 +615,9 @@ void Configuration::createNodesList()
} }
string nodename(sname); string nodename(sname);
string virtnode = oind->getVirtualNodeName(nodename); // string virtnode = oind->getVirtualNodeName(nodename);
if( virtnode.empty() ) // if( virtnode.empty() )
nodename = oind->mkFullNodeName(nodename,nodename); // nodename = oind->mkFullNodeName(nodename,nodename);
NodeInfo ninf; NodeInfo ninf;
ninf.id = oind->getIdByName(nodename); ninf.id = oind->getIdByName(nodename);
...@@ -877,14 +872,12 @@ ObjectId Configuration::getServiceID( const std::string& name ) ...@@ -877,14 +872,12 @@ ObjectId Configuration::getServiceID( const std::string& name )
return oind->getIdByName(getServicesSection()+"/"+name); return oind->getIdByName(getServicesSection()+"/"+name);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
UniSetTypes::ObjectId Configuration::getNodeID( const std::string& name, const std::string& alias ) UniSetTypes::ObjectId Configuration::getNodeID( const std::string& name )
{ {
if( name.empty() ) if( name.empty() )
return DefaultObjectId; return DefaultObjectId;
string a( (alias.empty() ? name : alias ) ); return oind->getNodeId( name );
return oind->getIdByName( oind->mkFullNodeName(name,a) );
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
......
...@@ -94,13 +94,7 @@ bool Restorer_XML::getConsumerInfo( UniXML_iterator& it, ...@@ -94,13 +94,7 @@ bool Restorer_XML::getConsumerInfo( UniXML_iterator& it,
string cnodename(it.getProp("node")); string cnodename(it.getProp("node"));
if( !cnodename.empty() ) if( !cnodename.empty() )
{
string virtnode = conf->oind->getVirtualNodeName(cnodename);
if( virtnode.empty() )
cnodename = conf->oind->mkFullNodeName(cnodename,cnodename);
cnode = conf->oind->getIdByName(cnodename); cnode = conf->oind->getIdByName(cnodename);
}
else else
cnode = conf->getLocalNode(); cnode = conf->getLocalNode();
......
...@@ -129,9 +129,9 @@ void SViewer::readSection( const string& section, const string& secRoot ) ...@@ -129,9 +129,9 @@ void SViewer::readSection( const string& section, const string& secRoot )
cout << "(readSection): catch..." << endl; cout << "(readSection): catch..." << endl;
return; return;
} }
// cout << " read objectlist ok."<< endl; // cout << " read objectlist ok."<< endl;
if ( !lstObj.empty() ) if ( !lstObj.empty() )
{ {
for ( li=lstObj.begin();li!=lstObj.end();++li ) for ( li=lstObj.begin();li!=lstObj.end();++li )
...@@ -140,7 +140,7 @@ void SViewer::readSection( const string& section, const string& secRoot ) ...@@ -140,7 +140,7 @@ void SViewer::readSection( const string& section, const string& secRoot )
{ {
string ob(*li); string ob(*li);
string fname(curSection+ "/"+ ob); string fname(curSection+ "/"+ ob);
ObjectId id = conf->oind->getIdByFullName( fname ); ObjectId id = conf->oind->getIdByName( fname );
if( id == DefaultObjectId ) if( id == DefaultObjectId )
cout << "(readSection): ID?! для " << fname << endl; cout << "(readSection): ID?! для " << fname << endl;
else else
...@@ -150,7 +150,7 @@ void SViewer::readSection( const string& section, const string& secRoot ) ...@@ -150,7 +150,7 @@ void SViewer::readSection( const string& section, const string& secRoot )
{ {
cout << "(readSection): " << ex << endl; cout << "(readSection): " << ex << endl;
} }
} }
} }
else else
...@@ -219,8 +219,7 @@ void SViewer::updateSensors( IOController_i::SensorInfoSeq_var& amap, UniSetType ...@@ -219,8 +219,7 @@ void SViewer::updateSensors( IOController_i::SensorInfoSeq_var& amap, UniSetType
{ {
if( amap[i].type == UniversalIO::AI || amap[i].type == UniversalIO::DI ) if( amap[i].type == UniversalIO::AI || amap[i].type == UniversalIO::DI )
{ {
// UniSetTypes::KeyType k = key(amap[i].si.id, amap[i].si.node); string name(conf->oind->getNameById(amap[i].si.id));
string name(conf->oind->getNameById(amap[i].si.id, amap[i].si.node));
if( isShort ) if( isShort )
name = ORepHelpers::getShortName(name); name = ORepHelpers::getShortName(name);
string txtname( conf->oind->getTextName(amap[i].si.id) ); string txtname( conf->oind->getTextName(amap[i].si.id) );
...@@ -236,8 +235,7 @@ void SViewer::updateSensors( IOController_i::SensorInfoSeq_var& amap, UniSetType ...@@ -236,8 +235,7 @@ void SViewer::updateSensors( IOController_i::SensorInfoSeq_var& amap, UniSetType
{ {
if( amap[i].type == UniversalIO::AO || amap[i].type == UniversalIO::DO ) if( amap[i].type == UniversalIO::AO || amap[i].type == UniversalIO::DO )
{ {
// UniSetTypes::KeyType k = key(amap[i].si.id, amap[i].si.node); string name(conf->oind->getNameById(amap[i].si.id));
string name(conf->oind->getNameById(amap[i].si.id, amap[i].si.node));
if( isShort ) if( isShort )
name = ORepHelpers::getShortName(name); name = ORepHelpers::getShortName(name);
string txtname( conf->oind->getTextName(amap[i].si.id) ); string txtname( conf->oind->getTextName(amap[i].si.id) );
...@@ -268,16 +266,16 @@ void SViewer::updateThresholds( IONotifyController_i::ThresholdsListSeq_var& tls ...@@ -268,16 +266,16 @@ void SViewer::updateThresholds( IONotifyController_i::ThresholdsListSeq_var& tls
case UniversalIO::AO: case UniversalIO::AO:
cout << "AO"; cout << "AO";
break; break;
default: default:
cout << "??"; cout << "??";
break; break;
} }
string sname(conf->oind->getNameById( tlst[i].si.id, tlst[i].si.node )); string sname(conf->oind->getNameById(tlst[i].si.id));
if( isShort ) if( isShort )
sname = ORepHelpers::getShortName(sname); sname = ORepHelpers::getShortName(sname);
cout << " | " << setw(60) << sname << " | " << setw(5) << tlst[i].value << endl; cout << " | " << setw(60) << sname << " | " << setw(5) << tlst[i].value << endl;
int m = tlst[i].tlist.length(); int m = tlst[i].tlist.length();
...@@ -288,7 +286,7 @@ void SViewer::updateThresholds( IONotifyController_i::ThresholdsListSeq_var& tls ...@@ -288,7 +286,7 @@ void SViewer::updateThresholds( IONotifyController_i::ThresholdsListSeq_var& tls
cout << " | low: " << setw(5) << ti->lowlimit; cout << " | low: " << setw(5) << ti->lowlimit;
cout << endl; cout << endl;
} }
} }
} }
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
......
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