Commit fab58d22 authored by Pavel Vainerman's avatar Pavel Vainerman

(IOBase): убрал возможность переопределять id и name (т.к. они должны быть

уникальны в системе). Откорректировал, какие поля можно переопределять в ModbusSlave(Master).
parent b3f6c9d2
...@@ -1920,7 +1920,6 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML_iterator& it ) ...@@ -1920,7 +1920,6 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML_iterator& it )
return true; return true;
} }
if( it.getIntProp(prop_prefix + "rawdata") ) if( it.getIntProp(prop_prefix + "rawdata") )
{ {
p.cal.minRaw = 0; p.cal.minRaw = 0;
...@@ -1991,7 +1990,7 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML_iterator& it ) ...@@ -1991,7 +1990,7 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML_iterator& it )
bool MBExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, MBExchange::RTUDevice* dev ) bool MBExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, MBExchange::RTUDevice* dev )
{ {
r->dev = dev; r->dev = dev;
r->mbval = it.getIntProp("default"); r->mbval = IOBase::initIntProp(it,"default",prefix,false);
if( dev->dtype == MBExchange::dtRTU ) if( dev->dtype == MBExchange::dtRTU )
{ {
...@@ -2009,7 +2008,7 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, MBExchange::RTUD ...@@ -2009,7 +2008,7 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, MBExchange::RTUD
if( !initRTU188item(it,r) ) if( !initRTU188item(it,r) )
return false; return false;
UniversalIO::IOTypes t = UniSetTypes::getIOType(it.getProp("iotype")); UniversalIO::IOTypes t = UniSetTypes::getIOType( IOBase::initProp(it,"iotype",prefix,false) );
r->mbreg = RTUStorage::getRegister(r->rtuJack,r->rtuChan,t); r->mbreg = RTUStorage::getRegister(r->rtuJack,r->rtuChan,t);
r->mbfunc = RTUStorage::getFunction(r->rtuJack,r->rtuChan,t); r->mbfunc = RTUStorage::getFunction(r->rtuJack,r->rtuChan,t);
...@@ -2034,7 +2033,7 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, MBExchange::RTUD ...@@ -2034,7 +2033,7 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, MBExchange::RTUD
} }
else else
{ {
string sr = it.getProp(prop_prefix + "mbreg"); string sr = IOBase::initProp(it,"mbreg",prop_prefix,false);
if( sr.empty() ) if( sr.empty() )
{ {
dlog[Debug::CRIT] << myname << "(initItem): Unknown 'mbreg' for " << it.getProp("name") << endl; dlog[Debug::CRIT] << myname << "(initItem): Unknown 'mbreg' for " << it.getProp("name") << endl;
...@@ -2044,7 +2043,7 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, MBExchange::RTUD ...@@ -2044,7 +2043,7 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, MBExchange::RTUD
} }
r->mbfunc = ModbusRTU::fnUnknown; r->mbfunc = ModbusRTU::fnUnknown;
string f = it.getProp(prop_prefix + "mbfunc"); string f = IOBase::initProp(it,"mbfunc",prop_prefix,false);
if( !f.empty() ) if( !f.empty() )
{ {
r->mbfunc = (ModbusRTU::SlaveFunctionCode)UniSetTypes::uni_atoi(f.c_str()); r->mbfunc = (ModbusRTU::SlaveFunctionCode)UniSetTypes::uni_atoi(f.c_str());
...@@ -2061,17 +2060,18 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, MBExchange::RTUD ...@@ -2061,17 +2060,18 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, MBExchange::RTUD
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
bool MBExchange::initRTUDevice( RTUDevice* d, UniXML_iterator& it ) bool MBExchange::initRTUDevice( RTUDevice* d, UniXML_iterator& it )
{ {
d->dtype = getDeviceType(it.getProp(prop_prefix + "mbtype")); std::string mbtype(IOBase::initProp(it,"mbtype",prop_prefix,false));
d->dtype = getDeviceType(mbtype);
if( d->dtype == dtUnknown ) if( d->dtype == dtUnknown )
{ {
dlog[Debug::CRIT] << myname << "(initRTUDevice): Unknown tcp_mbtype=" << it.getProp(prop_prefix + "mbtype") dlog[Debug::CRIT] << myname << "(initRTUDevice): Unknown tcp_mbtype='" << mbtype << "'"
<< ". Use: rtu " << ". Use: rtu "
<< " for " << it.getProp("name") << endl; << " for " << it.getProp("name") << endl;
return false; return false;
} }
string addr = it.getProp(prop_prefix + "mbaddr"); string addr = IOBase::initProp(it,"mbaddr",prop_prefix,false);
if( addr.empty() ) if( addr.empty() )
{ {
dlog[Debug::CRIT] << myname << "(initRTUDevice): Unknown mbaddr for " << it.getProp("name") << endl; dlog[Debug::CRIT] << myname << "(initRTUDevice): Unknown mbaddr for " << it.getProp("name") << endl;
...@@ -2095,10 +2095,10 @@ bool MBExchange::initItem( UniXML_iterator& it ) ...@@ -2095,10 +2095,10 @@ bool MBExchange::initItem( UniXML_iterator& it )
if( !initRSProperty(p,it) ) if( !initRSProperty(p,it) )
return false; return false;
string addr = it.getProp(prop_prefix + "mbaddr"); string addr = IOBase::initProp(it,"mbaddr",prop_prefix,false);
if( addr.empty() ) if( addr.empty() )
{ {
dlog[Debug::CRIT] << myname << "(initItem): Unknown mbaddr(" << prop_prefix << "mbaddr)='" << addr << "' for " << it.getProp("name") << endl; dlog[Debug::CRIT] << myname << "(initItem): Unknown mbaddr(" << IOBase::initProp(it,"mbaddr",prop_prefix,false) << ")='" << addr << "' for " << it.getProp("name") << endl;
return false; return false;
} }
...@@ -2112,7 +2112,7 @@ bool MBExchange::initItem( UniXML_iterator& it ) ...@@ -2112,7 +2112,7 @@ bool MBExchange::initItem( UniXML_iterator& it )
} }
ModbusRTU::ModbusData mbreg = 0; ModbusRTU::ModbusData mbreg = 0;
int fn = it.getIntProp(prop_prefix + "mbfunc"); int fn = IOBase::initIntProp(it,"mbfunc",prop_prefix,false);
if( dev->dtype == dtRTU188 ) if( dev->dtype == dtRTU188 )
{ {
...@@ -2132,10 +2132,10 @@ bool MBExchange::initItem( UniXML_iterator& it ) ...@@ -2132,10 +2132,10 @@ bool MBExchange::initItem( UniXML_iterator& it )
mbreg = p.si.id; // conf->getSensorID(it.getProp("name")); mbreg = p.si.id; // conf->getSensorID(it.getProp("name"));
else else
{ {
string reg = it.getProp(prop_prefix + "mbreg"); string reg = IOBase::initProp(it,"mbreg",prop_prefix,false);
if( reg.empty() ) if( reg.empty() )
{ {
dlog[Debug::CRIT] << myname << "(initItem): unknown mbreg(" << prop_prefix << ") for " << it.getProp("name") << endl; dlog[Debug::CRIT] << myname << "(initItem): unknown mbreg(" << IOBase::initProp(it,"mbreg",prop_prefix,false) << ") for " << it.getProp("name") << endl;
return false; return false;
} }
mbreg = ModbusRTU::str2mbData(reg); mbreg = ModbusRTU::str2mbData(reg);
...@@ -2212,7 +2212,7 @@ bool MBExchange::initItem( UniXML_iterator& it ) ...@@ -2212,7 +2212,7 @@ bool MBExchange::initItem( UniXML_iterator& it )
// Раз это регистр для записи, то как минимум надо сперва // Раз это регистр для записи, то как минимум надо сперва
// инициализировать значением из SM // инициализировать значением из SM
ri->sm_initOK = it.getIntProp(prop_prefix + "sm_initOK"); ri->sm_initOK = IOBase::initIntProp(it,"sm_initOK",prop_prefix,false);
ri->mb_initOK = true; // может быть переопределён если будет указан tcp_preinit="1" (см. ниже) ri->mb_initOK = true; // может быть переопределён если будет указан tcp_preinit="1" (см. ниже)
} }
else else
...@@ -2263,8 +2263,8 @@ bool MBExchange::initItem( UniXML_iterator& it ) ...@@ -2263,8 +2263,8 @@ bool MBExchange::initItem( UniXML_iterator& it )
} }
} }
// Фомируем список инициализации // Формируем список инициализации
bool need_init = it.getIntProp(prop_prefix + "preinit"); bool need_init = IOBase::initIntProp(it,"preinit",prop_prefix,false);
if( need_init && ModbusRTU::isWriteFunction(ri->mbfunc) ) if( need_init && ModbusRTU::isWriteFunction(ri->mbfunc) )
{ {
InitRegInfo ii; InitRegInfo ii;
...@@ -2272,13 +2272,13 @@ bool MBExchange::initItem( UniXML_iterator& it ) ...@@ -2272,13 +2272,13 @@ bool MBExchange::initItem( UniXML_iterator& it )
ii.dev = dev; ii.dev = dev;
ii.ri = ri; ii.ri = ri;
string s_reg(it.getProp(prop_prefix + "init_mbreg")); string s_reg( IOBase::initProp(it,"init_mbreg",prop_prefix,false) );
if( !s_reg.empty() ) if( !s_reg.empty() )
ii.mbreg = ModbusRTU::str2mbData(s_reg); ii.mbreg = ModbusRTU::str2mbData(s_reg);
else else
ii.mbreg = ri->mbreg; ii.mbreg = ri->mbreg;
string s_mbfunc(it.getProp(prop_prefix + "init_mbfunc")); string s_mbfunc( IOBase::initProp(it,"init_mbfunc",prop_prefix,false) );
if( !s_mbfunc.empty() ) if( !s_mbfunc.empty() )
{ {
ii.mbfunc = (ModbusRTU::SlaveFunctionCode)UniSetTypes::uni_atoi(s_mbfunc); ii.mbfunc = (ModbusRTU::SlaveFunctionCode)UniSetTypes::uni_atoi(s_mbfunc);
...@@ -2340,8 +2340,8 @@ bool MBExchange::initMTRitem( UniXML_iterator& it, RegInfo* p ) ...@@ -2340,8 +2340,8 @@ bool MBExchange::initMTRitem( UniXML_iterator& it, RegInfo* p )
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
bool MBExchange::initRTU188item( UniXML_iterator& it, RegInfo* p ) bool MBExchange::initRTU188item( UniXML_iterator& it, RegInfo* p )
{ {
string jack(it.getProp(prop_prefix + "jack")); string jack( IOBase::initProp(it,"jack",prop_prefix,false) );
string chan(it.getProp(prop_prefix + "channel")); string chan( IOBase::initProp(it,"channel",prop_prefix,false) );
if( jack.empty() ) if( jack.empty() )
{ {
......
...@@ -840,7 +840,7 @@ bool MBSlave::initItem( UniXML_iterator& it ) ...@@ -840,7 +840,7 @@ bool MBSlave::initItem( UniXML_iterator& it )
string r = IOBase::initProp(it,"mbreg",prop_prefix,false); string r = IOBase::initProp(it,"mbreg",prop_prefix,false);
if( r.empty() ) if( r.empty() )
{ {
dlog[Debug::CRIT] << myname << "(initItem): Unknown 'mbreg' for " << IOBase::initProp(it,"name",prop_prefix,false) << endl; dlog[Debug::CRIT] << myname << "(initItem): Unknown 'mbreg' for " << it.getProp("name") << endl;
return false; return false;
} }
......
...@@ -467,20 +467,19 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm, const s ...@@ -467,20 +467,19 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm, const s
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( initProp(it,"name",prefix,init_prefix_only) ); // т.к. ID (и name) в системе уникальны.. их не позволяем "подменять" (т.е. не работаем с prefix..)
string sname(it.getProp("name" ));
ObjectId sid = DefaultObjectId; ObjectId sid = DefaultObjectId;
if( initProp(it,"id",prefix,init_prefix_only).empty() ) if( it.getProp("id").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 )
{ {
if( dlog ) if( dlog )
dlog[Debug::CRIT] << myname << "(readItem): (-1) Не удалось получить ID для датчика: " dlog[Debug::CRIT] << myname << "(readItem): (" << DefaultObjectId << ") Не удалось получить ID для датчика: "
<< sname << endl; << sname << endl;
return false; return false;
} }
......
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