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