Commit 7163e5eb authored by Pavel Vainerman's avatar Pavel Vainerman Committed by Pavel Vainerman

[iocontroller]: added "depend_sensor" to sensor info

parent 43a9e230
...@@ -105,10 +105,11 @@ interface IOController_i : UniSetManager_i ...@@ -105,10 +105,11 @@ interface IOController_i : UniSetManager_i
IOController_i::SensorInfo si; IOController_i::SensorInfo si;
long default_val; /*!< значение по умолчанию */ long default_val; /*!< значение по умолчанию */
CalibrateInfo ci; /*!< калибровочные параметры */ CalibrateInfo ci; /*!< калибровочные параметры */
unsigned long tv_sec; /*!< время последнего изменения датчика, секунды (clock_gettime(CLOCK_REALTIME) */ unsigned long tv_sec; /*!< время последнего изменения датчика, секунды (clock_gettime(CLOCK_REALTIME) */
unsigned long tv_nsec; /*!< время последнего изменения датчика, nanosec (clock_gettime(CLOCK_REALTIME) */ unsigned long tv_nsec; /*!< время последнего изменения датчика, nanosec (clock_gettime(CLOCK_REALTIME) */
uniset::ObjectId supplier; /*!< идентификатор объекта изменившего состояние датчика */ uniset::ObjectId supplier; /*!< идентификатор объекта изменившего состояние датчика */
boolean dbignore; /*!< не сохранять изменения в БД */ boolean dbignore; /*!< не сохранять изменения в БД */
uniset::ObjectId depend_sid; /*!< датчик от которого зависит данный (при blocked=true). DefaultObjectId если не зависит */
}; };
typedef sequence<SensorIOInfo> SensorInfoSeq; typedef sequence<SensorIOInfo> SensorInfoSeq;
......
...@@ -1226,23 +1226,26 @@ int sinfo(const string& args, UInterface& ui ) ...@@ -1226,23 +1226,26 @@ int sinfo(const string& args, UInterface& ui )
long default_val; /*!< значение по умолчанию */ long default_val; /*!< значение по умолчанию */
CalibrateInfo ci; /*!< калибровочные параметры */ CalibrateInfo ci; /*!< калибровочные параметры */
#endif #endif
print_help(10, "id", std::to_string(it.si.id) + "\n", " ", " : "); const int w = 14;
print_help(10, "node", std::to_string(it.si.node) + "\n", " ", " : "); print_help(w, "id", std::to_string(it.si.id) + "\n", " ", " : ");
print_help(10, "value", std::to_string(sinf->value) + "\n", " ", " : "); print_help(w, "node", std::to_string(it.si.node) + "\n", " ", " : ");
print_help(10, "real_value", std::to_string(sinf->real_value) + "\n", " ", " : "); print_help(w, "value", std::to_string(sinf->value) + "\n", " ", " : ");
print_help(10, "frozen", std::to_string(sinf->frozen) + "\n", " ", " : "); print_help(w, "real_value", std::to_string(sinf->real_value) + "\n", " ", " : ");
print_help(10, "blocked", std::to_string(sinf->blocked) + "\n", " ", " : "); print_help(w, "frozen", std::to_string(sinf->frozen) + "\n", " ", " : ");
print_help(10, "undefined", std::to_string(sinf->undefined) + "\n", " ", " : "); print_help(w, "undefined", std::to_string(sinf->undefined) + "\n", " ", " : ");
print_help(10, "dbignore", std::to_string(sinf->dbignore) + "\n", " ", " : "); print_help(w, "blocked", std::to_string(sinf->blocked) + "\n", " ", " : ");
if( sinf->depend_sid != DefaultObjectId )
print_help(w, "depend_sensor", "(" + to_string(sinf->depend_sid) + ")" + ORepHelpers::getShortName(conf->oind->getMapName(sinf->depend_sid)) + "\n", " ", " : ");
if( sinf->supplier == uniset::AdminID ) if( sinf->supplier == uniset::AdminID )
print_help(10, "supplier", "admin\n", " ", " : "); print_help(w, "supplier", "admin\n", " ", " : ");
else else
print_help(10, "supplier", ORepHelpers::getShortName(conf->oind->getMapName(sinf->supplier)) + "\n", " ", " : "); print_help(w, "supplier", ORepHelpers::getShortName(conf->oind->getMapName(sinf->supplier)) + "\n", " ", " : ");
ostringstream ts; ostringstream ts;
ts << dateToString(sinf->tv_sec) << " " << timeToString(sinf->tv_sec) << "." << sinf->tv_nsec << "\n"; ts << dateToString(sinf->tv_sec) << " " << timeToString(sinf->tv_sec) << "." << sinf->tv_nsec << "\n";
print_help(10, "changed", ts.str(), " ", " : "); print_help(w, "changed", ts.str(), " ", " : ");
} }
catch( const uniset::Exception& ex ) catch( const uniset::Exception& ex )
{ {
......
...@@ -299,6 +299,7 @@ TEST_CASE("UInterface::getSensorIOInfo", "[UInterface][getSensorIOInfo]") ...@@ -299,6 +299,7 @@ TEST_CASE("UInterface::getSensorIOInfo", "[UInterface][getSensorIOInfo]")
REQUIRE( inf->undefined == false ); REQUIRE( inf->undefined == false );
REQUIRE( inf->tv_sec > 0 ); REQUIRE( inf->tv_sec > 0 );
REQUIRE( inf->dbignore == false ); REQUIRE( inf->dbignore == false );
REQUIRE( inf->depend_sid == DefaultObjectId );
// freeze/unfreeze // freeze/unfreeze
REQUIRE_NOTHROW( ui->freezeValue(si, true, 10, testOID) ); REQUIRE_NOTHROW( ui->freezeValue(si, true, 10, testOID) );
...@@ -321,4 +322,22 @@ TEST_CASE("UInterface::getSensorIOInfo", "[UInterface][getSensorIOInfo]") ...@@ -321,4 +322,22 @@ TEST_CASE("UInterface::getSensorIOInfo", "[UInterface][getSensorIOInfo]")
inf = ui->getSensorIOInfo(si); inf = ui->getSensorIOInfo(si);
REQUIRE( inf->undefined == false ); REQUIRE( inf->undefined == false );
REQUIRE( inf->supplier == testOID ); REQUIRE( inf->supplier == testOID );
// depend
si.id = 100;
REQUIRE_NOTHROW( ui->setValue(si, 0, testOID) );
si.id = 101;
inf = ui->getSensorIOInfo(si);
REQUIRE( inf->blocked == true );
REQUIRE( inf->depend_sid == 100 );
si.id = 100;
REQUIRE_NOTHROW( ui->setValue(si, 10, testOID) );
si.id = 101;
inf = ui->getSensorIOInfo(si);
REQUIRE( inf->blocked == false );
REQUIRE( inf->depend_sid == 100 );
} }
...@@ -230,7 +230,8 @@ namespace uniset ...@@ -230,7 +230,8 @@ namespace uniset
SensorIOInfo(long v, UniversalIO::IOType t, const IOController_i::SensorInfo& si, SensorIOInfo(long v, UniversalIO::IOType t, const IOController_i::SensorInfo& si,
uniset::Message::Priority p = uniset::Message::Medium, uniset::Message::Priority p = uniset::Message::Medium,
long defval = 0, IOController_i::CalibrateInfo* ci = 0, long defval = 0, IOController_i::CalibrateInfo* ci = 0,
uniset::ObjectId sup_id = uniset::DefaultObjectId ) uniset::ObjectId sup_id = uniset::DefaultObjectId,
uniset::ObjectId depend_sid = uniset::DefaultObjectId )
{ {
IOController_i::SensorIOInfo ai; IOController_i::SensorIOInfo ai;
ai.si = si; ai.si = si;
...@@ -241,6 +242,7 @@ namespace uniset ...@@ -241,6 +242,7 @@ namespace uniset
ai.real_value = v; ai.real_value = v;
ai.blocked = false; ai.blocked = false;
ai.supplier = sup_id; ai.supplier = sup_id;
ai.depend_sid = depend_sid;
if( ci != 0 ) if( ci != 0 )
ai.ci = *ci; ai.ci = *ci;
...@@ -337,7 +339,6 @@ namespace uniset ...@@ -337,7 +339,6 @@ namespace uniset
uniset::uniset_rwmutex undefMutex; uniset::uniset_rwmutex undefMutex;
ChangeUndefinedStateSignal sigUndefChange; ChangeUndefinedStateSignal sigUndefChange;
IOController_i::SensorInfo d_si = { uniset::DefaultObjectId, uniset::DefaultObjectId }; /*!< идентификатор датчика, от которого зависит данный */
long d_value = { 1 }; /*!< разрешающее работу значение датчика от которого зависит данный */ long d_value = { 1 }; /*!< разрешающее работу значение датчика от которого зависит данный */
long d_off_value = { 0 }; /*!< блокирующее значение */ long d_off_value = { 0 }; /*!< блокирующее значение */
std::shared_ptr<USensorInfo> d_usi; // shared_ptr на датчик от которого зависит этот. std::shared_ptr<USensorInfo> d_usi; // shared_ptr на датчик от которого зависит этот.
......
...@@ -220,9 +220,9 @@ namespace uniset ...@@ -220,9 +220,9 @@ namespace uniset
if( !d_txt.empty() ) if( !d_txt.empty() )
{ {
inf->d_si.id = conf->getSensorID(d_txt); inf->depend_sid = conf->getSensorID(d_txt);
if( inf->d_si.id == uniset::DefaultObjectId ) if( inf->depend_sid == uniset::DefaultObjectId )
{ {
ostringstream err; ostringstream err;
err << "(IOConfig_XML::getSensorInfo): sensor='" err << "(IOConfig_XML::getSensorInfo): sensor='"
...@@ -233,8 +233,6 @@ namespace uniset ...@@ -233,8 +233,6 @@ namespace uniset
throw SystemError(err.str()); throw SystemError(err.str());
} }
inf->d_si.node = conf->getLocalNode();
// по умолчанию срабатывание на "1" // по умолчанию срабатывание на "1"
inf->d_value = it.getProp("depend_value").empty() ? 1 : it.getIntProp("depend_value"); inf->d_value = it.getProp("depend_value").empty() ? 1 : it.getIntProp("depend_value");
inf->d_off_value = it.getPIntProp("depend_off_value", 0); inf->d_off_value = it.getPIntProp("depend_off_value", 0);
...@@ -250,15 +248,15 @@ namespace uniset ...@@ -250,15 +248,15 @@ namespace uniset
// обновляем итераторы... // обновляем итераторы...
it.second->d_usi = it.second; it.second->d_usi = it.second;
if( it.second->d_si.id == DefaultObjectId ) if( it.second->depend_sid == DefaultObjectId )
continue; continue;
uinfo << "(IOConfig_XML::init_depends_signals): " uinfo << "(IOConfig_XML::init_depends_signals): "
<< " init depend: '" << conf->oind->getMapName(it.second->si.id) << "'" << " init depend: '" << conf->oind->getMapName(it.second->si.id) << "'"
<< " dep_name=(" << it.second->d_si.id << ")'" << conf->oind->getMapName(it.second->d_si.id) << "'" << " depend_sensor=(" << it.second->depend_sid << ")'" << conf->oind->getMapName(it.second->depend_sid) << "'"
<< endl; << endl;
auto dit = lst.find(it.second->d_si.id); auto dit = lst.find(it.second->depend_sid);
if( dit != lst.end() ) if( dit != lst.end() )
{ {
......
...@@ -113,9 +113,9 @@ void IOController::activateInit() ...@@ -113,9 +113,9 @@ void IOController::activateInit()
auto s = io.second; auto s = io.second;
// Проверка зависимостей // Проверка зависимостей
if( s->d_si.id != DefaultObjectId ) if( s->depend_sid != DefaultObjectId )
{ {
auto d_it = myiofind(s->d_si.id); auto d_it = myiofind(s->depend_sid);
if( d_it != myioEnd() ) if( d_it != myioEnd() )
s->checkDepend( d_it->second, this); s->checkDepend( d_it->second, this);
...@@ -675,8 +675,7 @@ IOController::USensorInfo::operator=(IOController_i::SensorIOInfo& r) ...@@ -675,8 +675,7 @@ IOController::USensorInfo::operator=(IOController_i::SensorIOInfo& r)
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
IOController::USensorInfo::USensorInfo(): d_value(1), d_off_value(0) IOController::USensorInfo::USensorInfo(): d_value(1), d_off_value(0)
{ {
d_si.id = uniset::DefaultObjectId; depend_sid = uniset::DefaultObjectId;
d_si.node = uniset::DefaultObjectId;
default_val = 0; default_val = 0;
value = default_val; value = default_val;
real_value = default_val; real_value = default_val;
...@@ -1086,10 +1085,10 @@ void IOController::getSensorInfo( Poco::JSON::Array::Ptr& jdata, std::shared_ptr ...@@ -1086,10 +1085,10 @@ void IOController::getSensorInfo( Poco::JSON::Array::Ptr& jdata, std::shared_ptr
jsens->set("undefined", s->undefined); jsens->set("undefined", s->undefined);
jsens->set("frozen", s->frozen); jsens->set("frozen", s->frozen);
jsens->set("blocked", s->blocked); jsens->set("blocked", s->blocked);
if( s->d_si.id != DefaultObjectId ) if( s->depend_sid != DefaultObjectId )
{ {
jsens->set("depend_sensor", ORepHelpers::getShortName(uniset_conf()->oind->getMapName(s->d_si.id))); jsens->set("depend_sensor", ORepHelpers::getShortName(uniset_conf()->oind->getMapName(s->depend_sid)));
jsens->set("depend_sensor_id", s->d_si.id); jsens->set("depend_sensor_id", s->depend_sid);
jsens->set("depend_value", s->d_value); jsens->set("depend_value", s->d_value);
jsens->set("depend_off_value", s->d_off_value); jsens->set("depend_off_value", s->d_off_value);
} }
...@@ -1104,7 +1103,6 @@ void IOController::getSensorInfo( Poco::JSON::Array::Ptr& jdata, std::shared_ptr ...@@ -1104,7 +1103,6 @@ void IOController::getSensorInfo( Poco::JSON::Array::Ptr& jdata, std::shared_ptr
// ::CORBA::Boolean undefined; // ::CORBA::Boolean undefined;
// ::CORBA::Boolean blocked; // ::CORBA::Boolean blocked;
// ::CORBA::Long priority; // ::CORBA::Long priority;
// IOController_i::SensorInfo d_si = { uniset::DefaultObjectId, uniset::DefaultObjectId }; /*!< идентификатор датчика, от которого зависит данный */
// long d_value = { 1 }; /*!< разрешающее работу значение датчика от которого зависит данный */ // long d_value = { 1 }; /*!< разрешающее работу значение датчика от которого зависит данный */
// long d_off_value = { 0 }; /*!< блокирующее значение */ // long d_off_value = { 0 }; /*!< блокирующее значение */
} }
......
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