Commit 6a73911e authored by Pavel Vainerman's avatar Pavel Vainerman

(2.0): Удалил механизм зависимостей из IOBase, т.к. он реализуется теперь на…

(2.0): Удалил механизм зависимостей из IOBase, т.к. он реализуется теперь на уровне IOController-а (SharedMemory).
parent 0c003eb4
...@@ -36,9 +36,6 @@ static const int NoSafety = -1; ...@@ -36,9 +36,6 @@ static const int NoSafety = -1;
jar_state(false), jar_state(false),
ondelay_state(false), ondelay_state(false),
offdelay_state(false), offdelay_state(false),
d_id(UniSetTypes::DefaultObjectId),
d_value(0),
d_off_value(0),
t_ai(UniSetTypes::DefaultObjectId) t_ai(UniSetTypes::DefaultObjectId)
{} {}
...@@ -49,8 +46,6 @@ static const int NoSafety = -1; ...@@ -49,8 +46,6 @@ static const int NoSafety = -1;
bool check_on_delay( bool val ); /*!< реализация задержки на включение */ bool check_on_delay( bool val ); /*!< реализация задержки на включение */
bool check_off_delay( bool val ); /*!< реализация задержки на отключение */ bool check_off_delay( bool val ); /*!< реализация задержки на отключение */
bool check_depend( SMInterface* shm ); /*!< проверка разрешения(зависимости) от другого датчика */
IOController_i::SensorInfo si; IOController_i::SensorInfo si;
UniversalIO::IOType stype; /*!< тип канала (DI,DO,AI,AO) */ UniversalIO::IOType stype; /*!< тип канала (DI,DO,AI,AO) */
IOController_i::CalibrateInfo cal; /*!< калибровочные параметры */ IOController_i::CalibrateInfo cal; /*!< калибровочные параметры */
...@@ -86,12 +81,6 @@ static const int NoSafety = -1; ...@@ -86,12 +81,6 @@ static const int NoSafety = -1;
bool ondelay_state; /*!< значение для задержки включения */ bool ondelay_state; /*!< значение для задержки включения */
bool offdelay_state; /*!< значение для задержки отключения */ bool offdelay_state; /*!< значение для задержки отключения */
// Зависимость (d - depend)
UniSetTypes::ObjectId d_id; /*!< идентификатор датчика, от которого зависит данный */
IOController::IOStateList::iterator d_it; /*! итератор на датчик от которого зависит данный */
long d_value; /*!< разрешающее работу значение датчика от которого зависит данный */
long d_off_value; /*!< блокирующее значение */
// Порог // Порог
UniSetTypes::ObjectId t_ai; /*!< если данный датчик дискретный, UniSetTypes::ObjectId t_ai; /*!< если данный датчик дискретный,
и является пороговым, то в данном поле и является пороговым, то в данном поле
......
...@@ -92,17 +92,6 @@ bool IOBase::check_off_delay( bool val ) ...@@ -92,17 +92,6 @@ bool IOBase::check_off_delay( bool val )
return offdelay_state; return offdelay_state;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
bool IOBase::check_depend( SMInterface* shm )
{
if( d_id == DefaultObjectId )
return true;
if( shm->localGetValue(d_it,d_id) != d_value )
return false;
return true;
}
// -----------------------------------------------------------------------------
void IOBase::processingAsAI( IOBase* it, long val, SMInterface* shm, bool force ) void IOBase::processingAsAI( IOBase* it, long val, SMInterface* shm, bool force )
{ {
// проверка на обрыв // проверка на обрыв
...@@ -115,10 +104,6 @@ void IOBase::processingAsAI( IOBase* it, long val, SMInterface* shm, bool force ...@@ -115,10 +104,6 @@ void IOBase::processingAsAI( IOBase* it, long val, SMInterface* shm, bool force
} }
// проверка зависимости // проверка зависимости
if( !it->check_depend(shm) )
val = it->d_off_value;
else
{
if( !it->nofilter && it->df.size() > 1 ) if( !it->nofilter && it->df.size() > 1 )
{ {
if( it->f_median ) if( it->f_median )
...@@ -152,8 +137,6 @@ void IOBase::processingAsAI( IOBase* it, long val, SMInterface* shm, bool force ...@@ -152,8 +137,6 @@ void IOBase::processingAsAI( IOBase* it, long val, SMInterface* shm, bool force
if( !it->noprecision && it->cal.precision > 0 ) if( !it->noprecision && it->cal.precision > 0 )
val *= lround(pow10(it->cal.precision)); val *= lround(pow10(it->cal.precision));
} // end of 'check_depend'
// если предыдущее значение "обрыв", // если предыдущее значение "обрыв",
// то сбрасываем признак // то сбрасываем признак
{ {
...@@ -186,9 +169,6 @@ void IOBase::processingFasAI( IOBase* it, float fval, SMInterface* shm, bool for ...@@ -186,9 +169,6 @@ void IOBase::processingFasAI( IOBase* it, float fval, SMInterface* shm, bool for
} }
// проверка зависимости // проверка зависимости
if( !it->check_depend(shm) )
val = it->d_off_value;
else
{ {
// Читаем с использованием фильтра... // Читаем с использованием фильтра...
if( !it->nofilter ) if( !it->nofilter )
...@@ -222,9 +202,7 @@ void IOBase::processingFasAI( IOBase* it, float fval, SMInterface* shm, bool for ...@@ -222,9 +202,7 @@ void IOBase::processingFasAI( IOBase* it, float fval, SMInterface* shm, bool for
void IOBase::processingAsDI( IOBase* it, bool set, SMInterface* shm, bool force ) void IOBase::processingAsDI( IOBase* it, bool set, SMInterface* shm, bool force )
{ {
// проверка зависимости // проверка зависимости
if( !it->check_depend(shm) ) if( it->invert )
set = (bool)it->d_off_value;
else if( it->invert )
set ^= true; set ^= true;
// Проверяем именно в такой последовательности! // Проверяем именно в такой последовательности!
...@@ -247,10 +225,6 @@ long IOBase::processingAsAO( IOBase* it, SMInterface* shm, bool force ) ...@@ -247,10 +225,6 @@ long IOBase::processingAsAO( IOBase* it, SMInterface* shm, bool force )
uniset_rwmutex_rlock lock(it->val_lock); uniset_rwmutex_rlock lock(it->val_lock);
long val = it->value; long val = it->value;
// проверка зависимости
if( !it->check_depend(shm) )
return it->d_off_value;
if( force ) if( force )
{ {
val = shm->localGetValue(it->ioit,it->si.id); val = shm->localGetValue(it->ioit,it->si.id);
...@@ -293,10 +267,6 @@ long IOBase::processingAsAO( IOBase* it, SMInterface* shm, bool force ) ...@@ -293,10 +267,6 @@ long IOBase::processingAsAO( IOBase* it, SMInterface* shm, bool force )
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
bool IOBase::processingAsDO( IOBase* it, SMInterface* shm, bool force ) bool IOBase::processingAsDO( IOBase* it, SMInterface* shm, bool force )
{ {
// проверка зависимости
if( !it->check_depend(shm) )
return (bool)it->d_off_value;
uniset_rwmutex_rlock lock(it->val_lock); uniset_rwmutex_rlock lock(it->val_lock);
bool set = it->value; bool set = it->value;
...@@ -309,10 +279,6 @@ bool IOBase::processingAsDO( IOBase* it, SMInterface* shm, bool force ) ...@@ -309,10 +279,6 @@ bool IOBase::processingAsDO( IOBase* it, SMInterface* shm, bool force )
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
float IOBase::processingFasAO( IOBase* it, SMInterface* shm, bool force ) float IOBase::processingFasAO( IOBase* it, SMInterface* shm, bool force )
{ {
// проверка зависимости
if( !it->check_depend(shm) )
return (float)it->d_off_value;
uniset_rwmutex_rlock lock(it->val_lock); uniset_rwmutex_rlock lock(it->val_lock);
long val = it->value; long val = it->value;
...@@ -452,26 +418,6 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm, ...@@ -452,26 +418,6 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm,
b->f_filter_iir = false; b->f_filter_iir = false;
shm->initIterator(b->ioit); shm->initIterator(b->ioit);
shm->initIterator(b->d_it);
string d_txt(it.getProp("depend"));
if( !d_txt.empty() )
{
b->d_id = conf->getSensorID(d_txt);
if( b->d_id == DefaultObjectId )
{
if( dlog )
dlog[Debug::CRIT] << myname << "(IOBase::readItem): sensor='"
<< it.getProp("name") << "' err: "
<< " Unknown SensorID for depend='" << d_txt
<< endl;
return false;
}
// по умолчанию срабатывание на "1"
b->d_value = it.getProp("depend_value").empty() ? 1 : it.getIntProp("depend_value");
b->d_off_value = it.getIntProp("depend_off_value");
}
if( b->stype == UniversalIO::AI || b->stype == UniversalIO::AO ) if( b->stype == UniversalIO::AI || b->stype == UniversalIO::AO )
{ {
......
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