Commit c08f2b19 authored by Pavel Vainerman's avatar Pavel Vainerman

Merge remote-tracking branch '1.x/master'

Conflicts: Utilities/MBTester/mbrtuslave.cc Utilities/MBTester/mbtcpserver.cc conf/libuniset2.spec extensions/IOControl/IOControl.cc extensions/ModbusMaster/MBExchange.cc extensions/ModbusSlave/MBSlave.cc extensions/include/IOBase.h extensions/lib/IOBase.cc
parents cacbe071 7b66aa44
...@@ -96,7 +96,6 @@ int main( int argc, char **argv ) ...@@ -96,7 +96,6 @@ int main( int argc, char **argv )
{ {
cout << "(init): dev=" << dev << " speed=" << speed cout << "(init): dev=" << dev << " speed=" << speed
<< " myaddr=" << ModbusRTU::addr2str(myaddr) << " myaddr=" << ModbusRTU::addr2str(myaddr)
<< " timeout=" << tout << " msec "
<< endl; << endl;
dlog.addLevel( Debug::type(Debug::CRIT | Debug::WARN | Debug::INFO) ); dlog.addLevel( Debug::type(Debug::CRIT | Debug::WARN | Debug::INFO) );
......
...@@ -90,7 +90,6 @@ int main( int argc, char **argv ) ...@@ -90,7 +90,6 @@ int main( int argc, char **argv )
{ {
cout << "(init): iaddr: " << iaddr << ":" << port cout << "(init): iaddr: " << iaddr << ":" << port
<< " myaddr=" << ModbusRTU::addr2str(myaddr) << " myaddr=" << ModbusRTU::addr2str(myaddr)
<< " timeout=" << tout << " msec "
<< endl; << endl;
dlog.addLevel( Debug::ANY ); dlog.addLevel( Debug::ANY );
......
...@@ -716,8 +716,10 @@ bool IOControl::initIOItem( UniXML_iterator& it ) ...@@ -716,8 +716,10 @@ bool IOControl::initIOItem( UniXML_iterator& it )
else else
inf.subdev = DefaultSubdev; inf.subdev = DefaultSubdev;
} }
std::string prop_prefix( prefix+"_" );
if( !IOBase::initItem(&inf,it,shm,&dlog,myname,filtersize,filterT) ) if( !IOBase::initItem(&inf,it,shm,prop_prefix,false,&dlog,myname,filtersize,filterT) )
return false; return false;
// если вектор уже заполнен // если вектор уже заполнен
...@@ -727,7 +729,7 @@ bool IOControl::initIOItem( UniXML_iterator& it ) ...@@ -727,7 +729,7 @@ bool IOControl::initIOItem( UniXML_iterator& it )
if( maxItem >= iomap.size() ) if( maxItem >= iomap.size() )
iomap.resize(maxItem+30); iomap.resize(maxItem+30);
int prior = it.getIntProp("iopriority"); int prior = IOBase::initIntProp(it,"iopriority",prop_prefix,false);
if( prior > 0 ) if( prior > 0 )
{ {
IOPriority p(prior,maxItem); IOPriority p(prior,maxItem);
...@@ -747,7 +749,7 @@ bool IOControl::initIOItem( UniXML_iterator& it ) ...@@ -747,7 +749,7 @@ bool IOControl::initIOItem( UniXML_iterator& it )
<< " for '" << conf->oind->getNameById(inf.t_ai) << endl; << " for '" << conf->oind->getNameById(inf.t_ai) << endl;
return true; return true;
} }
inf.channel = it.getIntProp("channel"); inf.channel = IOBase::initIntProp(it,"channel",prop_prefix,false);
if( inf.channel < 0 || inf.channel > 32 ) if( inf.channel < 0 || inf.channel > 32 )
{ {
dwarn << myname << "(readItem): Unknown channel: " << inf.channel dwarn << myname << "(readItem): Unknown channel: " << inf.channel
...@@ -756,16 +758,16 @@ bool IOControl::initIOItem( UniXML_iterator& it ) ...@@ -756,16 +758,16 @@ bool IOControl::initIOItem( UniXML_iterator& it )
} }
inf.lamp = it.getIntProp("lamp"); inf.lamp = IOBase::initIntProp(it,"lamp",prop_prefix,false);
inf.no_testlamp = it.getIntProp("no_iotestlamp"); inf.no_testlamp = IOBase::initIntProp(it,"no_iotestlamp",prop_prefix,false);
inf.enable_testmode = it.getIntProp("enable_testmode"); inf.enable_testmode = IOBase::initIntProp(it,"enable_testmode",prop_prefix,false);
inf.disable_testmode = it.getIntProp("disable_testmode"); inf.disable_testmode = IOBase::initIntProp(it,"disable_testmode",prop_prefix,false);
inf.aref = 0; inf.aref = 0;
inf.range = 0; inf.range = 0;
if( inf.stype == UniversalIO::AI || inf.stype == UniversalIO::AO ) if( inf.stype == UniversalIO::AI || inf.stype == UniversalIO::AO )
{ {
inf.range = it.getIntProp("range"); inf.range = IOBase::initIntProp(it,"range",prop_prefix,false);
if( inf.range < 0 || inf.range > 3 ) if( inf.range < 0 || inf.range > 3 )
{ {
dcrit << myname << "(readItem): Unknown 'range': " << inf.range dcrit << myname << "(readItem): Unknown 'range': " << inf.range
...@@ -774,7 +776,7 @@ bool IOControl::initIOItem( UniXML_iterator& it ) ...@@ -774,7 +776,7 @@ bool IOControl::initIOItem( UniXML_iterator& it )
return false; return false;
} }
inf.aref = it.getIntProp("aref"); inf.aref = IOBase::initIntProp(it,"aref",prop_prefix,false);
if( inf.aref < 0 || inf.aref > 3 ) if( inf.aref < 0 || inf.aref > 3 )
{ {
dcrit << myname << "(readItem): Unknown 'aref': " << inf.aref dcrit << myname << "(readItem): Unknown 'aref': " << inf.aref
......
...@@ -137,6 +137,9 @@ ...@@ -137,6 +137,9 @@
<br>\b enable_testmode - включить в работу во время тестового режима tmConfigEnable <br>\b enable_testmode - включить в работу во время тестового режима tmConfigEnable
<br>\b disable_testmode - исключить из работы в тестовом режиме tmConfigDisable. <br>\b disable_testmode - исключить из работы в тестовом режиме tmConfigDisable.
\note Помимо этого для конкретного процесса можно переопределять настройки используя "prefix_" (префикс плюс подчёркивание).
Где "prefix" - это префикс это префикс заданный в конструкторе IOControl.
\section sec_IOC_ConfList Список датчиков для процесса в/в \section sec_IOC_ConfList Список датчиков для процесса в/в
\section sec_IOC_TestMode Тестовый режим \section sec_IOC_TestMode Тестовый режим
......
...@@ -1869,7 +1869,7 @@ MBExchange::RSProperty* MBExchange::addProp( PList& plist, RSProperty&& p ) ...@@ -1869,7 +1869,7 @@ MBExchange::RSProperty* MBExchange::addProp( PList& plist, RSProperty&& p )
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
bool MBExchange::initRSProperty( RSProperty& p, UniXML_iterator& it ) bool MBExchange::initRSProperty( RSProperty& p, UniXML_iterator& it )
{ {
if( !IOBase::initItem(&p,it,shm,&dlog,myname) ) if( !IOBase::initItem(&p,it,shm,prop_prefix,false,&dlog,myname) )
return false; return false;
// проверяем не пороговый ли это датчик (т.е. не связанный с обменом) // проверяем не пороговый ли это датчик (т.е. не связанный с обменом)
...@@ -1892,18 +1892,6 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML_iterator& it ) ...@@ -1892,18 +1892,6 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML_iterator& it )
p.cdiagram = 0; p.cdiagram = 0;
} }
string stype( it.getProp(prop_prefix + "iotype") );
if( !stype.empty() )
{
p.stype = UniSetTypes::getIOType(stype);
if( p.stype == UniversalIO::UnknownIOType )
{
dcrit << myname << "(IOBase::readItem): неизвестный iotype=: "
<< stype << " for " << it.getProp("name") << endl;
return false;
}
}
string sbit(it.getProp(prop_prefix + "nbit")); string sbit(it.getProp(prop_prefix + "nbit"));
if( !sbit.empty() ) if( !sbit.empty() )
{ {
......
...@@ -140,7 +140,7 @@ ...@@ -140,7 +140,7 @@
Помимо этого можно задавать следующие параметры: Помимо этого можно задавать следующие параметры:
- \b tcp_vtype - тип переменной. см VTypes::VType. - \b tcp_vtype - тип переменной. см VTypes::VType.
- \b tcp_rawdata - [0|1] - игнорировать или нет параметры калибровки - \b tcp_rawdata - [0|1] - игнорировать или нет параметры калибровки (cmin,cmax,rmin,rmax,presicion,caldiagram)
- \b tcp_iotype - [DI,DO,AI,AO] - переназначить тип датчика. По умолчанию используется поле iotype. - \b tcp_iotype - [DI,DO,AI,AO] - переназначить тип датчика. По умолчанию используется поле iotype.
- \b tcp_nbit - номер бита в слове. Используется для DI,DO в случае когда для опроса используется - \b tcp_nbit - номер бита в слове. Используется для DI,DO в случае когда для опроса используется
функция читающая слова (03 функция читающая слова (03
......
...@@ -806,43 +806,55 @@ bool MBSlave::readItem( const UniXML& xml, UniXML_iterator& it, xmlNode* sec ) ...@@ -806,43 +806,55 @@ bool MBSlave::readItem( const UniXML& xml, UniXML_iterator& it, xmlNode* sec )
bool MBSlave::initItem( UniXML_iterator& it ) bool MBSlave::initItem( UniXML_iterator& it )
{ {
IOProperty p; IOProperty p;
string prop_prefix(prefix+"_");
if( !IOBase::initItem( static_cast<IOBase*>(&p),it,shm,&dlog,myname) ) if( !IOBase::initItem( static_cast<IOBase*>(&p),it,shm,prop_prefix,false,&dlog,myname) )
return false; return false;
if( it.getIntProp(prop_prefix + "rawdata") )
{
p.cal.minRaw = 0;
p.cal.maxRaw = 0;
p.cal.minCal = 0;
p.cal.maxCal = 0;
p.cal.precision = 0;
p.cdiagram = 0;
}
if( mbregFromID ) if( mbregFromID )
p.mbreg = p.si.id; p.mbreg = p.si.id;
else else
{ {
string r = it.getProp("mbreg"); string r = IOBase::initProp(it,"mbreg",prop_prefix,false);
if( r.empty() ) if( r.empty() )
{ {
dcrit << myname << "(initItem): Unknown 'mbreg' for " << it.getProp("name") << endl; dcrit << myname << "(initItem): Unknown 'mbreg' for " << IOBase::initProp(it,"name",prop_prefix,false) << endl;
return false; return false;
} }
p.mbreg = ModbusRTU::str2mbData(r); p.mbreg = ModbusRTU::str2mbData(r);
} }
string stype( it.getProp("mb_iotype") ); string stype( IOBase::initProp(it,"mb_iotype",prop_prefix,false) );
if( stype.empty() ) if( stype.empty() )
stype = it.getProp("iotype"); stype = IOBase::initProp(it,"iotype",prop_prefix,false);
p.stype = UniSetTypes::getIOType(stype); p.stype = UniSetTypes::getIOType(stype);
if( p.stype == UniversalIO::UnknownIOType ) if( p.stype == UniversalIO::UnknownIOType )
{ {
dcrit << myname << "(initItem): Unknown 'iotype' or 'mb_iotype' for " << it.getProp("name") << endl; dcrit << myname << "(initItem): Unknown 'iotype' or 'mb_iotype' for " << IOBase::initProp(it,"name",prop_prefix,false) << endl;
return false; return false;
} }
p.amode = MBSlave::amRW; p.amode = MBSlave::amRW;
string am(it.getProp("mb_accessmode")); string am(IOBase::initProp(it,"mb_accessmode",prop_prefix,false));
if( am == "ro" ) if( am == "ro" )
p.amode = MBSlave::amRO; p.amode = MBSlave::amRO;
else if( am == "rw" ) else if( am == "rw" )
p.amode = MBSlave::amRW; p.amode = MBSlave::amRW;
string vt(it.getProp("mb_vtype")); string vt(IOBase::initProp(it,"mb_vtype",prop_prefix,false));
if( vt.empty() ) if( vt.empty() )
{ {
p.vtype = VTypes::vtUnknown; p.vtype = VTypes::vtUnknown;
...@@ -856,7 +868,7 @@ bool MBSlave::initItem( UniXML_iterator& it ) ...@@ -856,7 +868,7 @@ bool MBSlave::initItem( UniXML_iterator& it )
if( v == VTypes::vtUnknown ) if( v == VTypes::vtUnknown )
{ {
dcrit << myname << "(initItem): Unknown rtuVType=" << vt << " for " dcrit << myname << "(initItem): Unknown rtuVType=" << vt << " for "
<< it.getProp("name") << IOBase::initProp(it,"name",prop_prefix,false)
<< endl; << endl;
return false; return false;
......
...@@ -126,11 +126,21 @@ static const int NoSafety = -1; ...@@ -126,11 +126,21 @@ static const int NoSafety = -1;
static float processingFasAO( IOBase* it, SMInterface* shm, bool force ); static float processingFasAO( IOBase* it, SMInterface* shm, bool force );
static bool processingAsDO( IOBase* it, SMInterface* shm, bool force ); static bool processingAsDO( IOBase* it, SMInterface* shm, bool force );
static void processingThreshold( IOBase* it, SMInterface* shm, bool force ); static void processingThreshold( IOBase* it, SMInterface* shm, bool force );
/*! \param initPrefixOnly - TRUE - инициализировать только свойста с prefix (или брать значения по умолчанию).
FALSE - сперва искать свойство с prefix, если не найдено брать без prefix.
*/
static bool initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm, static bool initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm,
const std::string& prefix, bool init_prefix_only,
DebugStream* dlog=0, std::string myname="", DebugStream* dlog=0, std::string myname="",
int def_filtersize=0, float def_filterT=0.0, int def_filtersize=0, float def_filterT=0.0,
float def_lsparam=0.2, float def_iir_coeff_prev=0.5, float def_lsparam=0.2, float def_iir_coeff_prev=0.5,
float def_iir_coeff_new=0.5 ); float def_iir_coeff_new=0.5 );
// helpes
static std::string initProp( UniXML_iterator& it, const std::string& prop, const std::string& prefix, bool prefonly, const std::string& defval="" );
static int initIntProp( UniXML_iterator& it, const std::string& prop, const std::string& prefix, bool prefonly, const int defval=0 );
}; };
......
...@@ -372,20 +372,50 @@ void IOBase::processingThreshold( IOBase* it, SMInterface* shm, bool force ) ...@@ -372,20 +372,50 @@ void IOBase::processingThreshold( IOBase* it, SMInterface* shm, bool force )
processingAsDI(it,set,shm,force); processingAsDI(it,set,shm,force);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
std::string IOBase::initProp( UniXML_iterator& it, const std::string& prop, const std::string& prefix, bool prefonly, const std::string& defval )
{
if( !it.getProp(prefix+prop).empty() )
return it.getProp(prefix+prop);
if( prefonly )
return defval;
if( !it.getProp(prop).empty() )
return it.getProp(prop);
bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm, return defval;
}
// -----------------------------------------------------------------------------
int IOBase::initIntProp( UniXML_iterator& it, const std::string& prop, const std::string& prefix, bool prefonly, const int defval )
{
string pp(prefix+prop);
if( !it.getProp(pp).empty() )
return it.getIntProp(pp);
if( prefonly )
return defval;
if( !it.getProp(prop).empty() )
return it.getIntProp(prop);
return defval;
}
// -----------------------------------------------------------------------------
bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm, const std::string& prefix,
bool init_prefix_only,
DebugStream* dlog, std::string myname, DebugStream* dlog, std::string myname,
int def_filtersize, float def_filterT, float def_lsparam, int def_filtersize, float def_filterT, float def_lsparam,
float def_iir_coeff_prev, float def_iir_coeff_new ) float def_iir_coeff_prev, float def_iir_coeff_new )
{ {
string sname( it.getProp("name") ); string sname( initProp(it,"name",prefix,init_prefix_only) );
ObjectId sid = DefaultObjectId; ObjectId sid = DefaultObjectId;
if( it.getProp("id").empty() ) if( initProp(it,"id",prefix,init_prefix_only).empty() )
sid = conf->getSensorID(sname); sid = conf->getSensorID(sname);
else else
{ {
sid = it.getPIntProp("id", DefaultObjectId); sid = initIntProp(it,"id",prefix,init_prefix_only,DefaultObjectId);
} }
if( sid == DefaultObjectId ) if( sid == DefaultObjectId )
...@@ -401,26 +431,26 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm, ...@@ -401,26 +431,26 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm,
b->si.id = sid; b->si.id = sid;
b->si.node = conf->getLocalNode(); b->si.node = conf->getLocalNode();
b->nofilter = it.getIntProp("nofilter"); b->nofilter = initIntProp(it,"nofilter",prefix,init_prefix_only);
b->ignore = it.getIntProp("ioignore"); b->ignore = initIntProp(it,"ioignore",prefix,init_prefix_only);
b->invert = it.getIntProp("ioinvert"); b->invert = initIntProp(it,"ioinvert",prefix,init_prefix_only);
b->defval = it.getIntProp("default"); b->defval = initIntProp(it,"default",prefix,init_prefix_only);
b->noprecision = it.getIntProp("noprecision"); b->noprecision = initIntProp(it,"noprecision",prefix,init_prefix_only);
b->value = b->defval; b->value = b->defval;
b->breaklim = it.getIntProp("breaklim"); b->breaklim = initIntProp(it,"breaklim",prefix,init_prefix_only);
long msec = it.getPIntProp("debouncedelay", UniSetTimer::WaitUpTime); long msec = initIntProp(it,"debouncedelay",prefix,init_prefix_only, UniSetTimer::WaitUpTime);
b->ptDebounce.setTiming(msec); b->ptDebounce.setTiming(msec);
msec = it.getPIntProp("ondelay", UniSetTimer::WaitUpTime); msec = initIntProp(it,"ondelay",prefix,init_prefix_only, UniSetTimer::WaitUpTime);
b->ptOnDelay.setTiming(msec); b->ptOnDelay.setTiming(msec);
msec = it.getPIntProp("offdelay", UniSetTimer::WaitUpTime); msec = initIntProp(it,"offdelay",prefix,init_prefix_only, UniSetTimer::WaitUpTime);
b->ptOffDelay.setTiming(msec); b->ptOffDelay.setTiming(msec);
b->front = false; b->front = false;
std::string front_t( it.getProp("iofront") ); std::string front_t( initProp(it,"iofront",prefix,init_prefix_only) );
if( !front_t.empty() ) if( !front_t.empty() )
{ {
if( front_t == "01" ) if( front_t == "01" )
...@@ -442,14 +472,14 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm, ...@@ -442,14 +472,14 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm,
} }
} }
b->safety = it.getPIntProp("safety", NoSafety); b->safety = initIntProp(it,"safety",prefix,init_prefix_only, NoSafety);
b->stype = UniSetTypes::getIOType(it.getProp("iotype")); b->stype = UniSetTypes::getIOType(initProp(it,"iotype",prefix,init_prefix_only));
if( b->stype == UniversalIO::UnknownIOType ) if( b->stype == UniversalIO::UnknownIOType )
{ {
if( dlog && dlog->is_crit() ) if( dlog && dlog->is_crit() )
dlog->crit() << myname << "(IOBase::readItem): неизвестный iotype=: " dlog->crit() << myname << "(IOBase::readItem): неизвестный iotype=: "
<< it.getProp("iotype") << " для " << sname << endl; << initProp(it,"iotype",prefix,init_prefix_only) << " для " << sname << endl;
return false; return false;
} }
...@@ -467,17 +497,17 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm, ...@@ -467,17 +497,17 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm,
if( b->stype == UniversalIO::AI || b->stype == UniversalIO::AO ) if( b->stype == UniversalIO::AI || b->stype == UniversalIO::AO )
{ {
b->cal.minRaw = it.getIntProp("rmin"); b->cal.minRaw = initIntProp(it,"rmin",prefix,init_prefix_only);
b->cal.maxRaw = it.getIntProp("rmax"); b->cal.maxRaw = initIntProp(it,"rmax",prefix,init_prefix_only);
b->cal.minCal = it.getIntProp("cmin"); b->cal.minCal = initIntProp(it,"cmin",prefix,init_prefix_only);
b->cal.maxCal = it.getIntProp("cmax"); b->cal.maxCal = initIntProp(it,"cmax",prefix,init_prefix_only);
b->cal.precision = it.getIntProp("precision"); b->cal.precision = initIntProp(it,"precision",prefix,init_prefix_only);
int f_size = def_filtersize; int f_size = def_filtersize;
float f_T = def_filterT; float f_T = def_filterT;
float f_lsparam = def_lsparam; float f_lsparam = def_lsparam;
int f_median = it.getIntProp("filtermedian"); int f_median = initIntProp(it,"filtermedian",prefix,init_prefix_only);
int f_iir = it.getIntProp("iir_thr"); int f_iir = initIntProp(it,"iir_thr",prefix,init_prefix_only);
float f_iir_coeff_prev = def_iir_coeff_prev; float f_iir_coeff_prev = def_iir_coeff_prev;
float f_iir_coeff_new = def_iir_coeff_new; float f_iir_coeff_new = def_iir_coeff_new;
...@@ -490,29 +520,29 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm, ...@@ -490,29 +520,29 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm,
{ {
if( f_iir > 0 ) if( f_iir > 0 )
b->f_filter_iir = true; b->f_filter_iir = true;
if( !it.getProp("filtersize").empty() ) if( !initProp(it,"filtersize",prefix,init_prefix_only).empty() )
f_size = it.getPIntProp("filtersize",def_filtersize); f_size = initIntProp(it,"filtersize",prefix,init_prefix_only,def_filtersize);
} }
if( !it.getProp("filterT").empty() ) if( !initProp(it,"filterT",prefix,init_prefix_only).empty() )
{ {
f_T = atof(it.getProp("filterT").c_str()); f_T = atof(initProp(it,"filterT",prefix,init_prefix_only).c_str());
if( f_T < 0 ) if( f_T < 0 )
f_T = 0.0; f_T = 0.0;
} }
if( !it.getProp("leastsqr").empty() ) if( !initProp(it,"leastsqr",prefix,init_prefix_only).empty() )
{ {
b->f_ls = true; b->f_ls = true;
f_lsparam = atof(it.getProp("leastsqr").c_str()); f_lsparam = atof(initProp(it,"leastsqr",prefix,init_prefix_only).c_str());
if( f_lsparam < 0 ) if( f_lsparam < 0 )
f_lsparam = def_lsparam; f_lsparam = def_lsparam;
} }
if( !it.getProp("iir_coeff_prev").empty() ) if( !initProp(it,"iir_coeff_prev",prefix,init_prefix_only).empty() )
f_iir_coeff_prev = atof(it.getProp("iir_coeff_prev").c_str()); f_iir_coeff_prev = atof(initProp(it,"iir_coeff_prev",prefix,init_prefix_only).c_str());
if( !it.getProp("iir_coeff_new").empty() ) if( !initProp(it,"iir_coeff_new",prefix,init_prefix_only).empty() )
f_iir_coeff_new = atof(it.getProp("iir_coeff_new").c_str()); f_iir_coeff_new = atof(initProp(it,"iir_coeff_new",prefix,init_prefix_only).c_str());
if( b->stype == UniversalIO::AI ) if( b->stype == UniversalIO::AI )
b->df.setSettings( f_size, f_T, f_lsparam, f_iir, b->df.setSettings( f_size, f_T, f_lsparam, f_iir,
...@@ -520,19 +550,19 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm, ...@@ -520,19 +550,19 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm,
b->df.init(b->defval); b->df.init(b->defval);
std::string caldiagram( it.getProp("caldiagram") ); std::string caldiagram( initProp(it,"caldiagram",prefix,init_prefix_only) );
if( !caldiagram.empty() ) if( !caldiagram.empty() )
{ {
b->cdiagram = UniSetExtensions::buildCalibrationDiagram(caldiagram); b->cdiagram = UniSetExtensions::buildCalibrationDiagram(caldiagram);
if( !it.getProp("cal_cachesize").empty() ) if( !initProp(it,"cal_cachesize",prefix,init_prefix_only).empty() )
b->cdiagram->setCacheSize(it.getIntProp("cal_cachesize")); b->cdiagram->setCacheSize(initIntProp(it,"cal_cachesize",prefix,init_prefix_only));
if( !it.getProp("cal_cacheresort").empty() ) if( !initProp(it,"cal_cacheresort",prefix,init_prefix_only).empty() )
b->cdiagram->setCacheResortCycle(it.getIntProp("cal_cacheresort")); b->cdiagram->setCacheResortCycle(initIntProp(it,"cal_cacheresort",prefix,init_prefix_only));
} }
} }
else if( b->stype == UniversalIO::DI || b->stype == UniversalIO::DO ) else if( b->stype == UniversalIO::DI || b->stype == UniversalIO::DO )
{ {
string tai(it.getProp("threshold_aid")); string tai(initProp(it,"threshold_aid",prefix,init_prefix_only));
if( !tai.empty() ) if( !tai.empty() )
{ {
b->t_ai = conf->getSensorID(tai); b->t_ai = conf->getSensorID(tai);
...@@ -544,9 +574,9 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm, ...@@ -544,9 +574,9 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm,
return false; return false;
} }
b->ti.lowlimit = it.getIntProp("lowlimit"); b->ti.lowlimit = initIntProp(it,"lowlimit",prefix,init_prefix_only);
b->ti.hilimit = it.getIntProp("hilimit"); b->ti.hilimit = initIntProp(it,"hilimit",prefix,init_prefix_only);
b->ti.invert = it.getIntProp("threshold_invert"); b->ti.invert = initIntProp(it,"threshold_invert",prefix,init_prefix_only);
shm->initIterator(b->t_ait); shm->initIterator(b->t_ait);
} }
} }
......
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