Commit 3844a82c authored by Pavel Vainerman's avatar Pavel Vainerman

(2.0): Оптимизация: везде где можно заменил const string --> const string&

parent 07d7b048
...@@ -23,7 +23,7 @@ std::ostream& operator<<( std::ostream& os, IOControl::IOInfo& inf ) ...@@ -23,7 +23,7 @@ std::ostream& operator<<( std::ostream& os, IOControl::IOInfo& inf )
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
IOControl::IOControl( UniSetTypes::ObjectId id, UniSetTypes::ObjectId icID, IOControl::IOControl( UniSetTypes::ObjectId id, UniSetTypes::ObjectId icID,
SharedMemory* ic, int numcards, const std::string prefix_ ): SharedMemory* ic, int numcards, const std::string& prefix_ ):
UniSetObject(id), UniSetObject(id),
polltime(150), polltime(150),
cards(11), cards(11),
...@@ -1147,7 +1147,7 @@ void IOControl::check_testlamp() ...@@ -1147,7 +1147,7 @@ void IOControl::check_testlamp()
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
IOControl* IOControl::init_iocontrol( int argc, const char* const* argv, IOControl* IOControl::init_iocontrol( int argc, const char* const* argv,
UniSetTypes::ObjectId icID, SharedMemory* ic, UniSetTypes::ObjectId icID, SharedMemory* ic,
const std::string prefix ) const std::string& prefix )
{ {
string name = conf->getArgParam("--"+prefix+"-name","IOControl1"); string name = conf->getArgParam("--"+prefix+"-name","IOControl1");
if( name.empty() ) if( name.empty() )
......
...@@ -195,13 +195,13 @@ class IOControl: ...@@ -195,13 +195,13 @@ class IOControl:
public UniSetObject public UniSetObject
{ {
public: public:
IOControl( UniSetTypes::ObjectId id, UniSetTypes::ObjectId icID, SharedMemory* ic=0, int numcards=2, const std::string prefix="io" ); IOControl( UniSetTypes::ObjectId id, UniSetTypes::ObjectId icID, SharedMemory* ic=0, int numcards=2, const std::string& prefix="io" );
virtual ~IOControl(); virtual ~IOControl();
/*! глобальная функция для инициализации объекта */ /*! глобальная функция для инициализации объекта */
static IOControl* init_iocontrol( int argc, const char* const* argv, static IOControl* init_iocontrol( int argc, const char* const* argv,
UniSetTypes::ObjectId icID, SharedMemory* ic=0, UniSetTypes::ObjectId icID, SharedMemory* ic=0,
const std::string prefix="io" ); const std::string& prefix="io" );
/*! глобальная функция для вывода help-а */ /*! глобальная функция для вывода help-а */
static void help_print( int argc, const char* const* argv ); static void help_print( int argc, const char* const* argv );
...@@ -303,7 +303,7 @@ class IOControl: ...@@ -303,7 +303,7 @@ class IOControl:
void waitSM(); void waitSM();
bool checkCards( const std::string func="" ); bool checkCards( const std::string& func="" );
// std::string myname; // std::string myname;
xmlNode* cnode; /*!< xml-узел в настроечном файле */ xmlNode* cnode; /*!< xml-узел в настроечном файле */
......
...@@ -11,8 +11,8 @@ using namespace std; ...@@ -11,8 +11,8 @@ using namespace std;
using namespace UniSetTypes; using namespace UniSetTypes;
using namespace UniSetExtensions; using namespace UniSetExtensions;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId,
SharedMemory* ic, const std::string prefix ): SharedMemory* ic, const std::string& prefix ):
UniSetObject_LT(objId), UniSetObject_LT(objId),
allInitOK(false), allInitOK(false),
shm(0), shm(0),
...@@ -176,14 +176,14 @@ MBExchange::~MBExchange() ...@@ -176,14 +176,14 @@ MBExchange::~MBExchange()
delete it1->second->rtu; delete it1->second->rtu;
it1->second->rtu = 0; it1->second->rtu = 0;
} }
RTUDevice* d(it1->second); RTUDevice* d(it1->second);
for( RegMap::iterator it=d->regmap.begin(); it!=d->regmap.end(); ++it ) for( RegMap::iterator it=d->regmap.begin(); it!=d->regmap.end(); ++it )
delete it->second; delete it->second;
delete it1->second; delete it1->second;
} }
delete shm; delete shm;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -273,7 +273,7 @@ void MBExchange::readConfiguration() ...@@ -273,7 +273,7 @@ void MBExchange::readConfiguration()
if( UniSetTypes::check_filter(it,s_field,s_fvalue) ) if( UniSetTypes::check_filter(it,s_field,s_fvalue) )
initItem(it); initItem(it);
} }
// readconf_ok = true; // readconf_ok = true;
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
...@@ -289,16 +289,16 @@ MBExchange::DeviceType MBExchange::getDeviceType( const std::string& dtype ) ...@@ -289,16 +289,16 @@ MBExchange::DeviceType MBExchange::getDeviceType( const std::string& dtype )
{ {
if( dtype.empty() ) if( dtype.empty() )
return dtUnknown; return dtUnknown;
if( dtype == "mtr" || dtype == "MTR" ) if( dtype == "mtr" || dtype == "MTR" )
return dtMTR; return dtMTR;
if( dtype == "rtu" || dtype == "RTU" ) if( dtype == "rtu" || dtype == "RTU" )
return dtRTU; return dtRTU;
if( dtype == "rtu188" || dtype == "RTU188" ) if( dtype == "rtu188" || dtype == "RTU188" )
return dtRTU188; return dtRTU188;
return dtUnknown; return dtUnknown;
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
...@@ -347,7 +347,7 @@ bool MBExchange::checkUpdateSM( bool wrFunc, long mdev ) ...@@ -347,7 +347,7 @@ bool MBExchange::checkUpdateSM( bool wrFunc, long mdev )
<< " skip... mode='emWriteOnly' " << endl; << " skip... mode='emWriteOnly' " << endl;
return false; return false;
} }
if( wrFunc && (exchangeMode == emSkipSaveToSM || mdev == emSkipSaveToSM) ) if( wrFunc && (exchangeMode == emSkipSaveToSM || mdev == emSkipSaveToSM) )
{ {
if( dlog.debugging(Debug::LEVEL3) ) if( dlog.debugging(Debug::LEVEL3) )
...@@ -367,7 +367,7 @@ bool MBExchange::checkPoll( bool wrFunc ) ...@@ -367,7 +367,7 @@ bool MBExchange::checkPoll( bool wrFunc )
dlog[Debug::LEVEL3] << myname << "(checkPoll): skip.. mode='emWriteOnly'" << endl; dlog[Debug::LEVEL3] << myname << "(checkPoll): skip.. mode='emWriteOnly'" << endl;
return false; return false;
} }
if( exchangeMode == emReadOnly && wrFunc ) if( exchangeMode == emReadOnly && wrFunc )
{ {
if( dlog.debugging(Debug::LEVEL3) ) if( dlog.debugging(Debug::LEVEL3) )
...@@ -386,8 +386,8 @@ MBExchange::RegID MBExchange::genRegID( const ModbusRTU::ModbusData mbreg, const ...@@ -386,8 +386,8 @@ MBExchange::RegID MBExchange::genRegID( const ModbusRTU::ModbusData mbreg, const
// 1. ID > диапазона возможных регистров // 1. ID > диапазона возможных регистров
// 2. одинаковые регистры, но разные функции должны давать разный ID // 2. одинаковые регистры, но разные функции должны давать разный ID
// 3. регистры идущие подряд, должна давать ID идущие тоже подряд // 3. регистры идущие подряд, должна давать ID идущие тоже подряд
// Вообще диапазоны: // Вообще диапазоны:
// mbreg: 0..65535 // mbreg: 0..65535
// fn: 0...255 // fn: 0...255
int max = numeric_limits<ModbusRTU::ModbusData>::max(); // по идее 65535 int max = numeric_limits<ModbusRTU::ModbusData>::max(); // по идее 65535
...@@ -425,12 +425,12 @@ std::ostream& operator<<( std::ostream& os, MBExchange::RTUDevice& d ) ...@@ -425,12 +425,12 @@ std::ostream& operator<<( std::ostream& os, MBExchange::RTUDevice& d )
<< " respond_state=" << d.resp_state << " respond_state=" << d.resp_state
<< " respond_invert=" << d.resp_invert << " respond_invert=" << d.resp_invert
<< endl; << endl;
os << " regs: " << endl; os << " regs: " << endl;
for( MBExchange::RegMap::iterator it=d.regmap.begin(); it!=d.regmap.end(); ++it ) for( MBExchange::RegMap::iterator it=d.regmap.begin(); it!=d.regmap.end(); ++it )
os << " " << *(it->second) << endl; os << " " << *(it->second) << endl;
return os; return os;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -466,7 +466,7 @@ void MBExchange::rtuQueryOptimization( RTUDeviceMap& m ) ...@@ -466,7 +466,7 @@ void MBExchange::rtuQueryOptimization( RTUDeviceMap& m )
for( MBExchange::RTUDeviceMap::iterator it1=m.begin(); it1!=m.end(); ++it1 ) for( MBExchange::RTUDeviceMap::iterator it1=m.begin(); it1!=m.end(); ++it1 )
{ {
RTUDevice* d(it1->second); RTUDevice* d(it1->second);
// Вообще в map они уже лежат в нужном порядке, т.е. функция genRegID() гарантирует // Вообще в map они уже лежат в нужном порядке, т.е. функция genRegID() гарантирует
// что регистры идущие подряд с одниковой функцией чтения/записи получат подряд идущие ID. // что регистры идущие подряд с одниковой функцией чтения/записи получат подряд идущие ID.
// так что оптимтизация это просто нахождение мест где id идут не подряд... // так что оптимтизация это просто нахождение мест где id идут не подряд...
...@@ -484,7 +484,7 @@ void MBExchange::rtuQueryOptimization( RTUDeviceMap& m ) ...@@ -484,7 +484,7 @@ void MBExchange::rtuQueryOptimization( RTUDeviceMap& m )
it--; // раз это регистр уже следующий, то надо вернуть на шаг обратно.. it--; // раз это регистр уже следующий, то надо вернуть на шаг обратно..
break; break;
} }
beg->second->q_count++; beg->second->q_count++;
if( beg->second->q_count >= ModbusRTU::MAXDATALEN ) if( beg->second->q_count >= ModbusRTU::MAXDATALEN )
...@@ -504,7 +504,7 @@ void MBExchange::rtuQueryOptimization( RTUDeviceMap& m ) ...@@ -504,7 +504,7 @@ void MBExchange::rtuQueryOptimization( RTUDeviceMap& m )
<< " <--> func=" << ModbusRTU::fnWriteOutputRegisters << " <--> func=" << ModbusRTU::fnWriteOutputRegisters
<< " for mbaddr=" << ModbusRTU::addr2str(d->mbaddr) << " for mbaddr=" << ModbusRTU::addr2str(d->mbaddr)
<< " mbreg=" << ModbusRTU::dat2str(beg->second->mbreg); << " mbreg=" << ModbusRTU::dat2str(beg->second->mbreg);
beg->second->mbfunc = ModbusRTU::fnWriteOutputRegisters; beg->second->mbfunc = ModbusRTU::fnWriteOutputRegisters;
} }
else if( beg->second->q_count>1 && beg->second->mbfunc==ModbusRTU::fnForceSingleCoil ) else if( beg->second->q_count>1 && beg->second->mbfunc==ModbusRTU::fnForceSingleCoil )
...@@ -515,10 +515,10 @@ void MBExchange::rtuQueryOptimization( RTUDeviceMap& m ) ...@@ -515,10 +515,10 @@ void MBExchange::rtuQueryOptimization( RTUDeviceMap& m )
<< " <--> func=" << ModbusRTU::fnForceMultipleCoils << " <--> func=" << ModbusRTU::fnForceMultipleCoils
<< " for mbaddr=" << ModbusRTU::addr2str(d->mbaddr) << " for mbaddr=" << ModbusRTU::addr2str(d->mbaddr)
<< " mbreg=" << ModbusRTU::dat2str(beg->second->mbreg); << " mbreg=" << ModbusRTU::dat2str(beg->second->mbreg);
beg->second->mbfunc = ModbusRTU::fnForceMultipleCoils; beg->second->mbfunc = ModbusRTU::fnForceMultipleCoils;
} }
if( it==d->regmap.end() ) if( it==d->regmap.end() )
break; break;
} }
...@@ -647,7 +647,7 @@ bool MBExchange::preInitRead( InitList::iterator& p ) ...@@ -647,7 +647,7 @@ bool MBExchange::preInitRead( InitList::iterator& p )
{ {
bool f_out = force_out; bool f_out = force_out;
// выставляем флаг принудительного обновления // выставляем флаг принудительного обновления
force_out = true; force_out = true;
p->ri->mb_initOK = true; p->ri->mb_initOK = true;
p->ri->sm_initOK = false; p->ri->sm_initOK = false;
updateRTU(p->ri->rit); updateRTU(p->ri->rit);
...@@ -811,14 +811,14 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -811,14 +811,14 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
<< " sm_initOK=" << p->sm_initOK << " sm_initOK=" << p->sm_initOK
<< " mbval=" << p->mbval << " mbval=" << p->mbval
<< endl; << endl;
if( p->q_count > ModbusRTU::MAXDATALEN ) if( p->q_count > ModbusRTU::MAXDATALEN )
{ {
dlog[Debug::LEVEL3] << myname << "(pollRTU): count(" << p->q_count dlog[Debug::LEVEL3] << myname << "(pollRTU): count(" << p->q_count
<< ") > MAXDATALEN(" << ModbusRTU::MAXDATALEN << ") > MAXDATALEN(" << ModbusRTU::MAXDATALEN
<< " ..ignore..." << " ..ignore..."
<< endl; << endl;
} }
} }
...@@ -828,11 +828,11 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -828,11 +828,11 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
if( p->q_count == 0 ) if( p->q_count == 0 )
{ {
if( dlog.is_info() ) if( dlog.is_info() )
dlog.info() << myname << "(pollRTU): q_count=0 for mbreg=" << ModbusRTU::dat2str(p->mbreg) dlog.info() << myname << "(pollRTU): q_count=0 for mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " IGNORE register..." << endl; << " IGNORE register..." << endl;
return false; return false;
} }
switch( p->mbfunc ) switch( p->mbfunc )
{ {
case ModbusRTU::fnReadInputRegisters: case ModbusRTU::fnReadInputRegisters:
...@@ -852,7 +852,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -852,7 +852,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
it--; it--;
} }
break; break;
case ModbusRTU::fnReadInputStatus: case ModbusRTU::fnReadInputStatus:
{ {
ModbusRTU::ReadInputStatusRetMessage ret = mb->read02(dev->mbaddr,p->mbreg,p->q_count); ModbusRTU::ReadInputStatusRetMessage ret = mb->read02(dev->mbaddr,p->mbreg,p->q_count);
...@@ -866,7 +866,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -866,7 +866,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
it--; it--;
} }
break; break;
case ModbusRTU::fnReadCoilStatus: case ModbusRTU::fnReadCoilStatus:
{ {
ModbusRTU::ReadCoilRetMessage ret = mb->read01(dev->mbaddr,p->mbreg,p->q_count); ModbusRTU::ReadCoilRetMessage ret = mb->read01(dev->mbaddr,p->mbreg,p->q_count);
...@@ -880,17 +880,17 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -880,17 +880,17 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
it--; it--;
} }
break; break;
case ModbusRTU::fnWriteOutputSingleRegister: case ModbusRTU::fnWriteOutputSingleRegister:
{ {
if( p->q_count != 1 ) if( p->q_count != 1 )
{ {
if( dlog.is_crit() ) if( dlog.is_crit() )
dlog.crit() << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg) dlog.crit() << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " IGNORE WRITE SINGLE REGISTER (0x06) q_count=" << p->q_count << " ..." << endl; << " IGNORE WRITE SINGLE REGISTER (0x06) q_count=" << p->q_count << " ..." << endl;
return false; return false;
} }
if( !p->sm_initOK ) if( !p->sm_initOK )
{ {
if( dlog.debugging(Debug::LEVEL3) ) if( dlog.debugging(Debug::LEVEL3) )
...@@ -898,7 +898,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -898,7 +898,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
<< " slist=" << (*p) << " slist=" << (*p)
<< " IGNORE...(sm_initOK=false)" << endl; << " IGNORE...(sm_initOK=false)" << endl;
return true; return true;
} }
// cerr << "**** mbreg=" << ModbusRTU::dat2str(p->mbreg) << " val=" << ModbusRTU::dat2str(p->mbval) << endl; // cerr << "**** mbreg=" << ModbusRTU::dat2str(p->mbreg) << " val=" << ModbusRTU::dat2str(p->mbval) << endl;
ModbusRTU::WriteSingleOutputRetMessage ret = mb->write06(dev->mbaddr,p->mbreg,p->mbval); ModbusRTU::WriteSingleOutputRetMessage ret = mb->write06(dev->mbaddr,p->mbreg,p->mbval);
...@@ -909,7 +909,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -909,7 +909,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
{ {
if( !p->sm_initOK ) if( !p->sm_initOK )
{ {
// может быть такая ситуация, что // может быть такая ситуация, что
// некоторые регистры уже инициализированы, а другие ещё нет // некоторые регистры уже инициализированы, а другие ещё нет
// при этом после оптимизации они попадают в один запрос // при этом после оптимизации они попадают в один запрос
// поэтому здесь сделано так: // поэтому здесь сделано так:
...@@ -917,7 +917,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -917,7 +917,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
// и его просто надо пропустить.. // и его просто надо пропустить..
if( p->q_num > 1 ) if( p->q_num > 1 )
return true; return true;
// смещаем итератор, если данный запрос содержит много регистров // смещаем итератор, если данный запрос содержит много регистров
// if( q->count > 1 ) // if( q->count > 1 )
// { // {
...@@ -925,12 +925,12 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -925,12 +925,12 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
// it++; // it++;
// return true; // return true;
// } // }
if( dlog.debugging(Debug::LEVEL3) ) if( dlog.debugging(Debug::LEVEL3) )
dlog[Debug::LEVEL3] << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg) dlog[Debug::LEVEL3] << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " IGNORE...(sm_initOK=false)" << endl; << " IGNORE...(sm_initOK=false)" << endl;
return true; return true;
} }
ModbusRTU::WriteOutputMessage msg(dev->mbaddr,p->mbreg); ModbusRTU::WriteOutputMessage msg(dev->mbaddr,p->mbreg);
for( int i=0; i<p->q_count; i++,it++ ) for( int i=0; i<p->q_count; i++,it++ )
...@@ -946,7 +946,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -946,7 +946,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
if( p->q_count != 1 ) if( p->q_count != 1 )
{ {
if( dlog.is_crit() ) if( dlog.is_crit() )
dlog.crit() << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg) dlog.crit() << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " IGNORE FORCE SINGLE COIL (0x05) q_count=" << p->q_count << " ..." << endl; << " IGNORE FORCE SINGLE COIL (0x05) q_count=" << p->q_count << " ..." << endl;
return false; return false;
} }
...@@ -956,7 +956,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -956,7 +956,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
dlog[Debug::LEVEL3] << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg) dlog[Debug::LEVEL3] << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " IGNORE...(sm_initOK=false)" << endl; << " IGNORE...(sm_initOK=false)" << endl;
return true; return true;
} }
// cerr << "****(coil) mbreg=" << ModbusRTU::dat2str(p->mbreg) << " val=" << ModbusRTU::dat2str(p->mbval) << endl; // cerr << "****(coil) mbreg=" << ModbusRTU::dat2str(p->mbreg) << " val=" << ModbusRTU::dat2str(p->mbval) << endl;
ModbusRTU::ForceSingleCoilRetMessage ret = mb->write05(dev->mbaddr,p->mbreg,p->mbval); ModbusRTU::ForceSingleCoilRetMessage ret = mb->write05(dev->mbaddr,p->mbreg,p->mbval);
...@@ -971,7 +971,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -971,7 +971,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
dlog[Debug::LEVEL3] << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg) dlog[Debug::LEVEL3] << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " IGNORE...(sm_initOK=false)" << endl; << " IGNORE...(sm_initOK=false)" << endl;
return true; return true;
} }
ModbusRTU::ForceCoilsMessage msg(dev->mbaddr,p->mbreg); ModbusRTU::ForceCoilsMessage msg(dev->mbaddr,p->mbreg);
for( int i=0; i<p->q_count; i++,it++ ) for( int i=0; i<p->q_count; i++,it++ )
...@@ -982,17 +982,17 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -982,17 +982,17 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
ModbusRTU::ForceCoilsRetMessage ret = mb->write0F(msg); ModbusRTU::ForceCoilsRetMessage ret = mb->write0F(msg);
} }
break; break;
default: default:
{ {
if( dlog.is_warn() ) if( dlog.is_warn() )
dlog.warn() << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg) dlog.warn() << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " IGNORE mfunc=" << (int)p->mbfunc << " ..." << endl; << " IGNORE mfunc=" << (int)p->mbfunc << " ..." << endl;
return false; return false;
} }
break; break;
} }
return true; return true;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -1089,7 +1089,7 @@ void MBExchange::updateSM() ...@@ -1089,7 +1089,7 @@ void MBExchange::updateSM()
if( dlog.debugging(Debug::LEVEL3) ) if( dlog.debugging(Debug::LEVEL3) )
dlog[Debug::LEVEL3] << myname << "(updateSM): catch ..." << endl; dlog[Debug::LEVEL3] << myname << "(updateSM): catch ..." << endl;
} }
if( it==d->regmap.end() ) if( it==d->regmap.end() )
break; break;
} }
...@@ -1111,21 +1111,21 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1111,21 +1111,21 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
RegInfo* r(p->reg->rit->second); RegInfo* r(p->reg->rit->second);
bool save = isWriteFunction( r->mbfunc ); bool save = isWriteFunction( r->mbfunc );
if( !save && write_only ) if( !save && write_only )
return; return;
if( !checkUpdateSM(save,r->dev->mode) ) if( !checkUpdateSM(save,r->dev->mode) )
return; return;
// если требуется инициализация и она ещё не произведена, // если требуется инициализация и она ещё не произведена,
// то игнорируем // то игнорируем
if( save && !r->mb_initOK ) if( save && !r->mb_initOK )
return; return;
if( dlog.debugging(Debug::LEVEL3) ) if( dlog.debugging(Debug::LEVEL3) )
dlog[Debug::LEVEL3] << "updateP: sid=" << p->si.id dlog[Debug::LEVEL3] << "updateP: sid=" << p->si.id
<< " mbval=" << r->mbval << " mbval=" << r->mbval
<< " vtype=" << p->vType << " vtype=" << p->vType
<< " rnum=" << p->rnum << " rnum=" << p->rnum
<< " nbit=" << p->nbit << " nbit=" << p->nbit
...@@ -1160,7 +1160,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1160,7 +1160,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
return; return;
} }
if( p->rnum <= 1 ) if( p->rnum <= 1 )
{ {
if( save ) if( save )
...@@ -1172,7 +1172,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1172,7 +1172,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
{ {
r->mbval = IOBase::processingAsDO( p, shm, force_out ); r->mbval = IOBase::processingAsDO( p, shm, force_out );
} }
else else
r->mbval = IOBase::processingAsAO( p, shm, force_out ); r->mbval = IOBase::processingAsAO( p, shm, force_out );
r->sm_initOK = true; r->sm_initOK = true;
...@@ -1193,7 +1193,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1193,7 +1193,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
} }
if( dlog.is_crit() ) if( dlog.is_crit() )
dlog.crit() << myname << "(updateRSProperty): IGNORE item: rnum=" << p->rnum dlog.crit() << myname << "(updateRSProperty): IGNORE item: rnum=" << p->rnum
<< " > 1 ?!! for id=" << p->si.id << endl; << " > 1 ?!! for id=" << p->si.id << endl;
return; return;
} }
...@@ -1208,7 +1208,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1208,7 +1208,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
{ {
r->mbval = (signed short)IOBase::processingAsDO( p, shm, force_out ); r->mbval = (signed short)IOBase::processingAsDO( p, shm, force_out );
} }
else else
r->mbval = (signed short)IOBase::processingAsAO( p, shm, force_out ); r->mbval = (signed short)IOBase::processingAsAO( p, shm, force_out );
r->sm_initOK = true; r->sm_initOK = true;
...@@ -1239,7 +1239,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1239,7 +1239,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
{ {
r->mbval = (unsigned short)IOBase::processingAsDO( p, shm, force_out ); r->mbval = (unsigned short)IOBase::processingAsDO( p, shm, force_out );
} }
else else
r->mbval = (unsigned short)IOBase::processingAsAO( p, shm, force_out ); r->mbval = (unsigned short)IOBase::processingAsAO( p, shm, force_out );
r->sm_initOK = true; r->sm_initOK = true;
...@@ -1264,7 +1264,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1264,7 +1264,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
if( p->nbyte <= 0 || p->nbyte > VTypes::Byte::bsize ) if( p->nbyte <= 0 || p->nbyte > VTypes::Byte::bsize )
{ {
if( dlog.is_crit() ) if( dlog.is_crit() )
dlog.crit() << myname << "(updateRSProperty): IGNORE item: reg=" << ModbusRTU::dat2str(r->mbreg) dlog.crit() << myname << "(updateRSProperty): IGNORE item: reg=" << ModbusRTU::dat2str(r->mbreg)
<< " vtype=" << p->vType << " but nbyte=" << p->nbyte << endl; << " vtype=" << p->vType << " but nbyte=" << p->nbyte << endl;
return; return;
} }
...@@ -1285,7 +1285,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1285,7 +1285,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
VTypes::Byte b(r->mbval); VTypes::Byte b(r->mbval);
IOBase::processingAsAI( p, b.raw.b[p->nbyte-1], shm, force ); IOBase::processingAsAI( p, b.raw.b[p->nbyte-1], shm, force );
} }
return; return;
} }
else if( p->vType == VTypes::vtF2 ) else if( p->vType == VTypes::vtF2 )
...@@ -1308,10 +1308,10 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1308,10 +1308,10 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[VTypes::F2::wsize()]; ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[VTypes::F2::wsize()];
for( int k=0; k<VTypes::F2::wsize(); k++, i++ ) for( int k=0; k<VTypes::F2::wsize(); k++, i++ )
data[k] = i->second->mbval; data[k] = i->second->mbval;
VTypes::F2 f(data,VTypes::F2::wsize()); VTypes::F2 f(data,VTypes::F2::wsize());
delete[] data; delete[] data;
IOBase::processingFasAI( p, (float)f, shm, force ); IOBase::processingFasAI( p, (float)f, shm, force );
} }
} }
...@@ -1333,10 +1333,10 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1333,10 +1333,10 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[VTypes::F4::wsize()]; ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[VTypes::F4::wsize()];
for( int k=0; k<VTypes::F4::wsize(); k++, i++ ) for( int k=0; k<VTypes::F4::wsize(); k++, i++ )
data[k] = i->second->mbval; data[k] = i->second->mbval;
VTypes::F4 f(data,VTypes::F4::wsize()); VTypes::F4 f(data,VTypes::F4::wsize());
delete[] data; delete[] data;
IOBase::processingFasAI( p, (float)f, shm, force ); IOBase::processingFasAI( p, (float)f, shm, force );
} }
} }
...@@ -1360,10 +1360,10 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1360,10 +1360,10 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[VTypes::I2::wsize()]; ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[VTypes::I2::wsize()];
for( int k=0; k<VTypes::I2::wsize(); k++, i++ ) for( int k=0; k<VTypes::I2::wsize(); k++, i++ )
data[k] = i->second->mbval; data[k] = i->second->mbval;
VTypes::I2 i2(data,VTypes::I2::wsize()); VTypes::I2 i2(data,VTypes::I2::wsize());
delete[] data; delete[] data;
IOBase::processingAsAI( p, (int)i2, shm, force ); IOBase::processingAsAI( p, (int)i2, shm, force );
} }
} }
...@@ -1387,10 +1387,10 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1387,10 +1387,10 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[VTypes::U2::wsize()]; ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[VTypes::U2::wsize()];
for( int k=0; k<VTypes::U2::wsize(); k++, i++ ) for( int k=0; k<VTypes::U2::wsize(); k++, i++ )
data[k] = i->second->mbval; data[k] = i->second->mbval;
VTypes::U2 u2(data,VTypes::U2::wsize()); VTypes::U2 u2(data,VTypes::U2::wsize());
delete[] data; delete[] data;
IOBase::processingAsAI( p, (unsigned int)u2, shm, force ); IOBase::processingAsAI( p, (unsigned int)u2, shm, force );
} }
} }
...@@ -1462,13 +1462,13 @@ void MBExchange::updateMTR( RegMap::iterator& rit ) ...@@ -1462,13 +1462,13 @@ void MBExchange::updateMTR( RegMap::iterator& rit )
} }
continue; continue;
} }
if( r->mtrType == MTR::mtT2 ) if( r->mtrType == MTR::mtT2 )
{ {
if( save ) if( save )
{ {
MTR::T2 t(IOBase::processingAsAO( &(*it), shm, force_out )); MTR::T2 t(IOBase::processingAsAO( &(*it), shm, force_out ));
r->mbval = t.val; r->mbval = t.val;
} }
else else
{ {
...@@ -1477,7 +1477,7 @@ void MBExchange::updateMTR( RegMap::iterator& rit ) ...@@ -1477,7 +1477,7 @@ void MBExchange::updateMTR( RegMap::iterator& rit )
} }
continue; continue;
} }
if( r->mtrType == MTR::mtT3 ) if( r->mtrType == MTR::mtT3 )
{ {
RegMap::iterator i(rit); RegMap::iterator i(rit);
...@@ -1492,14 +1492,14 @@ void MBExchange::updateMTR( RegMap::iterator& rit ) ...@@ -1492,14 +1492,14 @@ void MBExchange::updateMTR( RegMap::iterator& rit )
ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[MTR::T3::wsize()]; ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[MTR::T3::wsize()];
for( int k=0; k<MTR::T3::wsize(); k++, i++ ) for( int k=0; k<MTR::T3::wsize(); k++, i++ )
data[k] = i->second->mbval; data[k] = i->second->mbval;
MTR::T3 t(data,MTR::T3::wsize()); MTR::T3 t(data,MTR::T3::wsize());
delete[] data; delete[] data;
IOBase::processingAsAI( &(*it), (long)t, shm, force ); IOBase::processingAsAI( &(*it), (long)t, shm, force );
} }
continue; continue;
} }
if( r->mtrType == MTR::mtT4 ) if( r->mtrType == MTR::mtT4 )
{ {
if( save ) if( save )
...@@ -1514,7 +1514,7 @@ void MBExchange::updateMTR( RegMap::iterator& rit ) ...@@ -1514,7 +1514,7 @@ void MBExchange::updateMTR( RegMap::iterator& rit )
} }
continue; continue;
} }
if( r->mtrType == MTR::mtT5 ) if( r->mtrType == MTR::mtT5 )
{ {
RegMap::iterator i(rit); RegMap::iterator i(rit);
...@@ -1529,15 +1529,15 @@ void MBExchange::updateMTR( RegMap::iterator& rit ) ...@@ -1529,15 +1529,15 @@ void MBExchange::updateMTR( RegMap::iterator& rit )
ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[MTR::T5::wsize()]; ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[MTR::T5::wsize()];
for( int k=0; k<MTR::T5::wsize(); k++, i++ ) for( int k=0; k<MTR::T5::wsize(); k++, i++ )
data[k] = i->second->mbval; data[k] = i->second->mbval;
MTR::T5 t(data,MTR::T5::wsize()); MTR::T5 t(data,MTR::T5::wsize());
delete[] data; delete[] data;
IOBase::processingFasAI( &(*it), (float)t.val, shm, force ); IOBase::processingFasAI( &(*it), (float)t.val, shm, force );
} }
continue; continue;
} }
if( r->mtrType == MTR::mtT6 ) if( r->mtrType == MTR::mtT6 )
{ {
RegMap::iterator i(rit); RegMap::iterator i(rit);
...@@ -1552,15 +1552,15 @@ void MBExchange::updateMTR( RegMap::iterator& rit ) ...@@ -1552,15 +1552,15 @@ void MBExchange::updateMTR( RegMap::iterator& rit )
ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[MTR::T6::wsize()]; ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[MTR::T6::wsize()];
for( int k=0; k<MTR::T6::wsize(); k++, i++ ) for( int k=0; k<MTR::T6::wsize(); k++, i++ )
data[k] = i->second->mbval; data[k] = i->second->mbval;
MTR::T6 t(data,MTR::T6::wsize()); MTR::T6 t(data,MTR::T6::wsize());
delete[] data; delete[] data;
IOBase::processingFasAI( &(*it), (float)t.val, shm, force ); IOBase::processingFasAI( &(*it), (float)t.val, shm, force );
} }
continue; continue;
} }
if( r->mtrType == MTR::mtT7 ) if( r->mtrType == MTR::mtT7 )
{ {
RegMap::iterator i(rit); RegMap::iterator i(rit);
...@@ -1575,15 +1575,15 @@ void MBExchange::updateMTR( RegMap::iterator& rit ) ...@@ -1575,15 +1575,15 @@ void MBExchange::updateMTR( RegMap::iterator& rit )
ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[MTR::T7::wsize()]; ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[MTR::T7::wsize()];
for( int k=0; k<MTR::T7::wsize(); k++, i++ ) for( int k=0; k<MTR::T7::wsize(); k++, i++ )
data[k] = i->second->mbval; data[k] = i->second->mbval;
MTR::T7 t(data,MTR::T7::wsize()); MTR::T7 t(data,MTR::T7::wsize());
delete[] data; delete[] data;
IOBase::processingFasAI( &(*it), (float)t.val, shm, force ); IOBase::processingFasAI( &(*it), (float)t.val, shm, force );
} }
continue; continue;
} }
if( r->mtrType == MTR::mtT16 ) if( r->mtrType == MTR::mtT16 )
{ {
if( save ) if( save )
...@@ -1612,8 +1612,8 @@ void MBExchange::updateMTR( RegMap::iterator& rit ) ...@@ -1612,8 +1612,8 @@ void MBExchange::updateMTR( RegMap::iterator& rit )
IOBase::processingFasAI( &(*it), t.fval, shm, force ); IOBase::processingFasAI( &(*it), t.fval, shm, force );
} }
continue; continue;
} }
if( r->mtrType == MTR::mtF1 ) if( r->mtrType == MTR::mtF1 )
{ {
RegMap::iterator i(rit); RegMap::iterator i(rit);
...@@ -1629,10 +1629,10 @@ void MBExchange::updateMTR( RegMap::iterator& rit ) ...@@ -1629,10 +1629,10 @@ void MBExchange::updateMTR( RegMap::iterator& rit )
ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[MTR::F1::wsize()]; ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[MTR::F1::wsize()];
for( int k=0; k<MTR::F1::wsize(); k++, i++ ) for( int k=0; k<MTR::F1::wsize(); k++, i++ )
data[k] = i->second->mbval; data[k] = i->second->mbval;
MTR::F1 t(data,MTR::F1::wsize()); MTR::F1 t(data,MTR::F1::wsize());
delete[] data; delete[] data;
IOBase::processingFasAI( &(*it), (float)t, shm, force ); IOBase::processingFasAI( &(*it), (float)t, shm, force );
} }
continue; continue;
...@@ -1683,7 +1683,7 @@ void MBExchange::updateRTU188( RegMap::iterator& rit ) ...@@ -1683,7 +1683,7 @@ void MBExchange::updateRTU188( RegMap::iterator& rit )
bool save = isWriteFunction( r->mbfunc ); bool save = isWriteFunction( r->mbfunc );
// пока-что функции записи в обмене с RTU188 // пока-что функции записи в обмене с RTU188
// не реализованы // не реализованы
if( isWriteFunction(r->mbfunc) ) if( isWriteFunction(r->mbfunc) )
{ {
...@@ -1715,7 +1715,7 @@ void MBExchange::updateRTU188( RegMap::iterator& rit ) ...@@ -1715,7 +1715,7 @@ void MBExchange::updateRTU188( RegMap::iterator& rit )
<< " skip... mode=emWriteOnly " << endl; << " skip... mode=emWriteOnly " << endl;
return; return;
} }
if( save && ( exchangeMode == emSkipSaveToSM || r->dev->mode == emSkipSaveToSM) ) if( save && ( exchangeMode == emSkipSaveToSM || r->dev->mode == emSkipSaveToSM) )
{ {
if( dlog.debugging(Debug::LEVEL3) ) if( dlog.debugging(Debug::LEVEL3) )
...@@ -1784,14 +1784,14 @@ MBExchange::RTUDevice* MBExchange::addDev( RTUDeviceMap& mp, ModbusRTU::ModbusAd ...@@ -1784,14 +1784,14 @@ MBExchange::RTUDevice* MBExchange::addDev( RTUDeviceMap& mp, ModbusRTU::ModbusAd
{ {
if( dlog.is_crit() ) if( dlog.is_crit() )
dlog.crit() << myname << "(addDev): OTHER mbtype=" << dtype << " for " << xmlit.getProp("name") dlog.crit() << myname << "(addDev): OTHER mbtype=" << dtype << " for " << xmlit.getProp("name")
<< ". Already used devtype=" << it->second->dtype << ". Already used devtype=" << it->second->dtype
<< " for mbaddr=" << ModbusRTU::addr2str(it->second->mbaddr) << " for mbaddr=" << ModbusRTU::addr2str(it->second->mbaddr)
<< endl; << endl;
return 0; return 0;
} }
if( dlog.is_info() ) if( dlog.is_info() )
dlog.info() << myname << "(addDev): device for addr=" << ModbusRTU::addr2str(a) dlog.info() << myname << "(addDev): device for addr=" << ModbusRTU::addr2str(a)
<< " already added. Ignore device params for " << xmlit.getProp("name") << " ..." << endl; << " already added. Ignore device params for " << xmlit.getProp("name") << " ..." << endl;
return it->second; return it->second;
} }
...@@ -1800,7 +1800,7 @@ MBExchange::RTUDevice* MBExchange::addDev( RTUDeviceMap& mp, ModbusRTU::ModbusAd ...@@ -1800,7 +1800,7 @@ MBExchange::RTUDevice* MBExchange::addDev( RTUDeviceMap& mp, ModbusRTU::ModbusAd
d->mbaddr = a; d->mbaddr = a;
if( !initRTUDevice(d,xmlit) ) if( !initRTUDevice(d,xmlit) )
{ {
delete d; delete d;
return 0; return 0;
} }
...@@ -1822,7 +1822,7 @@ MBExchange::RegInfo* MBExchange::addReg( RegMap& mp, RegID id, ModbusRTU::Modbus ...@@ -1822,7 +1822,7 @@ MBExchange::RegInfo* MBExchange::addReg( RegMap& mp, RegID id, ModbusRTU::Modbus
<< " dev=0!!!! " << endl; << " dev=0!!!! " << endl;
return 0; return 0;
} }
if( it->second->dev->dtype != dev->dtype ) if( it->second->dev->dtype != dev->dtype )
{ {
if( dlog.is_crit() ) if( dlog.is_crit() )
...@@ -1830,19 +1830,19 @@ MBExchange::RegInfo* MBExchange::addReg( RegMap& mp, RegID id, ModbusRTU::Modbus ...@@ -1830,19 +1830,19 @@ MBExchange::RegInfo* MBExchange::addReg( RegMap& mp, RegID id, ModbusRTU::Modbus
<< ". Already used devtype=" << it->second->dev->dtype << " for " << it->second->dev << endl; << ". Already used devtype=" << it->second->dev->dtype << " for " << it->second->dev << endl;
return 0; return 0;
} }
if( dlog.is_info() ) if( dlog.is_info() )
{ {
dlog.info() << myname << "(addReg): reg=" << ModbusRTU::dat2str(r) dlog.info() << myname << "(addReg): reg=" << ModbusRTU::dat2str(r)
<< "(id=" << id << ")" << "(id=" << id << ")"
<< " already added for " << (*it->second) << " already added for " << (*it->second)
<< " Ignore register params for " << xmlit.getProp("name") << " ..." << endl; << " Ignore register params for " << xmlit.getProp("name") << " ..." << endl;
} }
it->second->rit = it; it->second->rit = it;
return it->second; return it->second;
} }
MBExchange::RegInfo* ri; MBExchange::RegInfo* ri;
if( rcopy ) if( rcopy )
{ {
...@@ -1862,10 +1862,10 @@ MBExchange::RegInfo* MBExchange::addReg( RegMap& mp, RegID id, ModbusRTU::Modbus ...@@ -1862,10 +1862,10 @@ MBExchange::RegInfo* MBExchange::addReg( RegMap& mp, RegID id, ModbusRTU::Modbus
} }
ri->id = id; ri->id = id;
mp.insert(RegMap::value_type(id,ri)); mp.insert(RegMap::value_type(id,ri));
ri->rit = mp.find(id); ri->rit = mp.find(id);
return ri; return ri;
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
...@@ -1876,7 +1876,7 @@ MBExchange::RSProperty* MBExchange::addProp( PList& plist, RSProperty& p ) ...@@ -1876,7 +1876,7 @@ MBExchange::RSProperty* MBExchange::addProp( PList& plist, RSProperty& p )
if( it->si.id == p.si.id && it->si.node == p.si.node ) if( it->si.id == p.si.id && it->si.node == p.si.node )
return &(*it); return &(*it);
} }
plist.push_back(p); plist.push_back(p);
PList::iterator it = plist.end(); PList::iterator it = plist.end();
it--; it--;
...@@ -1905,12 +1905,12 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML_iterator& it ) ...@@ -1905,12 +1905,12 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML_iterator& it )
if( p.stype == UniversalIO::UnknownIOType ) if( p.stype == UniversalIO::UnknownIOType )
{ {
if( dlog.is_crit() ) if( dlog.is_crit() )
dlog.crit() << myname << "(IOBase::readItem): неизвестный iotype=: " dlog.crit() << myname << "(IOBase::readItem): неизвестный iotype=: "
<< stype << " for " << it.getProp("name") << endl; << stype << " for " << it.getProp("name") << endl;
return false; return false;
} }
} }
string sbit(it.getProp(prop_prefix + "nbit")); string sbit(it.getProp(prop_prefix + "nbit"));
if( !sbit.empty() ) if( !sbit.empty() )
{ {
...@@ -1918,13 +1918,13 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML_iterator& it ) ...@@ -1918,13 +1918,13 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML_iterator& it )
if( p.nbit < 0 || p.nbit >= ModbusRTU::BitsPerData ) if( p.nbit < 0 || p.nbit >= ModbusRTU::BitsPerData )
{ {
if( dlog.is_crit() ) if( dlog.is_crit() )
dlog.crit() << myname << "(initRSProperty): BAD nbit=" << p.nbit dlog.crit() << myname << "(initRSProperty): BAD nbit=" << p.nbit
<< ". (0 >= nbit < " << ModbusRTU::BitsPerData <<")." << endl; << ". (0 >= nbit < " << ModbusRTU::BitsPerData <<")." << endl;
return false; return false;
} }
} }
if( p.nbit > 0 && if( p.nbit > 0 &&
( p.stype == UniversalIO::AI || ( p.stype == UniversalIO::AI ||
p.stype == UniversalIO::AO ) ) p.stype == UniversalIO::AO ) )
{ {
...@@ -1940,12 +1940,12 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML_iterator& it ) ...@@ -1940,12 +1940,12 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML_iterator& it )
if( p.nbyte < 0 || p.nbyte > VTypes::Byte::bsize ) if( p.nbyte < 0 || p.nbyte > VTypes::Byte::bsize )
{ {
if( dlog.is_crit() ) if( dlog.is_crit() )
dlog.crit() << myname << "(initRSProperty): BAD nbyte=" << p.nbyte dlog.crit() << myname << "(initRSProperty): BAD nbyte=" << p.nbyte
<< ". (0 >= nbyte < " << VTypes::Byte::bsize << ")." << endl; << ". (0 >= nbyte < " << VTypes::Byte::bsize << ")." << endl;
return false; return false;
} }
} }
string vt(it.getProp(prop_prefix + "vtype")); string vt(it.getProp(prop_prefix + "vtype"));
if( vt.empty() ) if( vt.empty() )
{ {
...@@ -1958,8 +1958,8 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML_iterator& it ) ...@@ -1958,8 +1958,8 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML_iterator& it )
if( v == VTypes::vtUnknown ) if( v == VTypes::vtUnknown )
{ {
if( dlog.is_crit() ) if( dlog.is_crit() )
dlog.crit() << myname << "(initRSProperty): Unknown tcp_vtype='" << vt << "' for " dlog.crit() << myname << "(initRSProperty): Unknown tcp_vtype='" << vt << "' for "
<< it.getProp("name") << it.getProp("name")
<< endl; << endl;
return false; return false;
...@@ -1976,10 +1976,10 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, MBExchange::RTUD ...@@ -1976,10 +1976,10 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, MBExchange::RTUD
{ {
r->dev = dev; r->dev = dev;
r->mbval = it.getIntProp("default"); r->mbval = it.getIntProp("default");
if( dev->dtype == MBExchange::dtRTU ) if( dev->dtype == MBExchange::dtRTU )
{ {
// dlog.info() << myname << "(initRegInfo): init RTU.." // dlog.info() << myname << "(initRegInfo): init RTU.."
} }
else if( dev->dtype == MBExchange::dtMTR ) else if( dev->dtype == MBExchange::dtMTR )
{ {
...@@ -1998,7 +1998,7 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, MBExchange::RTUD ...@@ -1998,7 +1998,7 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, MBExchange::RTUD
r->mbfunc = RTUStorage::getFunction(r->rtuJack,r->rtuChan,t); r->mbfunc = RTUStorage::getFunction(r->rtuJack,r->rtuChan,t);
// т.к. с RTU188 свой обмен // т.к. с RTU188 свой обмен
// mbreg и mbfunc поля не используются // mbreg и mbfunc поля не используются
return true; return true;
} }
...@@ -2009,7 +2009,7 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, MBExchange::RTUD ...@@ -2009,7 +2009,7 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, MBExchange::RTUD
<< "' for " << it.getProp("name") << endl; << "' for " << it.getProp("name") << endl;
return false; return false;
} }
if( mbregFromID ) if( mbregFromID )
{ {
if( it.getProp("id").empty() ) if( it.getProp("id").empty() )
...@@ -2054,7 +2054,7 @@ bool MBExchange::initRTUDevice( RTUDevice* d, UniXML_iterator& it ) ...@@ -2054,7 +2054,7 @@ bool MBExchange::initRTUDevice( RTUDevice* d, UniXML_iterator& it )
{ {
if( dlog.is_crit() ) if( dlog.is_crit() )
dlog.crit() << myname << "(initRTUDevice): Unknown tcp_mbtype=" << it.getProp(prop_prefix + "mbtype") dlog.crit() << myname << "(initRTUDevice): Unknown tcp_mbtype=" << it.getProp(prop_prefix + "mbtype")
<< ". Use: rtu " << ". Use: rtu "
<< " for " << it.getProp("name") << endl; << " for " << it.getProp("name") << endl;
return false; return false;
} }
...@@ -2126,7 +2126,7 @@ bool MBExchange::initItem( UniXML_iterator& it ) ...@@ -2126,7 +2126,7 @@ bool MBExchange::initItem( UniXML_iterator& it )
{ {
string reg = it.getProp(prop_prefix + "mbreg"); string reg = it.getProp(prop_prefix + "mbreg");
if( reg.empty() ) if( reg.empty() )
{ {
if( dlog.is_crit() ) if( dlog.is_crit() )
dlog.crit() << myname << "(initItem): unknown mbreg(" << prop_prefix << ") for " << it.getProp("name") << endl; dlog.crit() << myname << "(initItem): unknown mbreg(" << prop_prefix << ") for " << it.getProp("name") << endl;
return false; return false;
...@@ -2142,7 +2142,7 @@ bool MBExchange::initItem( UniXML_iterator& it ) ...@@ -2142,7 +2142,7 @@ bool MBExchange::initItem( UniXML_iterator& it )
RegID rID = genRegID(mbreg,fn); RegID rID = genRegID(mbreg,fn);
RegInfo* ri = addReg(dev->regmap,rID,mbreg,it,dev); RegInfo* ri = addReg(dev->regmap,rID,mbreg,it,dev);
if( dev->dtype == dtMTR ) if( dev->dtype == dtMTR )
{ {
p.rnum = MTR::wsize(ri->mtrType); p.rnum = MTR::wsize(ri->mtrType);
...@@ -2153,7 +2153,7 @@ bool MBExchange::initItem( UniXML_iterator& it ) ...@@ -2153,7 +2153,7 @@ bool MBExchange::initItem( UniXML_iterator& it )
return false; return false;
} }
} }
if( !ri ) if( !ri )
return false; return false;
...@@ -2181,14 +2181,14 @@ bool MBExchange::initItem( UniXML_iterator& it ) ...@@ -2181,14 +2181,14 @@ bool MBExchange::initItem( UniXML_iterator& it )
abort(); // ABORT PROGRAM!!!! abort(); // ABORT PROGRAM!!!!
return false; return false;
} }
if( p.nbit >= 0 && ri->slst.size() == 1 ) if( p.nbit >= 0 && ri->slst.size() == 1 )
{ {
PList::iterator it2 = ri->slst.begin(); PList::iterator it2 = ri->slst.begin();
if( it2->nbit < 0 ) if( it2->nbit < 0 )
{ {
if( dlog.is_crit() ) if( dlog.is_crit() )
dlog.crit() << myname << "(initItem): FAILED! Sharing SAVE (mbreg=" dlog.crit() << myname << "(initItem): FAILED! Sharing SAVE (mbreg="
<< ModbusRTU::dat2str(ri->mbreg) << " already used)!" << ModbusRTU::dat2str(ri->mbreg) << " already used)!"
<< " IGNORE --> " << it.getProp("name") << endl; << " IGNORE --> " << it.getProp("name") << endl;
abort(); // ABORT PROGRAM!!!! abort(); // ABORT PROGRAM!!!!
...@@ -2208,15 +2208,15 @@ bool MBExchange::initItem( UniXML_iterator& it ) ...@@ -2208,15 +2208,15 @@ bool MBExchange::initItem( UniXML_iterator& it )
ri->mb_initOK = true; ri->mb_initOK = true;
ri->sm_initOK = true; ri->sm_initOK = true;
} }
RSProperty* p1 = addProp(ri->slst,p); RSProperty* p1 = addProp(ri->slst,p);
if( !p1 ) if( !p1 )
return false; return false;
p1->reg = ri; p1->reg = ri;
if( p1->rnum > 1 ) if( p1->rnum > 1 )
{ {
ri->q_count = p1->rnum; ri->q_count = p1->rnum;
...@@ -2234,7 +2234,7 @@ bool MBExchange::initItem( UniXML_iterator& it ) ...@@ -2234,7 +2234,7 @@ bool MBExchange::initItem( UniXML_iterator& it )
{ {
// Если занимает несколько регистров, а указана функция записи "одного", // Если занимает несколько регистров, а указана функция записи "одного",
// то это ошибка.. // то это ошибка..
if( ri->mbfunc != ModbusRTU::fnWriteOutputRegisters && if( ri->mbfunc != ModbusRTU::fnWriteOutputRegisters &&
ri->mbfunc != ModbusRTU::fnForceMultipleCoils ) ri->mbfunc != ModbusRTU::fnForceMultipleCoils )
{ {
if( dlog.is_crit() ) if( dlog.is_crit() )
...@@ -2244,7 +2244,7 @@ bool MBExchange::initItem( UniXML_iterator& it ) ...@@ -2244,7 +2244,7 @@ bool MBExchange::initItem( UniXML_iterator& it )
<< " for " << it.getProp("name") << endl; << " for " << it.getProp("name") << endl;
abort(); // ABORT PROGRAM!!!! abort(); // ABORT PROGRAM!!!!
return false; return false;
} }
} }
} }
...@@ -2288,7 +2288,7 @@ bool MBExchange::initItem( UniXML_iterator& it ) ...@@ -2288,7 +2288,7 @@ bool MBExchange::initItem( UniXML_iterator& it )
case ModbusRTU::fnForceSingleCoil: case ModbusRTU::fnForceSingleCoil:
ii.mbfunc = ModbusRTU::fnReadCoilStatus; ii.mbfunc = ModbusRTU::fnReadCoilStatus;
break; break;
case ModbusRTU::fnWriteOutputRegisters: case ModbusRTU::fnWriteOutputRegisters:
ii.mbfunc = ModbusRTU::fnReadOutputRegisters; ii.mbfunc = ModbusRTU::fnReadOutputRegisters;
break; break;
...@@ -2298,7 +2298,7 @@ bool MBExchange::initItem( UniXML_iterator& it ) ...@@ -2298,7 +2298,7 @@ bool MBExchange::initItem( UniXML_iterator& it )
break; break;
default: default:
ii.mbfunc = ModbusRTU::fnReadOutputRegisters; ii.mbfunc = ModbusRTU::fnReadOutputRegisters;
break; break;
} }
} }
...@@ -2307,7 +2307,7 @@ bool MBExchange::initItem( UniXML_iterator& it ) ...@@ -2307,7 +2307,7 @@ bool MBExchange::initItem( UniXML_iterator& it )
ri->mb_initOK = false; ri->mb_initOK = false;
ri->sm_initOK = false; ri->sm_initOK = false;
} }
return true; return true;
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
...@@ -2317,7 +2317,7 @@ bool MBExchange::initMTRitem( UniXML_iterator& it, RegInfo* p ) ...@@ -2317,7 +2317,7 @@ bool MBExchange::initMTRitem( UniXML_iterator& it, RegInfo* p )
if( p->mtrType == MTR::mtUnknown ) if( p->mtrType == MTR::mtUnknown )
{ {
if( dlog.is_crit() ) if( dlog.is_crit() )
dlog.crit() << myname << "(readMTRItem): Unknown mtrtype '" dlog.crit() << myname << "(readMTRItem): Unknown mtrtype '"
<< it.getProp(prop_prefix + "mtrtype") << it.getProp(prop_prefix + "mtrtype")
<< "' for " << it.getProp("name") << endl; << "' for " << it.getProp("name") << endl;
...@@ -2331,7 +2331,7 @@ bool MBExchange::initRTU188item( UniXML_iterator& it, RegInfo* p ) ...@@ -2331,7 +2331,7 @@ bool MBExchange::initRTU188item( UniXML_iterator& it, RegInfo* p )
{ {
string jack(it.getProp(prop_prefix + "jack")); string jack(it.getProp(prop_prefix + "jack"));
string chan(it.getProp(prop_prefix + "channel")); string chan(it.getProp(prop_prefix + "channel"));
if( jack.empty() ) if( jack.empty() )
{ {
if( dlog.is_crit() ) if( dlog.is_crit() )
...@@ -2355,12 +2355,12 @@ bool MBExchange::initRTU188item( UniXML_iterator& it, RegInfo* p ) ...@@ -2355,12 +2355,12 @@ bool MBExchange::initRTU188item( UniXML_iterator& it, RegInfo* p )
<< " for " << it.getProp("name") << endl; << " for " << it.getProp("name") << endl;
return false; return false;
} }
p->rtuChan = UniSetTypes::uni_atoi(chan); p->rtuChan = UniSetTypes::uni_atoi(chan);
if( dlog.debugging(Debug::LEVEL2) ) if( dlog.debugging(Debug::LEVEL2) )
dlog[Debug::LEVEL2] << myname << "(readRTU188Item): add jack='" << jack << "'" dlog[Debug::LEVEL2] << myname << "(readRTU188Item): add jack='" << jack << "'"
<< " channel='" << p->rtuChan << "'" << endl; << " channel='" << p->rtuChan << "'" << endl;
return true; return true;
} }
...@@ -2372,7 +2372,7 @@ std::ostream& operator<<( std::ostream& os, const MBExchange::DeviceType& dt ) ...@@ -2372,7 +2372,7 @@ std::ostream& operator<<( std::ostream& os, const MBExchange::DeviceType& dt )
case MBExchange::dtRTU: case MBExchange::dtRTU:
os << "RTU"; os << "RTU";
break; break;
case MBExchange::dtMTR: case MBExchange::dtMTR:
os << "MTR"; os << "MTR";
break; break;
...@@ -2380,12 +2380,12 @@ std::ostream& operator<<( std::ostream& os, const MBExchange::DeviceType& dt ) ...@@ -2380,12 +2380,12 @@ std::ostream& operator<<( std::ostream& os, const MBExchange::DeviceType& dt )
case MBExchange::dtRTU188: case MBExchange::dtRTU188:
os << "RTU188"; os << "RTU188";
break; break;
default: default:
os << "Unknown device type (" << (int)dt << ")"; os << "Unknown device type (" << (int)dt << ")";
break; break;
} }
return os; return os;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -2404,8 +2404,8 @@ std::ostream& operator<<( std::ostream& os, const MBExchange::RSProperty& p ) ...@@ -2404,8 +2404,8 @@ std::ostream& operator<<( std::ostream& os, const MBExchange::RSProperty& p )
{ {
os << p.cal os << p.cal
<< " cdiagram=" << ( p.cdiagram ? "yes" : "no" ); << " cdiagram=" << ( p.cdiagram ? "yes" : "no" );
} }
return os; return os;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -2447,7 +2447,7 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM ...@@ -2447,7 +2447,7 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM
d->second->ask_every_reg = it.getIntProp("ask_every_reg"); d->second->ask_every_reg = it.getIntProp("ask_every_reg");
if( dlog.is_info() ) if( dlog.is_info() )
dlog.info() << myname << "(initDeviceInfo): add addr=" << ModbusRTU::addr2str(a) dlog.info() << myname << "(initDeviceInfo): add addr=" << ModbusRTU::addr2str(a)
<< " ask_every_reg=" << d->second->ask_every_reg << endl; << " ask_every_reg=" << d->second->ask_every_reg << endl;
string s(it.getProp("respondSensor")); string s(it.getProp("respondSensor"));
...@@ -2481,7 +2481,7 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM ...@@ -2481,7 +2481,7 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM
return false; return false;
} }
} }
if( dlog.is_info() ) if( dlog.is_info() )
dlog.info() << myname << "(initDeviceInfo): add addr=" << ModbusRTU::addr2str(a) << endl; dlog.info() << myname << "(initDeviceInfo): add addr=" << ModbusRTU::addr2str(a) << endl;
int tout = it.getPIntProp("timeout",5000); int tout = it.getPIntProp("timeout",5000);
...@@ -2492,7 +2492,7 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM ...@@ -2492,7 +2492,7 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
bool MBExchange::activateObject() bool MBExchange::activateObject()
{ {
// блокирование обработки Starsp // блокирование обработки Starsp
// пока не пройдёт инициализация датчиков // пока не пройдёт инициализация датчиков
// см. sysCommand() // см. sysCommand()
{ {
...@@ -2527,7 +2527,7 @@ void MBExchange::processingMessage(UniSetTypes::VoidMessage *msg) ...@@ -2527,7 +2527,7 @@ void MBExchange::processingMessage(UniSetTypes::VoidMessage *msg)
timerInfo(&tm); timerInfo(&tm);
} }
break; break;
case Message::SensorInfo: case Message::SensorInfo:
{ {
SensorMessage sm( msg ); SensorMessage sm( msg );
...@@ -2568,7 +2568,7 @@ void MBExchange::sysCommand( UniSetTypes::SystemMessage *sm ) ...@@ -2568,7 +2568,7 @@ void MBExchange::sysCommand( UniSetTypes::SystemMessage *sm )
if( dlog.is_crit() ) if( dlog.is_crit() )
dlog.crit() << myname << "(sysCommand): ************* ITEM MAP EMPTY! terminated... *************" << endl; dlog.crit() << myname << "(sysCommand): ************* ITEM MAP EMPTY! terminated... *************" << endl;
raise(SIGTERM); raise(SIGTERM);
return; return;
} }
if( dlog.is_info() ) if( dlog.is_info() )
...@@ -2576,7 +2576,7 @@ void MBExchange::sysCommand( UniSetTypes::SystemMessage *sm ) ...@@ -2576,7 +2576,7 @@ void MBExchange::sysCommand( UniSetTypes::SystemMessage *sm )
if( !shm->isLocalwork() ) if( !shm->isLocalwork() )
initDeviceList(); initDeviceList();
waitSMReady(); waitSMReady();
// подождать пока пройдёт инициализация датчиков // подождать пока пройдёт инициализация датчиков
...@@ -2584,16 +2584,16 @@ void MBExchange::sysCommand( UniSetTypes::SystemMessage *sm ) ...@@ -2584,16 +2584,16 @@ void MBExchange::sysCommand( UniSetTypes::SystemMessage *sm )
msleep(initPause); msleep(initPause);
PassiveTimer ptAct(activateTimeout); PassiveTimer ptAct(activateTimeout);
while( !activated && !ptAct.checkTime() ) while( !activated && !ptAct.checkTime() )
{ {
cout << myname << "(sysCommand): wait activate..." << endl; cout << myname << "(sysCommand): wait activate..." << endl;
msleep(300); msleep(300);
if( activated ) if( activated )
break; break;
} }
if( !activated && dlog.debugging(Debug::CRIT) ) if( !activated && dlog.debugging(Debug::CRIT) )
dlog.crit() << myname << "(sysCommand): ************* don`t activate?! ************" << endl; dlog.crit() << myname << "(sysCommand): ************* don`t activate?! ************" << endl;
{ {
UniSetTypes::uniset_rwmutex_rlock l(mutex_start); UniSetTypes::uniset_rwmutex_rlock l(mutex_start);
askSensors(UniversalIO::UIONotify); askSensors(UniversalIO::UIONotify);
...@@ -2610,11 +2610,11 @@ void MBExchange::sysCommand( UniSetTypes::SystemMessage *sm ) ...@@ -2610,11 +2610,11 @@ void MBExchange::sysCommand( UniSetTypes::SystemMessage *sm )
case SystemMessage::Finish: case SystemMessage::Finish:
askSensors(UniversalIO::UIODontNotify); askSensors(UniversalIO::UIODontNotify);
break; break;
case SystemMessage::WatchDog: case SystemMessage::WatchDog:
{ {
// ОПТИМИЗАЦИЯ (защита от двойного перезаказа при старте) // ОПТИМИЗАЦИЯ (защита от двойного перезаказа при старте)
// Если идёт локальная работа // Если идёт локальная работа
// (т.е. MBExchange запущен в одном процессе с SharedMemory2) // (т.е. MBExchange запущен в одном процессе с SharedMemory2)
// то обрабатывать WatchDog не надо, т.к. мы и так ждём готовности SM // то обрабатывать WatchDog не надо, т.к. мы и так ждём готовности SM
// при заказе датчиков, а если SM вылетит, то вместе с этим процессом(MBExchange) // при заказе датчиков, а если SM вылетит, то вместе с этим процессом(MBExchange)
...@@ -2668,10 +2668,10 @@ void MBExchange::askSensors( UniversalIO::UIOCommand cmd ) ...@@ -2668,10 +2668,10 @@ void MBExchange::askSensors( UniversalIO::UIOCommand cmd )
if( !shm->waitSMworking(test_id,activateTimeout,50) ) if( !shm->waitSMworking(test_id,activateTimeout,50) )
{ {
ostringstream err; ostringstream err;
err << myname err << myname
<< "(askSensors): Не дождались готовности(work) SharedMemory к работе в течение " << "(askSensors): Не дождались готовности(work) SharedMemory к работе в течение "
<< activateTimeout << " мсек"; << activateTimeout << " мсек";
dlog.crit() << err.str() << endl; dlog.crit() << err.str() << endl;
kill(SIGTERM,getpid()); // прерываем (перезапускаем) процесс... kill(SIGTERM,getpid()); // прерываем (перезапускаем) процесс...
throw SystemError(err.str()); throw SystemError(err.str());
...@@ -2692,7 +2692,7 @@ void MBExchange::askSensors( UniversalIO::UIOCommand cmd ) ...@@ -2692,7 +2692,7 @@ void MBExchange::askSensors( UniversalIO::UIOCommand cmd )
if( dlog.is_warn() ) if( dlog.is_warn() )
dlog.warn() << myname << "(askSensors): 'sidExchangeMode' catch..." << std::endl; dlog.warn() << myname << "(askSensors): 'sidExchangeMode' catch..." << std::endl;
} }
for( MBExchange::RTUDeviceMap::iterator it1=rmap.begin(); it1!=rmap.end(); ++it1 ) for( MBExchange::RTUDeviceMap::iterator it1=rmap.begin(); it1!=rmap.end(); ++it1 )
{ {
RTUDevice* d(it1->second); RTUDevice* d(it1->second);
...@@ -2720,7 +2720,7 @@ void MBExchange::askSensors( UniversalIO::UIOCommand cmd ) ...@@ -2720,7 +2720,7 @@ void MBExchange::askSensors( UniversalIO::UIOCommand cmd )
{ {
if( !isWriteFunction(it->second->mbfunc) ) if( !isWriteFunction(it->second->mbfunc) )
continue; continue;
for( PList::iterator i=it->second->slst.begin(); i!=it->second->slst.end(); ++i ) for( PList::iterator i=it->second->slst.begin(); i!=it->second->slst.end(); ++i )
{ {
try try
...@@ -2766,16 +2766,16 @@ void MBExchange::sensorInfo( UniSetTypes::SensorMessage* sm ) ...@@ -2766,16 +2766,16 @@ void MBExchange::sensorInfo( UniSetTypes::SensorMessage* sm )
{ {
if( !isWriteFunction(it->second->mbfunc) ) if( !isWriteFunction(it->second->mbfunc) )
continue; continue;
for( PList::iterator i=it->second->slst.begin(); i!=it->second->slst.end(); ++i ) for( PList::iterator i=it->second->slst.begin(); i!=it->second->slst.end(); ++i )
{ {
if( sm->id == i->si.id && sm->node == i->si.node ) if( sm->id == i->si.id && sm->node == i->si.node )
{ {
if( dlog.is_info() ) if( dlog.is_info() )
{ {
dlog.info() << myname<< "(sensorInfo): si.id=" << sm->id dlog.info() << myname<< "(sensorInfo): si.id=" << sm->id
<< " reg=" << ModbusRTU::dat2str(i->reg->mbreg) << " reg=" << ModbusRTU::dat2str(i->reg->mbreg)
<< " val=" << sm->value << " val=" << sm->value
<< " mb_initOK=" << i->reg->mb_initOK << endl; << " mb_initOK=" << i->reg->mb_initOK << endl;
} }
...@@ -2847,7 +2847,7 @@ void MBExchange::poll() ...@@ -2847,7 +2847,7 @@ void MBExchange::poll()
continue; continue;
if( dlog.debugging(Debug::LEVEL3) ) if( dlog.debugging(Debug::LEVEL3) )
dlog[Debug::LEVEL3] << myname << "(poll): ask addr=" << ModbusRTU::addr2str(d->mbaddr) dlog[Debug::LEVEL3] << myname << "(poll): ask addr=" << ModbusRTU::addr2str(d->mbaddr)
<< " regs=" << d->regmap.size() << endl; << " regs=" << d->regmap.size() << endl;
d->resp_real = false; d->resp_real = false;
...@@ -2855,7 +2855,7 @@ void MBExchange::poll() ...@@ -2855,7 +2855,7 @@ void MBExchange::poll()
{ {
if( !checkProcActive() ) if( !checkProcActive() )
return; return;
try try
{ {
if( d->dtype==MBExchange::dtRTU || d->dtype==MBExchange::dtMTR ) if( d->dtype==MBExchange::dtRTU || d->dtype==MBExchange::dtMTR )
...@@ -2865,7 +2865,7 @@ void MBExchange::poll() ...@@ -2865,7 +2865,7 @@ void MBExchange::poll()
} }
} }
catch( ModbusRTU::mbException& ex ) catch( ModbusRTU::mbException& ex )
{ {
// if( d->resp_real ) // if( d->resp_real )
// { // {
if( dlog.debugging(Debug::LEVEL3) ) if( dlog.debugging(Debug::LEVEL3) )
...@@ -2888,7 +2888,7 @@ void MBExchange::poll() ...@@ -2888,7 +2888,7 @@ void MBExchange::poll()
if( d->resp_real ) if( d->resp_real )
allNotRespond = false; allNotRespond = false;
if( it==d->regmap.end() ) if( it==d->regmap.end() )
break; break;
...@@ -2917,7 +2917,7 @@ void MBExchange::poll() ...@@ -2917,7 +2917,7 @@ void MBExchange::poll()
// update SharedMemory... // update SharedMemory...
updateSM(); updateSM();
// check thresholds // check thresholds
for( MBExchange::RTUDeviceMap::iterator it1=rmap.begin(); it1!=rmap.end(); ++it1 ) for( MBExchange::RTUDeviceMap::iterator it1=rmap.begin(); it1!=rmap.end(); ++it1 )
{ {
...@@ -2932,7 +2932,7 @@ void MBExchange::poll() ...@@ -2932,7 +2932,7 @@ void MBExchange::poll()
IOBase::processingThreshold( &(*i),shm,force); IOBase::processingThreshold( &(*i),shm,force);
} }
} }
if( trReopen.hi(allNotRespond) ) if( trReopen.hi(allNotRespond) )
ptReopen.reset(); ptReopen.reset();
...@@ -2958,15 +2958,15 @@ bool MBExchange::RTUDevice::checkRespond() ...@@ -2958,15 +2958,15 @@ bool MBExchange::RTUDevice::checkRespond()
resp_state = resp_real; resp_state = resp_real;
return (prev != resp_state); return (prev != resp_state);
} }
if( resp_trTimeout.hi(resp_state && !resp_real) ) if( resp_trTimeout.hi(resp_state && !resp_real) )
resp_ptTimeout.reset(); resp_ptTimeout.reset();
if( resp_real ) if( resp_real )
resp_state = true; resp_state = true;
else if( resp_state && !resp_real && resp_ptTimeout.checkTime() ) else if( resp_state && !resp_real && resp_ptTimeout.checkTime() )
resp_state = false; resp_state = false;
// если ещё не инициализировали значение в SM // если ещё не инициализировали значение в SM
// то возвращаем true, чтобы оно принудительно сохранилось // то возвращаем true, чтобы оно принудительно сохранилось
if( !resp_init ) if( !resp_init )
...@@ -2991,10 +2991,10 @@ void MBExchange::updateRespondSensors() ...@@ -2991,10 +2991,10 @@ void MBExchange::updateRespondSensors()
for( MBExchange::RTUDeviceMap::iterator it1=rmap.begin(); it1!=rmap.end(); ++it1 ) for( MBExchange::RTUDeviceMap::iterator it1=rmap.begin(); it1!=rmap.end(); ++it1 )
{ {
RTUDevice* d(it1->second); RTUDevice* d(it1->second);
if( chanTimeout ) if( chanTimeout )
it1->second->resp_real = false; it1->second->resp_real = false;
if( dlog.debugging(Debug::LEVEL4) ) if( dlog.debugging(Debug::LEVEL4) )
{ {
dlog[Debug::LEVEL4] << myname << ": check respond addr=" << ModbusRTU::addr2str(d->mbaddr) dlog[Debug::LEVEL4] << myname << ": check respond addr=" << ModbusRTU::addr2str(d->mbaddr)
...@@ -3029,7 +3029,7 @@ void MBExchange::execute() ...@@ -3029,7 +3029,7 @@ void MBExchange::execute()
askTimer(tmExchange,0); askTimer(tmExchange,0);
} }
catch(...){} catch(...){}
initMB(false); initMB(false);
while(1) while(1)
......
...@@ -28,7 +28,7 @@ class MBExchange: ...@@ -28,7 +28,7 @@ class MBExchange:
{ {
public: public:
MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID, SharedMemory* ic=0, MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID, SharedMemory* ic=0,
const std::string prefix="mb" ); const std::string& prefix="mb" );
virtual ~MBExchange(); virtual ~MBExchange();
/*! глобальная функция для вывода help-а */ /*! глобальная функция для вывода help-а */
......
...@@ -10,8 +10,8 @@ using namespace std; ...@@ -10,8 +10,8 @@ using namespace std;
using namespace UniSetTypes; using namespace UniSetTypes;
using namespace UniSetExtensions; using namespace UniSetExtensions;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
MBTCPMaster::MBTCPMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, MBTCPMaster::MBTCPMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId,
SharedMemory* ic, const std::string prefix ): SharedMemory* ic, const std::string& prefix ):
MBExchange(objId,shmId,ic,prefix), MBExchange(objId,shmId,ic,prefix),
force_disconnect(true), force_disconnect(true),
mbtcp(0), mbtcp(0),
...@@ -84,7 +84,7 @@ ModbusClient* MBTCPMaster::initMB( bool reopen ) ...@@ -84,7 +84,7 @@ ModbusClient* MBTCPMaster::initMB( bool reopen )
{ {
if( !reopen ) if( !reopen )
return mbtcp; return mbtcp;
delete mbtcp; delete mbtcp;
mb = 0; mb = 0;
mbtcp = 0; mbtcp = 0;
...@@ -94,7 +94,7 @@ ModbusClient* MBTCPMaster::initMB( bool reopen ) ...@@ -94,7 +94,7 @@ ModbusClient* MBTCPMaster::initMB( bool reopen )
{ {
ost::Thread::setException(ost::Thread::throwException); ost::Thread::setException(ost::Thread::throwException);
mbtcp = new ModbusTCPMaster(); mbtcp = new ModbusTCPMaster();
ost::InetAddress ia(iaddr.c_str()); ost::InetAddress ia(iaddr.c_str());
mbtcp->connect(ia,port); mbtcp->connect(ia,port);
mbtcp->setForceDisconnect(force_disconnect); mbtcp->setForceDisconnect(force_disconnect);
...@@ -103,12 +103,12 @@ ModbusClient* MBTCPMaster::initMB( bool reopen ) ...@@ -103,12 +103,12 @@ ModbusClient* MBTCPMaster::initMB( bool reopen )
mbtcp->setTimeout(recv_timeout); mbtcp->setTimeout(recv_timeout);
mbtcp->setSleepPause(sleepPause_usec); mbtcp->setSleepPause(sleepPause_usec);
mbtcp->setAfterSendPause(aftersend_pause); mbtcp->setAfterSendPause(aftersend_pause);
if( dlog.is_info() ) if( dlog.is_info() )
dlog.info() << myname << "(init): ipaddr=" << iaddr << " port=" << port << endl; dlog.info() << myname << "(init): ipaddr=" << iaddr << " port=" << port << endl;
if( dlog.debugging(Debug::LEVEL9) ) if( dlog.debugging(Debug::LEVEL9) )
mbtcp->setLog(dlog); mbtcp->setLog(dlog);
} }
...@@ -175,9 +175,9 @@ void MBTCPMaster::help_print( int argc, const char* const* argv ) ...@@ -175,9 +175,9 @@ void MBTCPMaster::help_print( int argc, const char* const* argv )
cout << "--prefix-persistent-connection 0,1 - Не закрывать соединение на каждом цикле опроса" << endl; cout << "--prefix-persistent-connection 0,1 - Не закрывать соединение на каждом цикле опроса" << endl;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
MBTCPMaster* MBTCPMaster::init_mbmaster( int argc, const char* const* argv, MBTCPMaster* MBTCPMaster::init_mbmaster( int argc, const char* const* argv,
UniSetTypes::ObjectId icID, SharedMemory* ic, UniSetTypes::ObjectId icID, SharedMemory* ic,
const std::string prefix ) const std::string& prefix )
{ {
string name = conf->getArgParam("--" + prefix + "-name","MBTCPMaster1"); string name = conf->getArgParam("--" + prefix + "-name","MBTCPMaster1");
if( name.empty() ) if( name.empty() )
...@@ -191,7 +191,7 @@ MBTCPMaster* MBTCPMaster::init_mbmaster( int argc, const char* const* argv, ...@@ -191,7 +191,7 @@ MBTCPMaster* MBTCPMaster::init_mbmaster( int argc, const char* const* argv,
if( ID == UniSetTypes::DefaultObjectId ) if( ID == UniSetTypes::DefaultObjectId )
{ {
if( dlog.debugging(Debug::CRIT) ) if( dlog.debugging(Debug::CRIT) )
dlog.crit() << "(MBTCPMaster): идентификатор '" << name dlog.crit() << "(MBTCPMaster): идентификатор '" << name
<< "' не найден в конф. файле!" << "' не найден в конф. файле!"
<< " в секции " << conf->getObjectsSection() << endl; << " в секции " << conf->getObjectsSection() << endl;
return 0; return 0;
......
...@@ -193,13 +193,13 @@ class MBTCPMaster: ...@@ -193,13 +193,13 @@ class MBTCPMaster:
{ {
public: public:
MBTCPMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID, SharedMemory* ic=0, MBTCPMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID, SharedMemory* ic=0,
const std::string prefix="mbtcp" ); const std::string& prefix="mbtcp" );
virtual ~MBTCPMaster(); virtual ~MBTCPMaster();
/*! глобальная функция для инициализации объекта */ /*! глобальная функция для инициализации объекта */
static MBTCPMaster* init_mbmaster( int argc, const char* const* argv, static MBTCPMaster* init_mbmaster( int argc, const char* const* argv,
UniSetTypes::ObjectId shmID, SharedMemory* ic=0, UniSetTypes::ObjectId shmID, SharedMemory* ic=0,
const std::string prefix="mbtcp" ); const std::string& prefix="mbtcp" );
/*! глобальная функция для вывода help-а */ /*! глобальная функция для вывода help-а */
static void help_print( int argc, const char* const* argv ); static void help_print( int argc, const char* const* argv );
......
...@@ -10,8 +10,8 @@ using namespace std; ...@@ -10,8 +10,8 @@ using namespace std;
using namespace UniSetTypes; using namespace UniSetTypes;
using namespace UniSetExtensions; using namespace UniSetExtensions;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId,
SharedMemory* ic, const std::string prefix ): SharedMemory* ic, const std::string& prefix ):
MBExchange(objId,shmId,ic,prefix), MBExchange(objId,shmId,ic,prefix),
force_disconnect(true), force_disconnect(true),
pollThread(0), pollThread(0),
...@@ -134,7 +134,7 @@ checkThread(0) ...@@ -134,7 +134,7 @@ checkThread(0)
dlog.crit() << err.str() << endl; dlog.crit() << err.str() << endl;
throw UniSetTypes::SystemError(err.str()); throw UniSetTypes::SystemError(err.str());
} }
mblist.sort(); mblist.sort();
mbi = mblist.rbegin(); mbi = mblist.rbegin();
...@@ -178,7 +178,7 @@ ModbusClient* MBTCPMultiMaster::initMB( bool reopen ) ...@@ -178,7 +178,7 @@ ModbusClient* MBTCPMultiMaster::initMB( bool reopen )
if( checktime <=0 ) if( checktime <=0 )
{ {
mbi++; mbi++;
if( mbi == mblist.rend() ) if( mbi == mblist.rend() )
mbi = mblist.rbegin(); mbi = mblist.rbegin();
mbi->init(); mbi->init();
...@@ -250,7 +250,7 @@ bool MBTCPMultiMaster::MBSlaveInfo::init() ...@@ -250,7 +250,7 @@ bool MBTCPMultiMaster::MBSlaveInfo::init()
if( mbtcp->isConnection() && dlog.is_info() ) if( mbtcp->isConnection() && dlog.is_info() )
dlog.info() << "(init): " << myname << " connect OK" << endl; dlog.info() << "(init): " << myname << " connect OK" << endl;
initOK = true; initOK = true;
} }
return mbtcp->isConnection(); return mbtcp->isConnection();
...@@ -337,7 +337,7 @@ void MBTCPMultiMaster::check_thread() ...@@ -337,7 +337,7 @@ void MBTCPMultiMaster::check_thread()
catch(...){} catch(...){}
{ {
uniset_rwmutex_wrlock l(tcpMutex); uniset_rwmutex_wrlock l(tcpMutex);
it->respond = r; it->respond = r;
} }
...@@ -375,9 +375,9 @@ void MBTCPMultiMaster::help_print( int argc, const char* const* argv ) ...@@ -375,9 +375,9 @@ void MBTCPMultiMaster::help_print( int argc, const char* const* argv )
cout << " Переключение на следующий канал зависит от '--prefix-timeout'" << endl; cout << " Переключение на следующий канал зависит от '--prefix-timeout'" << endl;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
MBTCPMultiMaster* MBTCPMultiMaster::init_mbmaster( int argc, const char* const* argv, MBTCPMultiMaster* MBTCPMultiMaster::init_mbmaster( int argc, const char* const* argv,
UniSetTypes::ObjectId icID, SharedMemory* ic, UniSetTypes::ObjectId icID, SharedMemory* ic,
const std::string prefix ) const std::string& prefix )
{ {
string name = conf->getArgParam("--" + prefix + "-name","MBTCPMultiMaster1"); string name = conf->getArgParam("--" + prefix + "-name","MBTCPMultiMaster1");
if( name.empty() ) if( name.empty() )
...@@ -389,7 +389,7 @@ MBTCPMultiMaster* MBTCPMultiMaster::init_mbmaster( int argc, const char* const* ...@@ -389,7 +389,7 @@ MBTCPMultiMaster* MBTCPMultiMaster::init_mbmaster( int argc, const char* const*
ObjectId ID = conf->getObjectID(name); ObjectId ID = conf->getObjectID(name);
if( ID == UniSetTypes::DefaultObjectId ) if( ID == UniSetTypes::DefaultObjectId )
{ {
dlog.crit() << "(MBTCPMultiMaster): идентификатор '" << name dlog.crit() << "(MBTCPMultiMaster): идентификатор '" << name
<< "' не найден в конф. файле!" << "' не найден в конф. файле!"
<< " в секции " << conf->getObjectsSection() << endl; << " в секции " << conf->getObjectsSection() << endl;
return 0; return 0;
......
...@@ -215,13 +215,13 @@ class MBTCPMultiMaster: ...@@ -215,13 +215,13 @@ class MBTCPMultiMaster:
{ {
public: public:
MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID, SharedMemory* ic=0, MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID, SharedMemory* ic=0,
const std::string prefix="mbtcp" ); const std::string& prefix="mbtcp" );
virtual ~MBTCPMultiMaster(); virtual ~MBTCPMultiMaster();
/*! глобальная функция для инициализации объекта */ /*! глобальная функция для инициализации объекта */
static MBTCPMultiMaster* init_mbmaster( int argc, const char* const* argv, static MBTCPMultiMaster* init_mbmaster( int argc, const char* const* argv,
UniSetTypes::ObjectId shmID, SharedMemory* ic=0, UniSetTypes::ObjectId shmID, SharedMemory* ic=0,
const std::string prefix="mbtcp" ); const std::string& prefix="mbtcp" );
/*! глобальная функция для вывода help-а */ /*! глобальная функция для вывода help-а */
static void help_print( int argc, const char* const* argv ); static void help_print( int argc, const char* const* argv );
......
...@@ -9,7 +9,7 @@ using namespace UniSetTypes; ...@@ -9,7 +9,7 @@ using namespace UniSetTypes;
using namespace UniSetExtensions; using namespace UniSetExtensions;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
RTUExchange::RTUExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, SharedMemory* ic, RTUExchange::RTUExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, SharedMemory* ic,
const std::string prefix_ ): const std::string& prefix_ ):
MBExchange(objId,shmId,ic,prefix_), MBExchange(objId,shmId,ic,prefix_),
mbrtu(0), mbrtu(0),
defSpeed(ComPort::ComSpeed38400), defSpeed(ComPort::ComSpeed38400),
...@@ -329,7 +329,7 @@ void RTUExchange::poll() ...@@ -329,7 +329,7 @@ void RTUExchange::poll()
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
RTUExchange* RTUExchange::init_rtuexchange( int argc, const char* const* argv, UniSetTypes::ObjectId icID, RTUExchange* RTUExchange::init_rtuexchange( int argc, const char* const* argv, UniSetTypes::ObjectId icID,
SharedMemory* ic, const std::string prefix ) SharedMemory* ic, const std::string& prefix )
{ {
string name = conf->getArgParam("--" + prefix + "-name","RTUExchange1"); string name = conf->getArgParam("--" + prefix + "-name","RTUExchange1");
if( name.empty() ) if( name.empty() )
......
...@@ -14,13 +14,13 @@ class RTUExchange: ...@@ -14,13 +14,13 @@ class RTUExchange:
{ {
public: public:
RTUExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID, RTUExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID,
SharedMemory* ic=0, const std::string prefix="rs" ); SharedMemory* ic=0, const std::string& prefix="rs" );
virtual ~RTUExchange(); virtual ~RTUExchange();
/*! глобальная функция для инициализации объекта */ /*! глобальная функция для инициализации объекта */
static RTUExchange* init_rtuexchange( int argc, const char* const* argv, static RTUExchange* init_rtuexchange( int argc, const char* const* argv,
UniSetTypes::ObjectId shmID, SharedMemory* ic=0, UniSetTypes::ObjectId shmID, SharedMemory* ic=0,
const std::string prefix="rs" ); const std::string& prefix="rs" );
/*! глобальная функция для вывода help-а */ /*! глобальная функция для вывода help-а */
static void help_print( int argc, const char* const* argv ); static void help_print( int argc, const char* const* argv );
......
...@@ -12,7 +12,7 @@ using namespace UniSetTypes; ...@@ -12,7 +12,7 @@ using namespace UniSetTypes;
using namespace UniSetExtensions; using namespace UniSetExtensions;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
RRDServer::RRDServer( UniSetTypes::ObjectId objId, xmlNode* cnode, UniSetTypes::ObjectId shmId, SharedMemory* ic, RRDServer::RRDServer( UniSetTypes::ObjectId objId, xmlNode* cnode, UniSetTypes::ObjectId shmId, SharedMemory* ic,
const string prefix, DebugStream& log ): const string& prefix, DebugStream& log ):
UObject_SK(objId,cnode), UObject_SK(objId,cnode),
shm( new SMInterface(shmId,&ui,objId,ic) ), shm( new SMInterface(shmId,&ui,objId,ic) ),
prefix(prefix) prefix(prefix)
...@@ -59,9 +59,9 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID ) ...@@ -59,9 +59,9 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID )
bool overwrite = it.getPIntProp("overwrite",0); bool overwrite = it.getPIntProp("overwrite",0);
if( RRDServer::dlog.is_info() ) if( RRDServer::dlog.is_info() )
RRDServer::dlog.info() << myname << "(init): add rrd: file='" << fname RRDServer::dlog.info() << myname << "(init): add rrd: file='" << fname
<< " " << ff << "='" << fv << " " << ff << "='" << fv
<< "' create='" << cf << "'" << "' create='" << cf << "'"
<< " step=" << rrdstep << " step=" << rrdstep
<< endl; << endl;
...@@ -188,7 +188,7 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID ) ...@@ -188,7 +188,7 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID )
if( !overwrite && file_exist(fname) ) if( !overwrite && file_exist(fname) )
{ {
if( RRDServer::dlog.is_info() ) if( RRDServer::dlog.is_info() )
RRDServer::dlog.info() << myname << "(init): ignore create file='" << fname RRDServer::dlog.info() << myname << "(init): ignore create file='" << fname
<< "'. File exist... overwrite=0." << endl; << "'. File exist... overwrite=0." << endl;
} }
else else
...@@ -214,11 +214,11 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID ) ...@@ -214,11 +214,11 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID )
rrdlist.push_back(rrd); rrdlist.push_back(rrd);
} }
/* catch( Exception& ex ) /* catch( Exception& ex )
{ {
RRDServer::dlog.crit() << myname << "(init) " << ex << std::endl; RRDServer::dlog.crit() << myname << "(init) " << ex << std::endl;
} }
catch( ... ) catch( ... )
{ {
RRDServer::dlog.crit() << myname << "(init): catch ..." << std::endl; RRDServer::dlog.crit() << myname << "(init): catch ..." << std::endl;
} }
*/ */
...@@ -228,14 +228,14 @@ void RRDServer::help_print( int argc, const char* const* argv ) ...@@ -228,14 +228,14 @@ void RRDServer::help_print( int argc, const char* const* argv )
{ {
cout << " Default prefix='rrd'" << endl; cout << " Default prefix='rrd'" << endl;
cout << "--prefix-name - ID for rrdstorage. Default: RRDServer1. " << endl; cout << "--prefix-name - ID for rrdstorage. Default: RRDServer1. " << endl;
cout << "--prefix-confnode - configuration section name. Default: <NAME name='NAME'...> " << endl; cout << "--prefix-confnode - configuration section name. Default: <NAME name='NAME'...> " << endl;
cout << "--prefix-heartbeat-id name - ID for heartbeat sensor." << endl; cout << "--prefix-heartbeat-id name - ID for heartbeat sensor." << endl;
cout << "--prefix-heartbeat-max val - max value for heartbeat sensor." << endl; cout << "--prefix-heartbeat-max val - max value for heartbeat sensor." << endl;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
RRDServer* RRDServer::init_rrdstorage( int argc, const char* const* argv, RRDServer* RRDServer::init_rrdstorage( int argc, const char* const* argv,
UniSetTypes::ObjectId icID, SharedMemory* ic, UniSetTypes::ObjectId icID, SharedMemory* ic,
const std::string prefix ) const std::string& prefix )
{ {
string name = conf->getArgParam("--" + prefix + "-name","RRDServer"); string name = conf->getArgParam("--" + prefix + "-name","RRDServer");
if( name.empty() ) if( name.empty() )
...@@ -247,7 +247,7 @@ RRDServer* RRDServer::init_rrdstorage( int argc, const char* const* argv, ...@@ -247,7 +247,7 @@ RRDServer* RRDServer::init_rrdstorage( int argc, const char* const* argv,
ObjectId ID = conf->getObjectID(name); ObjectId ID = conf->getObjectID(name);
if( ID == UniSetTypes::DefaultObjectId ) if( ID == UniSetTypes::DefaultObjectId )
{ {
UniSetExtensions::dlog.crit() << "(RRDServer): Not found ID for '" << name UniSetExtensions::dlog.crit() << "(RRDServer): Not found ID for '" << name
<< " in '" << conf->getObjectsSection() << "' section" << endl; << " in '" << conf->getObjectsSection() << "' section" << endl;
return 0; return 0;
} }
...@@ -276,7 +276,7 @@ void RRDServer::askSensors( UniversalIO::UIOCommand cmd ) ...@@ -276,7 +276,7 @@ void RRDServer::askSensors( UniversalIO::UIOCommand cmd )
try try
{ {
shm->askSensor(s->first,cmd); shm->askSensor(s->first,cmd);
} }
catch( std::exception& ex ) catch( std::exception& ex )
{ {
if( RRDServer::dlog.is_crit() ) if( RRDServer::dlog.is_crit() )
...@@ -296,7 +296,7 @@ void RRDServer::sysCommand( UniSetTypes::SystemMessage* sm ) ...@@ -296,7 +296,7 @@ void RRDServer::sysCommand( UniSetTypes::SystemMessage* sm )
try try
{ {
askTimer(it->tid,it->sec*1000); askTimer(it->tid,it->sec*1000);
} }
catch( std::exception& ex ) catch( std::exception& ex )
{ {
if( RRDServer::dlog.is_crit() ) if( RRDServer::dlog.is_crit() )
......
...@@ -59,13 +59,13 @@ class RRDServer: ...@@ -59,13 +59,13 @@ class RRDServer:
{ {
public: public:
RRDServer( UniSetTypes::ObjectId objId, xmlNode* cnode, UniSetTypes::ObjectId shmID, SharedMemory* ic=0, RRDServer( UniSetTypes::ObjectId objId, xmlNode* cnode, UniSetTypes::ObjectId shmID, SharedMemory* ic=0,
const std::string prefix="rrd", DebugStream& log=UniSetExtensions::dlog ); const std::string& prefix="rrd", DebugStream& log=UniSetExtensions::dlog );
virtual ~RRDServer(); virtual ~RRDServer();
/*! глобальная функция для инициализации объекта */ /*! глобальная функция для инициализации объекта */
static RRDServer* init_rrdstorage( int argc, const char* const* argv, static RRDServer* init_rrdstorage( int argc, const char* const* argv,
UniSetTypes::ObjectId shmID, SharedMemory* ic=0, UniSetTypes::ObjectId shmID, SharedMemory* ic=0,
const std::string prefix="rrd" ); const std::string& prefix="rrd" );
/*! глобальная функция для вывода help-а */ /*! глобальная функция для вывода help-а */
static void help_print( int argc, const char* const* argv ); static void help_print( int argc, const char* const* argv );
......
...@@ -8,8 +8,8 @@ using namespace std; ...@@ -8,8 +8,8 @@ using namespace std;
using namespace UniSetTypes; using namespace UniSetTypes;
using namespace UniSetExtensions; using namespace UniSetExtensions;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
UNetSender::UNetSender( const std::string s_host, const ost::tpport_t port, SMInterface* smi, UNetSender::UNetSender( const std::string& s_host, const ost::tpport_t port, SMInterface* smi,
const std::string s_f, const std::string s_val, SharedMemory* ic ): const std::string& s_f, const std::string& s_val, SharedMemory* ic ):
s_field(s_f), s_field(s_f),
s_fvalue(s_val), s_fvalue(s_val),
shm(smi), shm(smi),
......
...@@ -19,8 +19,8 @@ ...@@ -19,8 +19,8 @@
class UNetSender class UNetSender
{ {
public: public:
UNetSender( const std::string host, const ost::tpport_t port, SMInterface* smi, UNetSender( const std::string& host, const ost::tpport_t port, SMInterface* smi,
const std::string s_field="", const std::string s_fvalue="", SharedMemory* ic=0 ); const std::string& s_field="", const std::string& s_fvalue="", SharedMemory* ic=0 );
~UNetSender(); ~UNetSender();
......
...@@ -18,7 +18,7 @@ UniExchange::NetNodeInfo::NetNodeInfo(): ...@@ -18,7 +18,7 @@ UniExchange::NetNodeInfo::NetNodeInfo():
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
UniExchange::UniExchange( UniSetTypes::ObjectId id, UniSetTypes::ObjectId shmID, UniExchange::UniExchange( UniSetTypes::ObjectId id, UniSetTypes::ObjectId shmID,
SharedMemory* ic, const std::string prefix ): SharedMemory* ic, const std::string& prefix ):
IOController(id), IOController(id),
shm(0), shm(0),
polltime(200), polltime(200),
...@@ -64,7 +64,7 @@ smReadyTimeout(15000) ...@@ -64,7 +64,7 @@ smReadyTimeout(15000)
for( ; it.getCurrent(); it.goNext() ) for( ; it.getCurrent(); it.goNext() )
{ {
UniSetTypes::ObjectId id; UniSetTypes::ObjectId id;
string n(it.getProp("id")); string n(it.getProp("id"));
if( !n.empty() ) if( !n.empty() )
id = it.getIntProp("id"); id = it.getIntProp("id");
...@@ -73,7 +73,7 @@ smReadyTimeout(15000) ...@@ -73,7 +73,7 @@ smReadyTimeout(15000)
id = conf->getControllerID( it.getProp("name") ); id = conf->getControllerID( it.getProp("name") );
n = it.getProp("name"); n = it.getProp("name");
} }
if( id == DefaultObjectId ) if( id == DefaultObjectId )
throw SystemError("(UniExchange): Uknown ID for " + n ); throw SystemError("(UniExchange): Uknown ID for " + n );
...@@ -90,7 +90,7 @@ smReadyTimeout(15000) ...@@ -90,7 +90,7 @@ smReadyTimeout(15000)
if( id == DefaultObjectId ) if( id == DefaultObjectId )
throw SystemError("(UniExchange): Uknown ID for node=" + n1 ); throw SystemError("(UniExchange): Uknown ID for node=" + n1 );
NetNodeInfo ni; NetNodeInfo ni;
ni.oref = CORBA::Object::_nil(); ni.oref = CORBA::Object::_nil();
ni.id = id; ni.id = id;
...@@ -101,7 +101,7 @@ smReadyTimeout(15000) ...@@ -101,7 +101,7 @@ smReadyTimeout(15000)
nlst.push_back(ni); nlst.push_back(ni);
} }
} }
if( shm->isLocalwork() ) if( shm->isLocalwork() )
{ {
readConfiguration(); readConfiguration();
...@@ -168,7 +168,7 @@ void UniExchange::execute() ...@@ -168,7 +168,7 @@ void UniExchange::execute()
{ {
dlog.info() << myname << "(execute): catch ..." << endl; dlog.info() << myname << "(execute): catch ..." << endl;
} }
if( it->sidConnection != DefaultObjectId ) if( it->sidConnection != DefaultObjectId )
{ {
try try
...@@ -179,8 +179,8 @@ void UniExchange::execute() ...@@ -179,8 +179,8 @@ void UniExchange::execute()
{ {
if( dlog.is_crit() ) if( dlog.is_crit() )
dlog.crit()<< myname << "(execute): sensor not avalible " dlog.crit()<< myname << "(execute): sensor not avalible "
<< conf->oind->getNameById( it->sidConnection) << conf->oind->getNameById( it->sidConnection)
<< endl; << endl;
} }
} }
...@@ -193,7 +193,7 @@ void UniExchange::execute() ...@@ -193,7 +193,7 @@ void UniExchange::execute()
updateLocalData(); updateLocalData();
ptUpdate.reset(); ptUpdate.reset();
} }
msleep(polltime); msleep(polltime);
} }
} }
...@@ -207,7 +207,7 @@ void UniExchange::NetNodeInfo::update( IOController_i::ShortMapSeq_var& map, SMI ...@@ -207,7 +207,7 @@ void UniExchange::NetNodeInfo::update( IOController_i::ShortMapSeq_var& map, SMI
// init new map... // init new map...
smap.resize(map->length()); smap.resize(map->length());
} }
int size = map->length(); int size = map->length();
for( int i=0; i<size; i++ ) for( int i=0; i<size; i++ )
{ {
...@@ -221,7 +221,7 @@ void UniExchange::NetNodeInfo::update( IOController_i::ShortMapSeq_var& map, SMI ...@@ -221,7 +221,7 @@ void UniExchange::NetNodeInfo::update( IOController_i::ShortMapSeq_var& map, SMI
} }
s->val = m->value; s->val = m->value;
try try
{ {
/* /*
...@@ -285,7 +285,7 @@ void UniExchange::updateLocalData() ...@@ -285,7 +285,7 @@ void UniExchange::updateLocalData()
dlog.warn() << "(update): catch ..." << endl; dlog.warn() << "(update): catch ..." << endl;
} }
} }
init_ok = true; init_ok = true;
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
...@@ -346,12 +346,12 @@ void UniExchange::sysCommand( SystemMessage* sm ) ...@@ -346,12 +346,12 @@ void UniExchange::sysCommand( SystemMessage* sm )
askSensors(UniversalIO::UIONotify); askSensors(UniversalIO::UIONotify);
break; break;
} }
case SystemMessage::FoldUp: case SystemMessage::FoldUp:
case SystemMessage::Finish: case SystemMessage::Finish:
askSensors(UniversalIO::UIODontNotify); askSensors(UniversalIO::UIODontNotify);
break; break;
case SystemMessage::WatchDog: case SystemMessage::WatchDog:
askSensors(UniversalIO::UIONotify); askSensors(UniversalIO::UIONotify);
break; break;
...@@ -372,12 +372,12 @@ void UniExchange::sensorInfo( UniSetTypes::SensorMessage* sm ) ...@@ -372,12 +372,12 @@ void UniExchange::sensorInfo( UniSetTypes::SensorMessage* sm )
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UniExchange::timerInfo( UniSetTypes::TimerMessage* tm ) void UniExchange::timerInfo( UniSetTypes::TimerMessage* tm )
{ {
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
UniExchange* UniExchange::init_exchange( int argc, const char* const* argv, UniExchange* UniExchange::init_exchange( int argc, const char* const* argv,
UniSetTypes::ObjectId icID, SharedMemory* ic, UniSetTypes::ObjectId icID, SharedMemory* ic,
const std::string prefix ) const std::string& prefix )
{ {
string p("--" + prefix + "-name"); string p("--" + prefix + "-name");
string nm(UniSetTypes::getArgParam(p,argc,argv,"UniExchange")); string nm(UniSetTypes::getArgParam(p,argc,argv,"UniExchange"));
...@@ -415,7 +415,7 @@ void UniExchange::readConfiguration() ...@@ -415,7 +415,7 @@ void UniExchange::readConfiguration()
if( UniSetTypes::check_filter(it,s_field,s_fvalue) ) if( UniSetTypes::check_filter(it,s_field,s_fvalue) )
initItem(it); initItem(it);
} }
// readconf_ok = true; // readconf_ok = true;
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
...@@ -440,11 +440,11 @@ bool UniExchange::initItem( UniXML_iterator& it ) ...@@ -440,11 +440,11 @@ bool UniExchange::initItem( UniXML_iterator& it )
if( i.id <=0 ) if( i.id <=0 )
i.id = DefaultObjectId; i.id = DefaultObjectId;
} }
if( i.id == DefaultObjectId ) if( i.id == DefaultObjectId )
{ {
if( dlog ) if( dlog )
dlog.crit() << myname << "(initItem): Unknown ID for " dlog.crit() << myname << "(initItem): Unknown ID for "
<< it.getProp("name") << endl; << it.getProp("name") << endl;
return false; return false;
} }
...@@ -453,7 +453,7 @@ bool UniExchange::initItem( UniXML_iterator& it ) ...@@ -453,7 +453,7 @@ bool UniExchange::initItem( UniXML_iterator& it )
if( i.type == UniversalIO::UnknownIOType ) if( i.type == UniversalIO::UnknownIOType )
{ {
if( dlog ) if( dlog )
dlog.crit() << myname << "(initItem): Unknown iotype= " dlog.crit() << myname << "(initItem): Unknown iotype= "
<< it.getProp("iotype") << " for " << it.getProp("name") << endl; << it.getProp("iotype") << " for " << it.getProp("name") << endl;
return false; return false;
} }
......
...@@ -11,14 +11,14 @@ ...@@ -11,14 +11,14 @@
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
/*! /*!
\page pageUniExchange Обмен между узлами на основе TCP/IP (UniNet). \page pageUniExchange Обмен между узлами на основе TCP/IP (UniNet).
\par Обмен построен на основе функций IOControl-ера получения списка дискретных \par Обмен построен на основе функций IOControl-ера получения списка дискретных
и аналоговых датчиков. Работает через удалённые CORBA-вызовы. и аналоговых датчиков. Работает через удалённые CORBA-вызовы.
\par Процесс считывает из конфигурационного файла список узлов которые необходимо \par Процесс считывает из конфигурационного файла список узлов которые необходимо
опрашивать (точнее список IOControl-еров), запускается поток обмена, в котором опрашивать (точнее список IOControl-еров), запускается поток обмена, в котором
эти узлы ПОСЛЕДОВАТЕЛЬНО опрашиваются.. эти узлы ПОСЛЕДОВАТЕЛЬНО опрашиваются..
\par Пример записи в конфигурационном файле для опроса пяти узлов... \par Пример записи в конфигурационном файле для опроса пяти узлов...
\code \code
<UniExchange name="UniExchange"> <UniExchange name="UniExchange">
...@@ -36,15 +36,15 @@ class UniExchange: ...@@ -36,15 +36,15 @@ class UniExchange:
public IOController public IOController
{ {
public: public:
UniExchange( UniSetTypes::ObjectId id, UniSetTypes::ObjectId shmID, UniExchange( UniSetTypes::ObjectId id, UniSetTypes::ObjectId shmID,
SharedMemory* ic=0, const std::string prefix="unet" ); SharedMemory* ic=0, const std::string& prefix="unet" );
virtual ~UniExchange(); virtual ~UniExchange();
void execute(); void execute();
static UniExchange* init_exchange( int argc, const char* const* argv, static UniExchange* init_exchange( int argc, const char* const* argv,
UniSetTypes::ObjectId shmID, SharedMemory* ic=0, UniSetTypes::ObjectId shmID, SharedMemory* ic=0,
const std::string prefix="unet" ); const std::string& prefix="unet" );
/*! глобальная функция для вывода help-а */ /*! глобальная функция для вывода help-а */
static void help_print( int argc, const char** argv ); static void help_print( int argc, const char** argv );
...@@ -64,7 +64,7 @@ class UniExchange: ...@@ -64,7 +64,7 @@ class UniExchange:
std::string s_field; std::string s_field;
std::string s_fvalue; std::string s_fvalue;
SMInterface* shm; SMInterface* shm;
struct SInfo struct SInfo
{ {
SInfo(): SInfo():
...@@ -79,13 +79,13 @@ class UniExchange: ...@@ -79,13 +79,13 @@ class UniExchange:
UniversalIO::IOType type; UniversalIO::IOType type;
UniSetTypes::uniset_rwmutex val_lock; UniSetTypes::uniset_rwmutex val_lock;
}; };
typedef std::vector<SInfo> SList; typedef std::vector<SInfo> SList;
struct NetNodeInfo struct NetNodeInfo
{ {
NetNodeInfo(); NetNodeInfo();
CORBA::Object_var oref; CORBA::Object_var oref;
IOController_i_var shm; IOController_i_var shm;
UniSetTypes::ObjectId id; UniSetTypes::ObjectId id;
...@@ -93,10 +93,10 @@ class UniExchange: ...@@ -93,10 +93,10 @@ class UniExchange:
UniSetTypes::ObjectId sidConnection; /*!< датчик связи */ UniSetTypes::ObjectId sidConnection; /*!< датчик связи */
IOController::IOStateList::iterator conn_it; IOController::IOStateList::iterator conn_it;
SList smap; SList smap;
void update(IOController_i::ShortMapSeq_var& map, SMInterface* shm ); void update(IOController_i::ShortMapSeq_var& map, SMInterface* shm );
}; };
typedef std::list<NetNodeInfo> NetNodeList; typedef std::list<NetNodeInfo> NetNodeList;
NetNodeList nlst; NetNodeList nlst;
...@@ -105,15 +105,15 @@ class UniExchange: ...@@ -105,15 +105,15 @@ class UniExchange:
bool initItem( UniXML_iterator& it ); bool initItem( UniXML_iterator& it );
void updateLocalData(); void updateLocalData();
void initIterators(); void initIterators();
int polltime; int polltime;
PassiveTimer ptUpdate; PassiveTimer ptUpdate;
bool init_ok; bool init_ok;
SList mymap; SList mymap;
size_t maxIndex; size_t maxIndex;
int smReadyTimeout; int smReadyTimeout;
private: private:
}; };
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
......
...@@ -25,7 +25,7 @@ class Calibration ...@@ -25,7 +25,7 @@ class Calibration
{ {
public: public:
Calibration(); Calibration();
Calibration( const std::string name, const std::string confile="calibration.xml" ); Calibration( const std::string& name, const std::string& confile="calibration.xml" );
Calibration( xmlNode* node ); Calibration( xmlNode* node );
~Calibration(); ~Calibration();
...@@ -75,7 +75,7 @@ class Calibration ...@@ -75,7 +75,7 @@ class Calibration
\param confile - файл содержащий данные \param confile - файл содержащий данные
\param node - если node!=0, то используется этот узел... \param node - если node!=0, то используется этот узел...
*/ */
void build( const std::string name, const std::string confile, xmlNode* node=0 ); void build( const std::string& name, const std::string& confile, xmlNode* node=0 );
/*! Тип для хранения текущего значения */ /*! Тип для хранения текущего значения */
......
...@@ -101,7 +101,7 @@ myname("") ...@@ -101,7 +101,7 @@ myname("")
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
Calibration::Calibration( const string name, const string confile ): Calibration::Calibration( const string& name, const string& confile ):
minRaw(0),maxRaw(0),minVal(0),maxVal(0),rightVal(0),leftVal(0),rightRaw(0),leftRaw(0), minRaw(0),maxRaw(0),minVal(0),maxVal(0),rightVal(0),leftVal(0),rightRaw(0),leftRaw(0),
myname(name) myname(name)
{ {
...@@ -121,7 +121,7 @@ Calibration::~Calibration() ...@@ -121,7 +121,7 @@ Calibration::~Calibration()
{ {
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void Calibration::build( const string name, const string confile, xmlNode* root ) void Calibration::build( const string& name, const string& confile, xmlNode* root )
{ {
UniXML xml; UniXML xml;
try try
......
...@@ -43,7 +43,7 @@ namespace UniSetTypes ...@@ -43,7 +43,7 @@ namespace UniSetTypes
LimitTimers():Exception("LimitTimers"){ printException(); } LimitTimers():Exception("LimitTimers"){ printException(); }
/*! Конструктор позволяющий вывести в сообщении об ошибке дополнительную информацию err */ /*! Конструктор позволяющий вывести в сообщении об ошибке дополнительную информацию err */
LimitTimers(const std::string err):Exception(err){ printException(); } LimitTimers(const std::string& err):Exception(err){ printException(); }
}; };
}; };
//@} //@}
......
...@@ -66,37 +66,37 @@ public: ...@@ -66,37 +66,37 @@ public:
TwoBits=3 TwoBits=3
}; };
ComPort( const std::string comDevice, bool nocreate=false ); ComPort( const std::string& comDevice, bool nocreate=false );
virtual ~ComPort(); virtual ~ComPort();
inline std::string getDevice(){ return dev; } inline std::string getDevice(){ return dev; }
void setSpeed( Speed s ); void setSpeed( Speed s );
void setSpeed( std::string speed ); void setSpeed( const std::string& speed );
inline Speed getSpeed(){ return speed; } inline Speed getSpeed(){ return speed; }
static Speed getSpeed( const std::string s ); static Speed getSpeed( const std::string& s );
static std::string getSpeed( Speed s ); static std::string getSpeed( Speed s );
void setParity(Parity); void setParity(Parity);
void setCharacterSize(CharacterSize); void setCharacterSize(CharacterSize);
void setStopBits(StopBits sBit); void setStopBits(StopBits sBit);
virtual void setTimeout(int timeout); virtual void setTimeout(int timeout);
void setWaiting(bool waiting); void setWaiting(bool waiting);
inline int getTimeout(){ return uTimeout*1000; } // msec inline int getTimeout(){ return uTimeout*1000; } // msec
virtual unsigned char receiveByte(); virtual unsigned char receiveByte();
virtual void sendByte(unsigned char x); virtual void sendByte(unsigned char x);
virtual int receiveBlock(unsigned char*msg,int len); virtual int receiveBlock(unsigned char*msg,int len);
virtual int sendBlock(unsigned char*msg,int len); virtual int sendBlock(unsigned char*msg,int len);
void setBlocking(bool blocking); void setBlocking(bool blocking);
virtual void cleanupChannel(); virtual void cleanupChannel();
virtual void reopen(); virtual void reopen();
protected: protected:
void openPort(); void openPort();
...@@ -109,9 +109,9 @@ protected: ...@@ -109,9 +109,9 @@ protected:
bool waiting; bool waiting;
Speed speed; Speed speed;
std::string dev; std::string dev;
virtual unsigned char m_receiveByte( bool wait ); virtual unsigned char m_receiveByte( bool wait );
private: private:
struct termios oldTermios; struct termios oldTermios;
}; };
......
...@@ -45,8 +45,8 @@ class SystemGuard; ...@@ -45,8 +45,8 @@ class SystemGuard;
namespace UniSetTypes namespace UniSetTypes
{ {
/*! /*!
Конфигуратор системы Конфигуратор системы
\note В случае обнаружения критической ошибки в настроечном файле файле. \note В случае обнаружения критической ошибки в настроечном файле файле.
Вырабатывает исключение и прекращает работу. Вырабатывает исключение и прекращает работу.
*/ */
class Configuration class Configuration
...@@ -55,30 +55,30 @@ namespace UniSetTypes ...@@ -55,30 +55,30 @@ namespace UniSetTypes
virtual ~Configuration(); virtual ~Configuration();
/*! конфигурирование xml-файлом ( предпочтительный способ ) */ /*! конфигурирование xml-файлом ( предпочтительный способ ) */
Configuration( int argc, const char* const* argv, const std::string xmlfile="" ); Configuration( int argc, const char* const* argv, const std::string& xmlfile="" );
/*! конфигурирование xml-файлом */ /*! конфигурирование xml-файлом */
Configuration( int argc, const char* const* argv, ObjectIndex* oind, const std::string xmlfile="" ); Configuration( int argc, const char* const* argv, ObjectIndex* oind, const std::string& xmlfile="" );
/*! устаревший вариант, для поддержки старых проектов */ /*! устаревший вариант, для поддержки старых проектов */
Configuration( int argc, const char* const* argv, Configuration( int argc, const char* const* argv,
const std::string fileConf, UniSetTypes::ObjectInfo* objectsMap ); const std::string& fileConf, UniSetTypes::ObjectInfo* objectsMap );
/// Получить значение полей с путём path /// Получить значение полей с путём path
std::string getField(const std::string path); std::string getField(const std::string& path);
/// Получить число из поле с путём path /// Получить число из поле с путём path
int getIntField(const std::string path); int getIntField(const std::string& path);
/// Получить число из поле с путём path (или def, если значение <= 0) /// Получить число из поле с путём path (или def, если значение <= 0)
int getPIntField(const std::string path, int def); int getPIntField(const std::string& path, int def);
xmlNode* findNode(xmlNode* node, const std::string searchnode, const std::string name = "" );
xmlNode* findNode(xmlNode* node, const std::string& searchnode, const std::string& name="" );
// Получить узел // Получить узел
xmlNode* getNode(const std::string& path); xmlNode* getNode(const std::string& path);
// Получить указанное свойство пути // Получить указанное свойство пути
std::string getProp(xmlNode*, const std::string name); std::string getProp(xmlNode*, const std::string& name);
int getIntProp(xmlNode*, const std::string name); int getIntProp(xmlNode*, const std::string& name);
int getPIntProp(xmlNode*, const std::string name, int def); int getPIntProp(xmlNode*, const std::string& name, int def);
// Получить указанное свойство по имени узла // Получить указанное свойство по имени узла
std::string getPropByNodeName(const std::string& nodename, const std::string& prop); std::string getPropByNodeName(const std::string& nodename, const std::string& prop);
...@@ -90,8 +90,8 @@ namespace UniSetTypes ...@@ -90,8 +90,8 @@ namespace UniSetTypes
inline ObjectId getDBServer() const { return localDBServer; } /*!< получение идентификатора DBServer-а */ inline ObjectId getDBServer() const { return localDBServer; } /*!< получение идентификатора DBServer-а */
inline ObjectId getLocalNode() const { return localNode; } /*!< получение идентификатора локального узла */ inline ObjectId getLocalNode() const { return localNode; } /*!< получение идентификатора локального узла */
inline std::string getLocalNodeName() const { return localNodeName; } /*!< получение название локального узла */ inline std::string getLocalNodeName() const { return localNodeName; } /*!< получение название локального узла */
inline const std::string getNSName() const { return NSName; } inline const std::string getNSName() const { return NSName; }
// repository // repository
inline std::string getRootSection() const { return secRoot; } inline std::string getRootSection() const { return secRoot; }
inline std::string getSensorsSection() const { return secSensors; } inline std::string getSensorsSection() const { return secSensors; }
...@@ -106,18 +106,18 @@ namespace UniSetTypes ...@@ -106,18 +106,18 @@ namespace UniSetTypes
xmlNode* getXMLNodesSection(); xmlNode* getXMLNodesSection();
xmlNode* getXMLObjectNode( UniSetTypes::ObjectId ); xmlNode* getXMLObjectNode( UniSetTypes::ObjectId );
UniversalIO::IOType getIOType( UniSetTypes::ObjectId ); UniversalIO::IOType getIOType( UniSetTypes::ObjectId );
UniversalIO::IOType getIOType( const std::string name ); UniversalIO::IOType getIOType( const std::string& name );
// net // net
inline unsigned int getCountOfNet() const { return countOfNet; } inline unsigned int getCountOfNet() const { return countOfNet; }
inline unsigned int getRepeatTimeout() const { return repeatTimeout; } inline unsigned int getRepeatTimeout() const { return repeatTimeout; }
inline unsigned int getRepeatCount() const { return repeatCount; } inline unsigned int getRepeatCount() const { return repeatCount; }
UniSetTypes::ObjectId getSensorID( const std::string name ); UniSetTypes::ObjectId getSensorID( const std::string& name );
UniSetTypes::ObjectId getControllerID( const std::string name ); UniSetTypes::ObjectId getControllerID( const std::string& name );
UniSetTypes::ObjectId getObjectID( const std::string name ); UniSetTypes::ObjectId getObjectID( const std::string& name );
UniSetTypes::ObjectId getServiceID( const std::string name ); UniSetTypes::ObjectId getServiceID( const std::string& name );
UniSetTypes::ObjectId getNodeID( const std::string name, const std::string alias="" ); UniSetTypes::ObjectId getNodeID( const std::string& name, const std::string& alias="" );
inline const std::string getConfFileName() const { return fileConfName; } inline const std::string getConfFileName() const { return fileConfName; }
inline std::string getImagesDir() const { return imagesDir; } // временно inline std::string getImagesDir() const { return imagesDir; } // временно
...@@ -135,14 +135,14 @@ namespace UniSetTypes ...@@ -135,14 +135,14 @@ namespace UniSetTypes
inline bool isLocalIOR(){ return localIOR; } inline bool isLocalIOR(){ return localIOR; }
inline bool isTransientIOR(){ return transientIOR; } inline bool isTransientIOR(){ return transientIOR; }
/*! получить значение указанного параметра, или значение по умолчанию */ /*! получить значение указанного параметра, или значение по умолчанию */
std::string getArgParam(const std::string name, const std::string defval=""); std::string getArgParam(const std::string& name, const std::string& defval="");
/*! получить числовое значение параметра, если не число, то 0. Если параметра нет, используется значение defval */ /*! получить числовое значение параметра, если не число, то 0. Если параметра нет, используется значение defval */
int getArgInt(const std::string name, const std::string defval=""); int getArgInt(const std::string& name, const std::string& defval="");
/*! получить числовое значение параметра, но если оно не положительное, вернуть defval */ /*! получить числовое значение параметра, но если оно не положительное, вернуть defval */
int getArgPInt(const std::string name, int defval); int getArgPInt(const std::string& name, int defval);
int getArgPInt(const std::string name, const std::string strdefval, int defval); int getArgPInt(const std::string& name, const std::string& strdefval, int defval);
xmlNode* initDebug( DebugStream& deb, const std::string& nodename ); xmlNode* initDebug( DebugStream& deb, const std::string& nodename );
...@@ -155,10 +155,10 @@ namespace UniSetTypes ...@@ -155,10 +155,10 @@ namespace UniSetTypes
{ {
return lnodes.end(); return lnodes.end();
} }
/*! интерфейс к карте объектов */ /*! интерфейс к карте объектов */
ObjectIndex* oind; ObjectIndex* oind;
/*! интерфейс к работе с локальнымми ior-файлами */ /*! интерфейс к работе с локальнымми ior-файлами */
IORFile iorfile; IORFile iorfile;
...@@ -172,18 +172,18 @@ namespace UniSetTypes ...@@ -172,18 +172,18 @@ namespace UniSetTypes
Configuration(); Configuration();
virtual void initConfiguration(int argc, const char* const* argv); virtual void initConfiguration(int argc, const char* const* argv);
void createNodesList(); void createNodesList();
virtual void initNode( UniSetTypes::NodeInfo& ninfo, UniXML_iterator& it); virtual void initNode( UniSetTypes::NodeInfo& ninfo, UniXML_iterator& it);
void initRepSections(); void initRepSections();
std::string getRepSectionName(const std::string sec, xmlNode* secnode=0 ); std::string getRepSectionName(const std::string& sec, xmlNode* secnode=0 );
void setConfFileName(const std::string fn=""); void setConfFileName( const std::string& fn="" );
void initParameters(); void initParameters();
void setLocalNode( std::string nodename ); void setLocalNode( const std::string& nodename );
std::string getPort(const std::string port=""); std::string getPort( const std::string& port="" );
friend class ::SystemGuard; friend class ::SystemGuard;
// friend bool SystemGuard::pingNode(); // friend bool SystemGuard::pingNode();
std::string rootDir; std::string rootDir;
...@@ -193,7 +193,7 @@ namespace UniSetTypes ...@@ -193,7 +193,7 @@ namespace UniSetTypes
const char* const* _argv; const char* const* _argv;
CORBA::ORB_var orb; CORBA::ORB_var orb;
CORBA::PolicyList policyList; CORBA::PolicyList policyList;
std::string NSName; /*!< имя сервиса именования на ланной машине (обычно "NameService") */ std::string NSName; /*!< имя сервиса именования на ланной машине (обычно "NameService") */
unsigned int countOfNet; /*!< количество резервных каналов */ unsigned int countOfNet; /*!< количество резервных каналов */
unsigned int repeatCount; /*!< количество попыток получить доступ к удаленному объекту unsigned int repeatCount; /*!< количество попыток получить доступ к удаленному объекту
...@@ -207,7 +207,7 @@ namespace UniSetTypes ...@@ -207,7 +207,7 @@ namespace UniSetTypes
std::string secRoot; std::string secRoot;
std::string secSensors; std::string secSensors;
std::string secObjects; std::string secObjects;
std::string secControlles; std::string secControlles;
std::string secServices; std::string secServices;
// xml // xml
...@@ -219,7 +219,7 @@ namespace UniSetTypes ...@@ -219,7 +219,7 @@ namespace UniSetTypes
ObjectId localDBServer; ObjectId localDBServer;
ObjectId localNode; ObjectId localNode;
std::string localNodeName; std::string localNodeName;
std::string fileConfName; std::string fileConfName;
std::string imagesDir; std::string imagesDir;
...@@ -232,22 +232,22 @@ namespace UniSetTypes ...@@ -232,22 +232,22 @@ namespace UniSetTypes
std::string lockDir; std::string lockDir;
bool localIOR; bool localIOR;
bool transientIOR; bool transientIOR;
int heartbeat_msec; int heartbeat_msec;
}; };
/*! Глобальный указатель на конфигуратор */ /*! Глобальный указатель на конфигуратор */
extern Configuration* conf; extern Configuration* conf;
/*! Глобальный объект для вывода логов */ /*! Глобальный объект для вывода логов */
extern DebugStream ulog; extern DebugStream ulog;
// Инициализация UniSetTypes::conf. // Инициализация UniSetTypes::conf.
// ( учитываются параметры командной строки --confile и --id-from-config ) // ( учитываются параметры командной строки --confile и --id-from-config )
void uniset_init( int argc, const char* const* argv, const std::string& xmlfile="configure.xml" ); void uniset_init( int argc, const char* const* argv, const std::string& xmlfile="configure.xml" );
} // end of UniSetTypes namespace } // end of UniSetTypes namespace
#endif // Configuration_H_ #endif // Configuration_H_
...@@ -112,10 +112,10 @@ public: ...@@ -112,10 +112,10 @@ public:
} }
/// Sets the debugstreams' logfile to f. /// Sets the debugstreams' logfile to f.
void logFile(const std::string f); void logFile( const std::string& f );
inline std::string getLogFile(){ return fname; } inline std::string getLogFile(){ return fname; }
/// Returns true if t is part of the current debug level. /// Returns true if t is part of the current debug level.
inline bool debugging(Debug::type t = Debug::ANY) const inline bool debugging(Debug::type t = Debug::ANY) const
{ return (dt & t); } { return (dt & t); }
...@@ -138,13 +138,13 @@ public: ...@@ -138,13 +138,13 @@ public:
return debug(t); return debug(t);
} }
/** /**
Вывод продолжения логов (без даты и времени) Вывод продолжения логов (без даты и времени)
*/ */
inline std::ostream& to_end(Debug::type t) inline std::ostream& to_end(Debug::type t)
{ return this->operator()(t); } { return this->operator()(t); }
/** /**
Вывод продолжения логов (без даты и времени) "log()" Вывод продолжения логов (без даты и времени) "log()"
*/ */
std::ostream& operator()(Debug::type t); std::ostream& operator()(Debug::type t);
...@@ -189,11 +189,11 @@ public: ...@@ -189,11 +189,11 @@ public:
std::ostream& printDate(Debug::type t, char brk='/'); std::ostream& printDate(Debug::type t, char brk='/');
std::ostream& printTime(Debug::type t, char brk=':'); std::ostream& printTime(Debug::type t, char brk=':');
std::ostream& printDateTime(Debug::type t); std::ostream& printDateTime(Debug::type t);
std::ostream& pos(int x, int y); std::ostream& pos(int x, int y);
const DebugStream &operator=(const DebugStream& r); const DebugStream &operator=(const DebugStream& r);
private: private:
/// The current debug level /// The current debug level
Debug::type dt; Debug::type dt;
...@@ -205,7 +205,7 @@ private: ...@@ -205,7 +205,7 @@ private:
debugstream_internal * internal; debugstream_internal * internal;
bool show_datetime; bool show_datetime;
std::string fname; std::string fname;
}; };
#endif #endif
...@@ -87,7 +87,7 @@ class OutOfRange: public Exception ...@@ -87,7 +87,7 @@ class OutOfRange: public Exception
{ {
public: public:
OutOfRange():Exception("OutOfRange"){} OutOfRange():Exception("OutOfRange"){}
OutOfRange(const std::string err):Exception(err){} OutOfRange(const std::string& err):Exception(err){}
}; };
...@@ -107,7 +107,7 @@ public: ...@@ -107,7 +107,7 @@ public:
LimitWaitingPTimers():Exception("LimitWaitingPassiveTimers"){} LimitWaitingPTimers():Exception("LimitWaitingPassiveTimers"){}
/*! Конструктор, позволяющий вывести в сообщении об ошибке дополнительную информацию err */ /*! Конструктор, позволяющий вывести в сообщении об ошибке дополнительную информацию err */
LimitWaitingPTimers(const std::string err):Exception(err){} LimitWaitingPTimers(const std::string& err):Exception(err){}
}; };
...@@ -121,7 +121,7 @@ public: ...@@ -121,7 +121,7 @@ public:
ORepFailed():Exception("ORepFailed"){} ORepFailed():Exception("ORepFailed"){}
/*! Конструктор, позволяющий вывести в сообщении об ошибке дополнительную информацию err */ /*! Конструктор, позволяющий вывести в сообщении об ошибке дополнительную информацию err */
ORepFailed(const std::string err):Exception(err){} ORepFailed(const std::string& err):Exception(err){}
}; };
...@@ -134,7 +134,7 @@ public: ...@@ -134,7 +134,7 @@ public:
SystemError():Exception("SystemError"){} SystemError():Exception("SystemError"){}
/*! Конструктор, позволяющий вывести в сообщении об ошибке дополнительную информацию err */ /*! Конструктор, позволяющий вывести в сообщении об ошибке дополнительную информацию err */
SystemError(const std::string err):Exception(err){} SystemError(const std::string& err):Exception(err){}
}; };
class CRCError: public Exception class CRCError: public Exception
...@@ -153,7 +153,7 @@ public: ...@@ -153,7 +153,7 @@ public:
CommFailed():Exception("CommFailed"){} CommFailed():Exception("CommFailed"){}
/*! Конструктор, позволяющий вывести в сообщении об ошибке дополнительную информацию err */ /*! Конструктор, позволяющий вывести в сообщении об ошибке дополнительную информацию err */
CommFailed(const std::string err):Exception(err){} CommFailed(const std::string& err):Exception(err){}
}; };
...@@ -167,7 +167,7 @@ class TimeOut: public CommFailed ...@@ -167,7 +167,7 @@ class TimeOut: public CommFailed
TimeOut():CommFailed("TimeOut") {} TimeOut():CommFailed("TimeOut") {}
/*! Конструктор, позволяющий вывести в сообщении об ошибке дополнительную информацию err */ /*! Конструктор, позволяющий вывести в сообщении об ошибке дополнительную информацию err */
TimeOut(const std::string err):CommFailed(err){} TimeOut(const std::string& err):CommFailed(err){}
}; };
...@@ -178,7 +178,7 @@ class ResolveNameError: public ORepFailed ...@@ -178,7 +178,7 @@ class ResolveNameError: public ORepFailed
{ {
public: public:
ResolveNameError():ORepFailed("ResolveNameError"){} ResolveNameError():ORepFailed("ResolveNameError"){}
ResolveNameError(const std::string err):ORepFailed(err){} ResolveNameError(const std::string& err):ORepFailed(err){}
}; };
...@@ -186,7 +186,7 @@ class NSResolveError: public ORepFailed ...@@ -186,7 +186,7 @@ class NSResolveError: public ORepFailed
{ {
public: public:
NSResolveError():ORepFailed("NSResolveError"){} NSResolveError():ORepFailed("NSResolveError"){}
NSResolveError(const std::string err):ORepFailed(err){} NSResolveError(const std::string& err):ORepFailed(err){}
}; };
...@@ -200,7 +200,7 @@ public: ...@@ -200,7 +200,7 @@ public:
ObjectNameAlready():ResolveNameError("ObjectNameAlready"){} ObjectNameAlready():ResolveNameError("ObjectNameAlready"){}
/*! Конструктор, позволяющий вывести в сообщении об ошибке дополнительную информацию err */ /*! Конструктор, позволяющий вывести в сообщении об ошибке дополнительную информацию err */
ObjectNameAlready(const std::string err):ResolveNameError(err){} ObjectNameAlready(const std::string& err):ResolveNameError(err){}
}; };
/*! /*!
...@@ -213,7 +213,7 @@ class IOBadParam: public Exception ...@@ -213,7 +213,7 @@ class IOBadParam: public Exception
IOBadParam():Exception("IOBadParam"){} IOBadParam():Exception("IOBadParam"){}
/*! Конструктор, позволяющий вывести в сообщении об ошибке дополнительную информацию err */ /*! Конструктор, позволяющий вывести в сообщении об ошибке дополнительную информацию err */
IOBadParam(const std::string err):Exception(err){} IOBadParam(const std::string& err):Exception(err){}
}; };
/*! /*!
...@@ -224,7 +224,7 @@ class InvalidObjectName: public ResolveNameError ...@@ -224,7 +224,7 @@ class InvalidObjectName: public ResolveNameError
{ {
public: public:
InvalidObjectName():ResolveNameError("InvalidObjectName"){} InvalidObjectName():ResolveNameError("InvalidObjectName"){}
InvalidObjectName(const std::string err):ResolveNameError(err){} InvalidObjectName(const std::string& err):ResolveNameError(err){}
}; };
/*! Исключение, вырабатываемое в случае если не удалось установить обработчик сигнала */ /*! Исключение, вырабатываемое в случае если не удалось установить обработчик сигнала */
...@@ -232,14 +232,14 @@ class NotSetSignal: public Exception ...@@ -232,14 +232,14 @@ class NotSetSignal: public Exception
{ {
public: public:
NotSetSignal():Exception("NotSetSignal"){} NotSetSignal():Exception("NotSetSignal"){}
NotSetSignal(const std::string err):Exception(err){} NotSetSignal(const std::string& err):Exception(err){}
}; };
class NameNotFound: public ResolveNameError class NameNotFound: public ResolveNameError
{ {
public: public:
NameNotFound():ResolveNameError("NameNotFound"){} NameNotFound():ResolveNameError("NameNotFound"){}
NameNotFound(const std::string err):ResolveNameError(err){} NameNotFound(const std::string& err):ResolveNameError(err){}
}; };
//@} //@}
......
...@@ -40,14 +40,14 @@ class IOController: ...@@ -40,14 +40,14 @@ class IOController:
public POA_IOController_i public POA_IOController_i
{ {
public: public:
IOController(const std::string name, const std::string section); IOController(const std::string& name, const std::string& section);
IOController(UniSetTypes::ObjectId id); IOController(UniSetTypes::ObjectId id);
~IOController(); ~IOController();
virtual UniSetTypes::ObjectType getType(){ return UniSetTypes::getObjectType("IOController"); } virtual UniSetTypes::ObjectType getType(){ return UniSetTypes::getObjectType("IOController"); }
virtual CORBA::Long getValue( const IOController_i::SensorInfo& si ); virtual CORBA::Long getValue( const IOController_i::SensorInfo& si );
// -------------------- !!!!!!!!! --------------------------------- // -------------------- !!!!!!!!! ---------------------------------
// Реализуются конкретным i/o контроллером // Реализуются конкретным i/o контроллером
...@@ -59,8 +59,8 @@ class IOController: ...@@ -59,8 +59,8 @@ class IOController:
UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId ); UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId );
// ---------------------------------------------------------------- // ----------------------------------------------------------------
virtual void setUndefinedState(const IOController_i::SensorInfo& si, virtual void setUndefinedState(const IOController_i::SensorInfo& si,
CORBA::Boolean undefined, CORBA::Boolean undefined,
UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId ); UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId );
...@@ -74,13 +74,13 @@ class IOController: ...@@ -74,13 +74,13 @@ class IOController:
virtual IOController_i::SensorIOInfo getSensorIOInfo(const IOController_i::SensorInfo& si); virtual IOController_i::SensorIOInfo getSensorIOInfo(const IOController_i::SensorInfo& si);
virtual CORBA::Long getRawValue(const IOController_i::SensorInfo& si); virtual CORBA::Long getRawValue(const IOController_i::SensorInfo& si);
virtual void calibrate(const IOController_i::SensorInfo& si, virtual void calibrate(const IOController_i::SensorInfo& si,
const IOController_i::CalibrateInfo& ci, const IOController_i::CalibrateInfo& ci,
UniSetTypes::ObjectId adminId ); UniSetTypes::ObjectId adminId );
IOController_i::CalibrateInfo getCalibrateInfo(const IOController_i::SensorInfo& si); IOController_i::CalibrateInfo getCalibrateInfo(const IOController_i::SensorInfo& si);
inline IOController_i::SensorInfo SensorInfo(UniSetTypes::ObjectId id, inline IOController_i::SensorInfo SensorInfo(UniSetTypes::ObjectId id,
UniSetTypes::ObjectId node=UniSetTypes::conf->getLocalNode()) UniSetTypes::ObjectId node=UniSetTypes::conf->getLocalNode())
{ {
IOController_i::SensorInfo si; IOController_i::SensorInfo si;
...@@ -89,9 +89,9 @@ class IOController: ...@@ -89,9 +89,9 @@ class IOController:
return si; return si;
}; };
UniSetTypes::Message::Priority getPriority(const IOController_i::SensorInfo& si, UniSetTypes::Message::Priority getPriority(const IOController_i::SensorInfo& si,
UniversalIO::IOType type); UniversalIO::IOType type);
virtual IOController_i::ShortIOInfo getChangedTime(const IOController_i::SensorInfo& si); virtual IOController_i::ShortIOInfo getChangedTime(const IOController_i::SensorInfo& si);
virtual IOController_i::ShortMapSeq* getSensors(); virtual IOController_i::ShortMapSeq* getSensors();
...@@ -106,7 +106,7 @@ class IOController: ...@@ -106,7 +106,7 @@ class IOController:
/*! /*!
// \warning В сигнале напрямую передаётся итератор (т.е. по сути указатель на внутреннюю структуру!) // \warning В сигнале напрямую передаётся итератор (т.е. по сути указатель на внутреннюю структуру!)
// Это не очень хорошо, с точки зрения "архитектуры", но оптимальнее по быстродействию! // Это не очень хорошо, с точки зрения "архитектуры", но оптимальнее по быстродействию!
// необходимо в обработчике не забывать использовать uniset_rwmutex_wrlock(val_lock) или uniset_rwmutex_rlock(val_lock) // необходимо в обработчике не забывать использовать uniset_rwmutex_wrlock(val_lock) или uniset_rwmutex_rlock(val_lock)
*/ */
typedef sigc::signal<void, IOStateList::iterator&, IOController*> ChangeSignal; typedef sigc::signal<void, IOStateList::iterator&, IOController*> ChangeSignal;
typedef sigc::signal<void, IOStateList::iterator&, IOController*> ChangeUndefinedStateSignal; typedef sigc::signal<void, IOStateList::iterator&, IOController*> ChangeUndefinedStateSignal;
...@@ -150,12 +150,12 @@ class IOController: ...@@ -150,12 +150,12 @@ class IOController:
// Дополнительные (вспомогательные поля) // Дополнительные (вспомогательные поля)
UniSetTypes::uniset_rwmutex val_lock; /*!< флаг блокирующий работу со значением */ UniSetTypes::uniset_rwmutex val_lock; /*!< флаг блокирующий работу со значением */
IOStateList::iterator it; IOStateList::iterator it;
void* any; /*!< расширение для возможности хранения своей информации */ void* any; /*!< расширение для возможности хранения своей информации */
// сигнал для реализации механизма зависимостией.. // сигнал для реализации механизма зависимостией..
// (все зависимые датчики подключаются к нему (см. NCRestorer::init_depends_signals) // (все зависимые датчики подключаются к нему (см. NCRestorer::init_depends_signals)
ChangeSignal sigChange; ChangeSignal sigChange;
ChangeUndefinedStateSignal sigUndefChange; ChangeUndefinedStateSignal sigUndefChange;
...@@ -178,9 +178,9 @@ class IOController: ...@@ -178,9 +178,9 @@ class IOController:
CORBA::Long value, UniSetTypes::ObjectId sup_id ); CORBA::Long value, UniSetTypes::ObjectId sup_id );
virtual long localGetValue( IOStateList::iterator& it, const IOController_i::SensorInfo& si ); virtual long localGetValue( IOStateList::iterator& it, const IOController_i::SensorInfo& si );
/*! функция выставления признака неопределённого состояния для аналоговых датчиков
/*! функция выставления признака неопределённого состояния для аналоговых датчиков
// для дискретных датчиков необходимости для подобной функции нет. // для дискретных датчиков необходимости для подобной функции нет.
// см. логику выставления в функции localSaveState // см. логику выставления в функции localSaveState
*/ */
...@@ -199,7 +199,7 @@ class IOController: ...@@ -199,7 +199,7 @@ class IOController:
virtual void sensorsRegistration(){}; virtual void sensorsRegistration(){};
/*! удаление из репозитория датчиков за информацию о которых отвечает данный IOController */ /*! удаление из репозитория датчиков за информацию о которых отвечает данный IOController */
virtual void sensorsUnregistration(); virtual void sensorsUnregistration();
typedef sigc::signal<void, IOStateList::iterator&, IOController*> InitSignal; typedef sigc::signal<void, IOStateList::iterator&, IOController*> InitSignal;
// signal по изменению определённого датчика // signal по изменению определённого датчика
inline InitSignal signal_init(){ return sigInit; } inline InitSignal signal_init(){ return sigInit; }
...@@ -211,12 +211,12 @@ class IOController: ...@@ -211,12 +211,12 @@ class IOController:
/*! разрегистрация датчика */ /*! разрегистрация датчика */
void ioUnRegistration( const IOController_i::SensorInfo& si ); void ioUnRegistration( const IOController_i::SensorInfo& si );
UniSetTypes::Message::Priority getMessagePriority(UniSetTypes::KeyType k, UniversalIO::IOType type); UniSetTypes::Message::Priority getMessagePriority(UniSetTypes::KeyType k, UniversalIO::IOType type);
// ------------------------------ // ------------------------------
inline IOController_i::SensorIOInfo inline IOController_i::SensorIOInfo
SensorIOInfo(long v, UniversalIO::IOType t, const IOController_i::SensorInfo& si, SensorIOInfo(long v, UniversalIO::IOType t, const IOController_i::SensorInfo& si,
UniSetTypes::Message::Priority p = UniSetTypes::Message::Medium, UniSetTypes::Message::Priority p = UniSetTypes::Message::Medium,
long defval=0, IOController_i::CalibrateInfo* ci=0 ) long defval=0, IOController_i::CalibrateInfo* ci=0 )
{ {
...@@ -238,16 +238,16 @@ class IOController: ...@@ -238,16 +238,16 @@ class IOController:
ai.ci.maxCal = 0; ai.ci.maxCal = 0;
ai.ci.precision = 0; ai.ci.precision = 0;
} }
return ai; return ai;
}; };
//! сохранение информации об изменении состояния датчика //! сохранение информации об изменении состояния датчика
virtual void logging(UniSetTypes::SensorMessage& sm); virtual void logging(UniSetTypes::SensorMessage& sm);
//! сохранение состояния всех датчиков в БД //! сохранение состояния всех датчиков в БД
virtual void dumpToDB(); virtual void dumpToDB();
IOController(); IOController();
// доступ к списку c изменением только для своих // доступ к списку c изменением только для своих
IOStateList::iterator myioBegin(); IOStateList::iterator myioBegin();
...@@ -255,7 +255,7 @@ class IOController: ...@@ -255,7 +255,7 @@ class IOController:
IOStateList::iterator myiofind(UniSetTypes::KeyType k); IOStateList::iterator myiofind(UniSetTypes::KeyType k);
// -------------------------- // --------------------------
// ФИЛЬТРОВАНИЕ // ФИЛЬТРОВАНИЕ
// //
typedef sigc::slot<bool,const USensorInfo&, CORBA::Long, UniSetTypes::ObjectId> IOFilterSlot; typedef sigc::slot<bool,const USensorInfo&, CORBA::Long, UniSetTypes::ObjectId> IOFilterSlot;
typedef std::list<IOFilterSlot> IOFilterSlotList; typedef std::list<IOFilterSlot> IOFilterSlotList;
...@@ -263,8 +263,8 @@ class IOController: ...@@ -263,8 +263,8 @@ class IOController:
Фильтрующая функция должна возвращать: Фильтрующая функция должна возвращать:
TRUE - если значение 'нормальное' TRUE - если значение 'нормальное'
FALSE - если значение не подходит (отбрасывается) FALSE - если значение не подходит (отбрасывается)
Пример использования: Пример использования:
addIOFilter( sigc::mem_fun(my,&MyClass::my_filter) ); addIOFilter( sigc::mem_fun(my,&MyClass::my_filter) );
*/ */
IOFilterSlotList::iterator addIOFilter( IOFilterSlot sl, bool push_front=false ); IOFilterSlotList::iterator addIOFilter( IOFilterSlot sl, bool push_front=false );
...@@ -276,16 +276,16 @@ class IOController: ...@@ -276,16 +276,16 @@ class IOController:
inline bool iofiltersEmpty(){ return iofilters.empty(); } inline bool iofiltersEmpty(){ return iofilters.empty(); }
inline int iodiltersSize(){ return iofilters.size(); } inline int iodiltersSize(){ return iofilters.size(); }
private: private:
friend class NCRestorer; friend class NCRestorer;
ChangeSignal sigAnyChange; ChangeSignal sigAnyChange;
ChangeSignal sigAnyUndefChange; ChangeSignal sigAnyUndefChange;
InitSignal sigInit; InitSignal sigInit;
IOStateList ioList; /*!< список с текущим состоянием аналоговых входов/выходов */ IOStateList ioList; /*!< список с текущим состоянием аналоговых входов/выходов */
UniSetTypes::uniset_rwmutex ioMutex; /*!< замок для блокирования совместного доступа к ioList */ UniSetTypes::uniset_rwmutex ioMutex; /*!< замок для блокирования совместного доступа к ioList */
bool isPingDBServer; // флаг связи с DBServer-ом bool isPingDBServer; // флаг связи с DBServer-ом
IOFilterSlotList iofilters; /*!< список фильтров для аналоговых значений */ IOFilterSlotList iofilters; /*!< список фильтров для аналоговых значений */
......
...@@ -88,9 +88,9 @@ class NCRestorer; ...@@ -88,9 +88,9 @@ class NCRestorer;
\endcode \endcode
"Статический" способ заказа гарантирует, что при перезапуске "Статический" способ заказа гарантирует, что при перезапуске
\b IONC список заказчиков будет восстановлен по конфигурационному файлу. \b IONC список заказчиков будет восстановлен по конфигурационному файлу.
\section sec_NC_Thresholds Пороговые датчики \section sec_NC_Thresholds Пороговые датчики
\section sec_NC_Depends Механизм зависимостей между датчиками \section sec_NC_Depends Механизм зависимостей между датчиками
Механизм зависимостей позволяет задать зависимость одного датчика, от другого. Механизм зависимостей позволяет задать зависимость одного датчика, от другого.
Например пока "разрешающий" датчик не равен "1", у зависимого держится значение "0". Например пока "разрешающий" датчик не равен "1", у зависимого держится значение "0".
...@@ -119,9 +119,9 @@ class NCRestorer; ...@@ -119,9 +119,9 @@ class NCRestorer;
* \todo Сделать логирование выходов * \todo Сделать логирование выходов
\section AskSensors Заказ датчиков \section AskSensors Заказ датчиков
.... ....
ConsumerMaxAttempts - максимальное число неудачных ConsumerMaxAttempts - максимальное число неудачных
попыток послать сообщение "заказчику". Настраивается в попыток послать сообщение "заказчику". Настраивается в
конфигурационном файле. По умолчанию = 5. конфигурационном файле. По умолчанию = 5.
*/ */
...@@ -130,8 +130,8 @@ class IONotifyController: ...@@ -130,8 +130,8 @@ class IONotifyController:
public POA_IONotifyController_i public POA_IONotifyController_i
{ {
public: public:
IONotifyController(const std::string name, const std::string section, NCRestorer* dumper=0); IONotifyController(const std::string& name, const std::string& section, NCRestorer* dumper=0);
IONotifyController(UniSetTypes::ObjectId id, NCRestorer* dumper=0); IONotifyController(UniSetTypes::ObjectId id, NCRestorer* dumper=0);
virtual ~IONotifyController(); virtual ~IONotifyController();
...@@ -139,23 +139,23 @@ class IONotifyController: ...@@ -139,23 +139,23 @@ class IONotifyController:
virtual UniSetTypes::ObjectType getType(){ return UniSetTypes::getObjectType("IONotifyController"); } virtual UniSetTypes::ObjectType getType(){ return UniSetTypes::getObjectType("IONotifyController"); }
virtual void askSensor(const IOController_i::SensorInfo& si, const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd); virtual void askSensor(const IOController_i::SensorInfo& si, const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd);
virtual void askThreshold(const IOController_i::SensorInfo& si, const UniSetTypes::ConsumerInfo& ci, virtual void askThreshold(const IOController_i::SensorInfo& si, const UniSetTypes::ConsumerInfo& ci,
UniSetTypes::ThresholdId tid, UniSetTypes::ThresholdId tid,
CORBA::Long lowLimit, CORBA::Long hiLimit, CORBA::Boolean invert, CORBA::Long lowLimit, CORBA::Long hiLimit, CORBA::Boolean invert,
UniversalIO::UIOCommand cmd ); UniversalIO::UIOCommand cmd );
virtual IONotifyController_i::ThresholdInfo getThresholdInfo( const IOController_i::SensorInfo& si, UniSetTypes::ThresholdId tid ); virtual IONotifyController_i::ThresholdInfo getThresholdInfo( const IOController_i::SensorInfo& si, UniSetTypes::ThresholdId tid );
virtual IONotifyController_i::ThresholdList* getThresholds(const IOController_i::SensorInfo& si ); virtual IONotifyController_i::ThresholdList* getThresholds(const IOController_i::SensorInfo& si );
virtual IONotifyController_i::ThresholdsListSeq* getThresholdsList(); virtual IONotifyController_i::ThresholdsListSeq* getThresholdsList();
virtual UniSetTypes::IDSeq* askSensorsSeq(const UniSetTypes::IDSeq& lst, virtual UniSetTypes::IDSeq* askSensorsSeq(const UniSetTypes::IDSeq& lst,
const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd); const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd);
// -------------------------------------------- // --------------------------------------------
// функция для работы напрямую черех iterator (оптимизация) // функция для работы напрямую черех iterator (оптимизация)
virtual void localSetValue( IOController::IOStateList::iterator& it, virtual void localSetValue( IOController::IOStateList::iterator& it,
const IOController_i::SensorInfo& si, const IOController_i::SensorInfo& si,
CORBA::Long value, UniSetTypes::ObjectId sup_id ); CORBA::Long value, UniSetTypes::ObjectId sup_id );
...@@ -195,17 +195,17 @@ class IONotifyController: ...@@ -195,17 +195,17 @@ class IONotifyController:
/*! идентификатор дискретного датчика связанного с данным порогом */ /*! идентификатор дискретного датчика связанного с данным порогом */
UniSetTypes::ObjectId sid; UniSetTypes::ObjectId sid;
/*! итератор в списке датчиков (для оптимально-быстрого доступа) */ /*! итератор в списке датчиков (для оптимально-быстрого доступа) */
IOController::IOStateList::iterator sit; IOController::IOStateList::iterator sit;
/*! инверсная логика */ /*! инверсная логика */
bool invert; bool invert;
inline bool operator== ( const ThresholdInfo& r ) const inline bool operator== ( const ThresholdInfo& r ) const
{ {
return ((id == r.id) && return ((id == r.id) &&
(hilimit == r.hilimit) && (hilimit == r.hilimit) &&
(lowlimit == r.lowlimit) && (lowlimit == r.lowlimit) &&
(invert == r.invert) ); (invert == r.invert) );
} }
...@@ -223,25 +223,25 @@ class IONotifyController: ...@@ -223,25 +223,25 @@ class IONotifyController:
return r; return r;
} }
}; };
typedef std::list<ThresholdInfoExt> ThresholdExtList; typedef std::list<ThresholdInfoExt> ThresholdExtList;
/*! массив пар датчик->список потребителей */ /*! массив пар датчик->список потребителей */
typedef std::map<UniSetTypes::KeyType,ConsumerList> AskMap; typedef std::map<UniSetTypes::KeyType,ConsumerList> AskMap;
struct ThresholdsListInfo struct ThresholdsListInfo
{ {
ThresholdsListInfo(){} ThresholdsListInfo(){}
ThresholdsListInfo( IOController_i::SensorInfo& si, ThresholdExtList& list, ThresholdsListInfo( IOController_i::SensorInfo& si, ThresholdExtList& list,
UniversalIO::IOType t=UniversalIO::AI ): UniversalIO::IOType t=UniversalIO::AI ):
si(si),type(t),list(list){} si(si),type(t),list(list){}
IOController_i::SensorInfo si; IOController_i::SensorInfo si;
IOStateList::iterator ait; IOStateList::iterator ait;
UniversalIO::IOType type; UniversalIO::IOType type;
ThresholdExtList list; ThresholdExtList list;
}; };
/*! массив пар [датчик,список порогов] */ /*! массив пар [датчик,список порогов] */
typedef std::map<UniSetTypes::KeyType,ThresholdsListInfo> AskThresholdMap; typedef std::map<UniSetTypes::KeyType,ThresholdsListInfo> AskThresholdMap;
...@@ -257,16 +257,16 @@ class IONotifyController: ...@@ -257,16 +257,16 @@ class IONotifyController:
virtual void send(ConsumerList& lst, UniSetTypes::SensorMessage& sm); virtual void send(ConsumerList& lst, UniSetTypes::SensorMessage& sm);
//! проверка срабатывания пороговых датчиков //! проверка срабатывания пороговых датчиков
virtual void checkThreshold( IOStateList::iterator& li, virtual void checkThreshold( IOStateList::iterator& li,
const IOController_i::SensorInfo& si, bool send=true ); const IOController_i::SensorInfo& si, bool send=true );
//! поиск информации о пороговом датчике //! поиск информации о пороговом датчике
ThresholdExtList::iterator findThreshold( UniSetTypes::KeyType k, UniSetTypes::ThresholdId tid ); ThresholdExtList::iterator findThreshold( UniSetTypes::KeyType k, UniSetTypes::ThresholdId tid );
//! сохранение информации об изменении состояния датчика в базу //! сохранение информации об изменении состояния датчика в базу
virtual void loggingInfo(UniSetTypes::SensorMessage& sm); virtual void loggingInfo(UniSetTypes::SensorMessage& sm);
/*! сохранение списка заказчиков /*! сохранение списка заказчиков
По умолчанию делает dump, если объявлен dumper. По умолчанию делает dump, если объявлен dumper.
*/ */
virtual void dumpOrdersList(const IOController_i::SensorInfo& si, const IONotifyController::ConsumerList& lst); virtual void dumpOrdersList(const IOController_i::SensorInfo& si, const IONotifyController::ConsumerList& lst);
...@@ -292,10 +292,10 @@ class IONotifyController: ...@@ -292,10 +292,10 @@ class IONotifyController:
//---------------------- //----------------------
bool addConsumer(ConsumerList& lst, const UniSetTypes::ConsumerInfo& cons ); //!< добавить потребителя сообщения bool addConsumer(ConsumerList& lst, const UniSetTypes::ConsumerInfo& cons ); //!< добавить потребителя сообщения
bool removeConsumer(ConsumerList& lst, const UniSetTypes::ConsumerInfo& cons ); //!< удалить потребителя сообщения bool removeConsumer(ConsumerList& lst, const UniSetTypes::ConsumerInfo& cons ); //!< удалить потребителя сообщения
//! обработка заказа //! обработка заказа
void ask(AskMap& askLst, const IOController_i::SensorInfo& si, void ask(AskMap& askLst, const IOController_i::SensorInfo& si,
const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd); const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd);
/*! добавить новый порог для датчика */ /*! добавить новый порог для датчика */
bool addThreshold(ThresholdExtList& lst, ThresholdInfoExt& ti, const UniSetTypes::ConsumerInfo& cons); bool addThreshold(ThresholdExtList& lst, ThresholdInfoExt& ti, const UniSetTypes::ConsumerInfo& cons);
...@@ -305,14 +305,15 @@ class IONotifyController: ...@@ -305,14 +305,15 @@ class IONotifyController:
AskMap askIOList; /*!< список потребителей по аналоговым датчикам */ AskMap askIOList; /*!< список потребителей по аналоговым датчикам */
AskThresholdMap askTMap; /*!< список порогов по аналоговым датчикам */ AskThresholdMap askTMap; /*!< список порогов по аналоговым датчикам */
/*! замок для блокирования совместного доступа к cписку потребителей датчиков */ /*! замок для блокирования совместного доступа к cписку потребителей датчиков */
UniSetTypes::uniset_rwmutex askIOMutex; UniSetTypes::uniset_rwmutex askIOMutex;
/*! замок для блокирования совместного доступа к cписку потребителей пороговых датчиков */ /*! замок для блокирования совместного доступа к cписку потребителей пороговых датчиков */
UniSetTypes::uniset_rwmutex trshMutex; UniSetTypes::uniset_rwmutex trshMutex;
int maxAttemtps; /*! timeout for consumer */ int maxAttemtps; /*! timeout for consumer */
}; };
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
#endif #endif
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
...@@ -38,11 +38,11 @@ class IORFile ...@@ -38,11 +38,11 @@ class IORFile
IORFile(); IORFile();
std::string getIOR( const ObjectId id, const ObjectId node ); std::string getIOR( const ObjectId id, const ObjectId node );
void setIOR( const ObjectId id, const ObjectId node, const std::string sior ); void setIOR( const ObjectId id, const ObjectId node, const std::string& sior );
void unlinkIOR( const ObjectId id, const ObjectId node ); void unlinkIOR( const ObjectId id, const ObjectId node );
protected: protected:
std::string genFName( const ObjectId id, const ObjectId node); std::string genFName( const ObjectId id, const ObjectId node );
private: private:
}; };
......
...@@ -83,12 +83,12 @@ class Restorer_XML ...@@ -83,12 +83,12 @@ class Restorer_XML
/*! Установить фильтр на чтение списка датчиков /*! Установить фильтр на чтение списка датчиков
\note Функцию необходимо вызывать до вызова read(...) \note Функцию необходимо вызывать до вызова read(...)
*/ */
void setItemFilter( const std::string filterField, const std::string filterValue="" ); void setItemFilter( const std::string& filterField, const std::string& filterValue="" );
/*! Установить фильтр на чтение списка заказчиков (по каждому датчику) /*! Установить фильтр на чтение списка заказчиков (по каждому датчику)
\note Функцию необходимо вызывать до вызова read(...) \note Функцию необходимо вызывать до вызова read(...)
*/ */
void setConsumerFilter( const std::string filterField, const std::string filterValue="" ); void setConsumerFilter( const std::string& filterField, const std::string& filterValue="" );
/*! универсальная функция получения информации о заказчике (id и node) /*! универсальная функция получения информации о заказчике (id и node)
...@@ -108,7 +108,7 @@ class Restorer_XML ...@@ -108,7 +108,7 @@ class Restorer_XML
/*! Функция поиска по текущему уровню (без рекурсии для дочерних узлов) */ /*! Функция поиска по текущему уровню (без рекурсии для дочерних узлов) */
static xmlNode* find_node( UniXML& xml, xmlNode* root, const std::string& nodename, const std::string nm="" ); static xmlNode* find_node( UniXML& xml, xmlNode* root, const std::string& nodename, const std::string& nm="" );
protected: protected:
......
...@@ -35,7 +35,7 @@ class SViewer ...@@ -35,7 +35,7 @@ class SViewer
{ {
public: public:
SViewer(const std::string ControllersSection, bool isShort=true); SViewer(const std::string& ControllersSection, bool isShort=true);
virtual ~SViewer(); virtual ~SViewer();
void view(); void view();
...@@ -45,7 +45,7 @@ class SViewer ...@@ -45,7 +45,7 @@ class SViewer
friend class SViewer_glade; friend class SViewer_glade;
void on_SViewer_destroy(); void on_SViewer_destroy();
void readSection(const std::string sec, const std::string secRoot); void readSection(const std::string& sec, const std::string& secRoot);
void getInfo(UniSetTypes::ObjectId id); void getInfo(UniSetTypes::ObjectId id);
virtual void updateSensors( IOController_i::SensorInfoSeq_var& amap, UniSetTypes::ObjectId oid ); virtual void updateSensors( IOController_i::SensorInfoSeq_var& amap, UniSetTypes::ObjectId oid );
......
...@@ -196,11 +196,11 @@ class UInterface ...@@ -196,11 +196,11 @@ class UInterface
// Работа с ID, Name // Работа с ID, Name
/*! получение идентификатора объекта по имени */ /*! получение идентификатора объекта по имени */
inline UniSetTypes::ObjectId getIdByName(const char* name) inline UniSetTypes::ObjectId getIdByName( const char* name )
{ {
return oind->getIdByName(name); return oind->getIdByName(name);
} }
inline UniSetTypes::ObjectId getIdByName(const string name) inline UniSetTypes::ObjectId getIdByName( const std::string& name )
{ {
return getIdByName(name.c_str()); return getIdByName(name.c_str());
} }
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
/*! \file /*! \file
* \author Pavel Vainerman * \author Pavel Vainerman
* \brief базовые типы и вспомогательные функции библиотеки UniSet * \brief базовые типы и вспомогательные функции библиотеки UniSet
*/ */
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
#ifndef UniSetTypes_H_ #ifndef UniSetTypes_H_
...@@ -56,15 +56,15 @@ namespace UniSetTypes ...@@ -56,15 +56,15 @@ namespace UniSetTypes
const ThresholdId DefaultTimerId = -1; /*!< идентификатор таймера по умолчанию */ const ThresholdId DefaultTimerId = -1; /*!< идентификатор таймера по умолчанию */
typedef long KeyType; /*!< уникальный ключ объекта */ typedef long KeyType; /*!< уникальный ключ объекта */
/*! генератор уникального положительного ключа /*! генератор уникального положительного ключа
* Уникальность гарантируется только для пары значений * Уникальность гарантируется только для пары значений
* id и node. * id и node.
* \warning что тут у нас с переполнением.. * \warning что тут у нас с переполнением..
* \warning Уникальность генерируемого ключа еще не проверялась, * \warning Уникальность генерируемого ключа еще не проверялась,
но нареканий по использованию тоже не было :) но нареканий по использованию тоже не было :)
* \todo Желательно продумать что-нибудь с использованием хэш. * \todo Желательно продумать что-нибудь с использованием хэш.
*/ */
inline static KeyType key( const UniSetTypes::ObjectId id, const UniSetTypes::ObjectId node ) inline static KeyType key( const UniSetTypes::ObjectId id, const UniSetTypes::ObjectId node )
{ {
return KeyType((id*node)+(id+2*node)); return KeyType((id*node)+(id+2*node));
...@@ -84,7 +84,7 @@ namespace UniSetTypes ...@@ -84,7 +84,7 @@ namespace UniSetTypes
/*! Функция делает ObjectType из const char * (переводит const-строку в обычную, что плохо, но мы обещаем не писать в неё :) ) */ /*! Функция делает ObjectType из const char * (переводит const-строку в обычную, что плохо, но мы обещаем не писать в неё :) ) */
inline static UniSetTypes::ObjectType getObjectType(const char * name) { const void *t = name; return (UniSetTypes::ObjectType)t; } inline static UniSetTypes::ObjectType getObjectType(const char * name) { const void *t = name; return (UniSetTypes::ObjectType)t; }
UniversalIO::IOType getIOType( const std::string s ); UniversalIO::IOType getIOType( const std::string& s );
std::ostream& operator<<( std::ostream& os, const UniversalIO::IOType t ); std::ostream& operator<<( std::ostream& os, const UniversalIO::IOType t );
/*! Команды для управления лампочками */ /*! Команды для управления лампочками */
...@@ -101,26 +101,26 @@ namespace UniSetTypes ...@@ -101,26 +101,26 @@ namespace UniSetTypes
class IDList class IDList
{ {
public: public:
IDList(); IDList();
~IDList(); ~IDList();
void add( ObjectId id ); void add( ObjectId id );
void del( ObjectId id ); void del( ObjectId id );
inline int size(){ return lst.size(); } inline int size(){ return lst.size(); }
inline bool empty(){ return lst.empty(); } inline bool empty(){ return lst.empty(); }
std::list<ObjectId> getList(); std::list<ObjectId> getList();
// за освобождение выделеной памяти // за освобождение выделеной памяти
// отвечает вызывающий! // отвечает вызывающий!
IDSeq* getIDSeq(); IDSeq* getIDSeq();
// //
ObjectId getFirst(); ObjectId getFirst();
ObjectId node; // узел, на котором находятся датчики ObjectId node; // узел, на котором находятся датчики
private: private:
std::list<ObjectId> lst; std::list<ObjectId> lst;
}; };
...@@ -136,13 +136,13 @@ namespace UniSetTypes ...@@ -136,13 +136,13 @@ namespace UniSetTypes
char* repName; /*!< текстовое имя для регистрации в репозитории */ char* repName; /*!< текстовое имя для регистрации в репозитории */
char* textName; /*!< текстовое имя */ char* textName; /*!< текстовое имя */
void* data; void* data;
inline bool operator < ( const ObjectInfo& o ) const inline bool operator < ( const ObjectInfo& o ) const
{ {
return (id < o.id); return (id < o.id);
} }
}; };
typedef std::list<NodeInfo> ListOfNode; typedef std::list<NodeInfo> ListOfNode;
/*! Запрещенные для использования в именах объектов символы */ /*! Запрещенные для использования в именах объектов символы */
...@@ -160,43 +160,43 @@ namespace UniSetTypes ...@@ -160,43 +160,43 @@ namespace UniSetTypes
std::sscanf(str, "%i", &n); std::sscanf(str, "%i", &n);
return n; return n;
} }
inline int uni_atoi( const std::string str ) inline int uni_atoi( const std::string& str )
{ {
return uni_atoi(str.c_str()); return uni_atoi(str.c_str());
} }
std::string timeToString(time_t tm=time(0), const std::string brk=":"); /*!< Преобразование времени в строку HH:MM:SS */ std::string timeToString(time_t tm=time(0), const std::string& brk=":"); /*!< Преобразование времени в строку HH:MM:SS */
std::string dateToString(time_t tm=time(0), const std::string brk="/"); /*!< Преобразование даты в строку DD/MM/YYYY */ std::string dateToString(time_t tm=time(0), const std::string& brk="/"); /*!< Преобразование даты в строку DD/MM/YYYY */
/*! Разбивка строки по указанному символу */ /*! Разбивка строки по указанному символу */
IDList explode( const std::string str, char sep=',' ); IDList explode( const std::string& str, char sep=',' );
std::list<std::string> explode_str( const std::string str, char sep=',' ); std::list<std::string> explode_str( const std::string& str, char sep=',' );
struct ParamSInfo struct ParamSInfo
{ {
IOController_i::SensorInfo si; IOController_i::SensorInfo si;
long val; long val;
std::string fname; // fullname id@node or id std::string fname; // fullname id@node or id
}; };
/*! Функция разбора строки вида: id1@node1=val1,id2@node2=val2,... /*! Функция разбора строки вида: id1@node1=val1,id2@node2=val2,...
Если '=' не указано, возвращается val=0 Если '=' не указано, возвращается val=0
Если @node не указано, возвращается node=DefaultObjectId */ Если @node не указано, возвращается node=DefaultObjectId */
std::list<ParamSInfo> getSInfoList( std::string s, Configuration* conf=UniSetTypes::conf); std::list<ParamSInfo> getSInfoList( const std::string& s, Configuration* conf=UniSetTypes::conf );
/*! проверка является текст в строке - числом..*/ /*! проверка является текст в строке - числом..*/
bool is_digit( const std::string s ); bool is_digit( const std::string& s );
// --------------------------------------------------------------- // ---------------------------------------------------------------
// Работа с командной строкой // Работа с командной строкой
/*! Получение параметра командной строки /*! Получение параметра командной строки
\param name - название параметра \param name - название параметра
\param defval - значение, которое будет возвращено, если параметр не найден \param defval - значение, которое будет возвращено, если параметр не найден
*/ */
inline std::string getArgParam( const std::string name, inline std::string getArgParam( const std::string& name,
int _argc, const char* const* _argv, int _argc, const char* const* _argv,
const std::string defval="" ) const std::string& defval="" )
{ {
for( int i=1; i < (_argc - 1) ; i++ ) for( int i=1; i < (_argc - 1) ; i++ )
{ {
...@@ -206,7 +206,7 @@ namespace UniSetTypes ...@@ -206,7 +206,7 @@ namespace UniSetTypes
return defval; return defval;
} }
inline int getArgInt( const std::string name, inline int getArgInt( const std::string& name,
int _argc, const char* const* _argv, int _argc, const char* const* _argv,
const std::string defval="" ) const std::string defval="" )
{ {
...@@ -215,10 +215,10 @@ namespace UniSetTypes ...@@ -215,10 +215,10 @@ namespace UniSetTypes
/*! Проверка наличия параметра в командной строке /*! Проверка наличия параметра в командной строке
\param name - название параметра \param name - название параметра
\return Возвращает -1, если параметр не найден. \return Возвращает -1, если параметр не найден.
Или позицию параметра, если найден. Или позицию параметра, если найден.
*/ */
inline int findArgParam( const std::string name, int _argc, const char* const* _argv ) inline int findArgParam( const std::string& name, int _argc, const char* const* _argv )
{ {
for( int i=1; i<_argc; i++ ) for( int i=1; i<_argc; i++ )
{ {
...@@ -239,7 +239,7 @@ namespace UniSetTypes ...@@ -239,7 +239,7 @@ namespace UniSetTypes
// rawMax - максимальная граница исходного диапазона // rawMax - максимальная граница исходного диапазона
// calMin - минимальная граница калиброванного диапазона // calMin - минимальная граница калиброванного диапазона
// calMin - минимальная граница калиброванного диапазона // calMin - минимальная граница калиброванного диапазона
// limit - обрезать итоговое значение по границам // limit - обрезать итоговое значение по границам
float fcalibrate(float raw, float rawMin, float rawMax, float calMin, float calMax, bool limit=true ); float fcalibrate(float raw, float rawMin, float rawMax, float calMin, float calMax, bool limit=true );
long lcalibrate(long raw, long rawMin, long rawMax, long calMin, long calMax, bool limit=true ); long lcalibrate(long raw, long rawMin, long rawMax, long calMin, long calMax, bool limit=true );
...@@ -251,11 +251,11 @@ namespace UniSetTypes ...@@ -251,11 +251,11 @@ namespace UniSetTypes
// --------------------------------------------------------------- // ---------------------------------------------------------------
// Всякие helper-ы // Всякие helper-ы
bool file_exist( const std::string filename ); bool file_exist( const std::string& filename );
// Проверка xml-узла на соответствие <...f_prop="f_val">, // Проверка xml-узла на соответствие <...f_prop="f_val">,
// если не задано f_val, то проверяется, что просто f_prop!="" // если не задано f_val, то проверяется, что просто f_prop!=""
bool check_filter( UniXML_iterator& it, const std::string f_prop, const std::string f_val="" ); bool check_filter( UniXML_iterator& it, const std::string& f_prop, const std::string& f_val="" );
/*! алгоритм копирования элементов последовательности удовлетворяющих условию */ /*! алгоритм копирования элементов последовательности удовлетворяющих условию */
template<typename InputIterator, template<typename InputIterator,
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
class WDTInterface class WDTInterface
{ {
public: public:
WDTInterface(const std::string dev); WDTInterface(const std::string& dev);
~WDTInterface(); ~WDTInterface();
bool ping(); bool ping();
......
...@@ -143,7 +143,7 @@ class ModbusClient ...@@ -143,7 +143,7 @@ class ModbusClient
/*! установить паузу при ожидании символа */ /*! установить паузу при ожидании символа */
inline void setSleepPause( timeout_t usec ){ sleepPause_usec = usec; } inline void setSleepPause( timeout_t usec ){ sleepPause_usec = usec; }
void initLog( UniSetTypes::Configuration* conf, const std::string name, const std::string logfile="" ); void initLog( UniSetTypes::Configuration* conf, const std::string& name, const std::string& logfile="" );
void setLog( DebugStream& dlog ); void setLog( DebugStream& dlog );
......
...@@ -20,13 +20,13 @@ class ModbusRTUMaster: ...@@ -20,13 +20,13 @@ class ModbusRTUMaster:
public: public:
ModbusRTUMaster( ComPort* com ); ModbusRTUMaster( ComPort* com );
ModbusRTUMaster( const std::string dev, bool use485=false, bool tr_ctl=false ); ModbusRTUMaster( const std::string& dev, bool use485=false, bool tr_ctl=false );
virtual ~ModbusRTUMaster(); virtual ~ModbusRTUMaster();
virtual void cleanupChannel(){ if( port ) port->cleanupChannel(); } virtual void cleanupChannel(){ if( port ) port->cleanupChannel(); }
void setSpeed( ComPort::Speed s ); void setSpeed( ComPort::Speed s );
void setSpeed( const std::string s ); void setSpeed( const std::string& s );
ComPort::Speed getSpeed(); ComPort::Speed getSpeed();
void setParity( ComPort::Parity parity ); void setParity( ComPort::Parity parity );
......
...@@ -18,7 +18,7 @@ class ModbusRTUSlaveSlot: ...@@ -18,7 +18,7 @@ class ModbusRTUSlaveSlot:
{ {
public: public:
ModbusRTUSlaveSlot( ComPort* com ); ModbusRTUSlaveSlot( ComPort* com );
ModbusRTUSlaveSlot( const std::string dev, bool use485=false, bool tr_ctl=false ); ModbusRTUSlaveSlot( const std::string& dev, bool use485=false, bool tr_ctl=false );
virtual ~ModbusRTUSlaveSlot(); virtual ~ModbusRTUSlaveSlot();
virtual void sigterm( int signo ); virtual void sigterm( int signo );
......
...@@ -17,11 +17,11 @@ class ModbusServer ...@@ -17,11 +17,11 @@ class ModbusServer
ModbusServer(); ModbusServer();
virtual ~ModbusServer(); virtual ~ModbusServer();
void initLog( UniSetTypes::Configuration* conf, const std::string name, const std::string logfile="" ); void initLog( UniSetTypes::Configuration* conf, const std::string& name, const std::string& logfile="" );
void setLog( DebugStream& dlog ); void setLog( DebugStream& dlog );
/*! обработать очередное сообщение /*! обработать очередное сообщение
\param addr - адрес для которого принимать сообщения \param addr - адрес для которого принимать сообщения
\param msecTimeout - время ожидания прихода очередного сообщения в мсек. \param msecTimeout - время ожидания прихода очередного сообщения в мсек.
\return Возвращает код ошибки из ModbusRTU::mbErrCode \return Возвращает код ошибки из ModbusRTU::mbErrCode
...@@ -29,7 +29,7 @@ class ModbusServer ...@@ -29,7 +29,7 @@ class ModbusServer
virtual ModbusRTU::mbErrCode receive( ModbusRTU::ModbusAddr addr, timeout_t msecTimeout )=0; virtual ModbusRTU::mbErrCode receive( ModbusRTU::ModbusAddr addr, timeout_t msecTimeout )=0;
/*! Установка паузы после посылки /*! Установка паузы после посылки
\return старое значение \return старое значение
*/ */
timeout_t setAfterSendPause( timeout_t msec ); timeout_t setAfterSendPause( timeout_t msec );
...@@ -57,18 +57,18 @@ class ModbusServer ...@@ -57,18 +57,18 @@ class ModbusServer
/*! Вспомогательная функция реализующая обработку запроса на установку времени. /*! Вспомогательная функция реализующая обработку запроса на установку времени.
Основана на использовании gettimeofday и settimeofday. Основана на использовании gettimeofday и settimeofday.
*/ */
static ModbusRTU::mbErrCode replySetDateTime( ModbusRTU::SetDateTimeMessage& query, static ModbusRTU::mbErrCode replySetDateTime( ModbusRTU::SetDateTimeMessage& query,
ModbusRTU::SetDateTimeRetMessage& reply, ModbusRTU::SetDateTimeRetMessage& reply,
DebugStream* dlog=0 ); DebugStream* dlog=0 );
/*! Вспомогательная функция реализующая обработку передачи файла /*! Вспомогательная функция реализующая обработку передачи файла
\param fname - запрашиваемый файл. \param fname - запрашиваемый файл.
\param query - запрос \param query - запрос
\param reply - ответ \param reply - ответ
*/ */
static ModbusRTU::mbErrCode replyFileTransfer( const std::string fname, static ModbusRTU::mbErrCode replyFileTransfer( const std::string& fname,
ModbusRTU::FileTransferMessage& query, ModbusRTU::FileTransferMessage& query,
ModbusRTU::FileTransferRetMessage& reply, ModbusRTU::FileTransferRetMessage& reply,
DebugStream* dlog=0 ); DebugStream* dlog=0 );
...@@ -82,22 +82,22 @@ class ModbusServer ...@@ -82,22 +82,22 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query, virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query,
ModbusRTU::ReadCoilRetMessage& reply )=0; ModbusRTU::ReadCoilRetMessage& reply )=0;
/*! Обработка запроса на чтение данных (0x02). /*! Обработка запроса на чтение данных (0x02).
\param query - запрос \param query - запрос
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query, virtual ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query,
ModbusRTU::ReadInputStatusRetMessage& reply )=0; ModbusRTU::ReadInputStatusRetMessage& reply )=0;
/*! Обработка запроса на чтение данных (0x03). /*! Обработка запроса на чтение данных (0x03).
\param query - запрос \param query - запрос
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query, virtual ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query,
ModbusRTU::ReadOutputRetMessage& reply )=0; ModbusRTU::ReadOutputRetMessage& reply )=0;
/*! Обработка запроса на чтение данных (0x04). /*! Обработка запроса на чтение данных (0x04).
...@@ -105,7 +105,7 @@ class ModbusServer ...@@ -105,7 +105,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query, virtual ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query,
ModbusRTU::ReadInputRetMessage& reply )=0; ModbusRTU::ReadInputRetMessage& reply )=0;
/*! Обработка запроса на запись данных (0x05). /*! Обработка запроса на запись данных (0x05).
...@@ -113,7 +113,7 @@ class ModbusServer ...@@ -113,7 +113,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query, virtual ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query,
ModbusRTU::ForceSingleCoilRetMessage& reply )=0; ModbusRTU::ForceSingleCoilRetMessage& reply )=0;
...@@ -122,7 +122,7 @@ class ModbusServer ...@@ -122,7 +122,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query, virtual ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query,
ModbusRTU::WriteSingleOutputRetMessage& reply )=0; ModbusRTU::WriteSingleOutputRetMessage& reply )=0;
/*! Обработка запроса на запись данных (0x0F). /*! Обработка запроса на запись данных (0x0F).
...@@ -130,7 +130,7 @@ class ModbusServer ...@@ -130,7 +130,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query, virtual ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query,
ModbusRTU::ForceCoilsRetMessage& reply )=0; ModbusRTU::ForceCoilsRetMessage& reply )=0;
/*! Обработка запроса на запись данных (0x10). /*! Обработка запроса на запись данных (0x10).
...@@ -138,16 +138,16 @@ class ModbusServer ...@@ -138,16 +138,16 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query, virtual ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query,
ModbusRTU::WriteOutputRetMessage& reply )=0; ModbusRTU::WriteOutputRetMessage& reply )=0;
/*! Обработка запроса на запись данных (0x08). /*! Обработка запроса на запись данных (0x08).
\param query - запрос \param query - запрос
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query, virtual ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query,
ModbusRTU::DiagnosticRetMessage& reply )=0; ModbusRTU::DiagnosticRetMessage& reply )=0;
/*! Обработка запроса 43(0x2B). /*! Обработка запроса 43(0x2B).
...@@ -155,7 +155,7 @@ class ModbusServer ...@@ -155,7 +155,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query, virtual ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query,
ModbusRTU::MEIMessageRetRDI& reply )=0; ModbusRTU::MEIMessageRetRDI& reply )=0;
...@@ -164,7 +164,7 @@ class ModbusServer ...@@ -164,7 +164,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query, virtual ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query,
ModbusRTU::JournalCommandRetMessage& reply )=0; ModbusRTU::JournalCommandRetMessage& reply )=0;
...@@ -173,7 +173,7 @@ class ModbusServer ...@@ -173,7 +173,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query, virtual ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query,
ModbusRTU::SetDateTimeRetMessage& reply )=0; ModbusRTU::SetDateTimeRetMessage& reply )=0;
...@@ -182,7 +182,7 @@ class ModbusServer ...@@ -182,7 +182,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query, virtual ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query,
ModbusRTU::RemoteServiceRetMessage& reply )=0; ModbusRTU::RemoteServiceRetMessage& reply )=0;
...@@ -191,19 +191,19 @@ class ModbusServer ...@@ -191,19 +191,19 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query, virtual ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query,
ModbusRTU::FileTransferRetMessage& reply )=0; ModbusRTU::FileTransferRetMessage& reply )=0;
/*! get next data block from channel ot recv buffer /*! get next data block from channel ot recv buffer
\param begin - get from position \param begin - get from position
\param buf - buffer for data \param buf - buffer for data
\param len - size of buf \param len - size of buf
\return real data lenght ( must be <= len ) \return real data lenght ( must be <= len )
*/ */
virtual int getNextData( unsigned char* buf, int len )=0; virtual int getNextData( unsigned char* buf, int len )=0;
virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, int len )=0; virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, int len )=0;
/*! set timeout for receive data */ /*! set timeout for receive data */
virtual void setChannelTimeout( timeout_t msec )=0; virtual void setChannelTimeout( timeout_t msec )=0;
......
...@@ -16,12 +16,12 @@ class ModbusTCPMaster: ...@@ -16,12 +16,12 @@ class ModbusTCPMaster:
ModbusTCPMaster(); ModbusTCPMaster();
virtual ~ModbusTCPMaster(); virtual ~ModbusTCPMaster();
void connect( const std::string addr, int port ); void connect( const std::string& addr, int port );
void connect( ost::InetAddress addr, int port ); void connect( ost::InetAddress addr, int port );
void disconnect(); void disconnect();
bool isConnection(); bool isConnection();
static bool checkConnection( const std::string ip, int port, int timeout_msec=100 ); static bool checkConnection( const std::string& ip, int port, int timeout_msec=100 );
inline void setForceDisconnect( bool s ) inline void setForceDisconnect( bool s )
{ {
......
...@@ -129,8 +129,8 @@ namespace ModbusRTU ...@@ -129,8 +129,8 @@ namespace ModbusRTU
/*! вывод сообщения */ /*! вывод сообщения */
std::ostream& mbPrintMessage( std::ostream& os, ModbusByte* b, int len ); std::ostream& mbPrintMessage( std::ostream& os, ModbusByte* b, int len );
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusAddr str2mbAddr( const std::string val ); ModbusAddr str2mbAddr( const std::string& val );
ModbusData str2mbData( const std::string val ); ModbusData str2mbData( const std::string& val );
std::string dat2str( const ModbusData dat ); std::string dat2str( const ModbusData dat );
std::string addr2str( const ModbusAddr addr ); std::string addr2str( const ModbusAddr addr );
std::string b2str( const ModbusByte b ); std::string b2str( const ModbusByte b );
...@@ -1082,7 +1082,7 @@ namespace ModbusRTU ...@@ -1082,7 +1082,7 @@ namespace ModbusRTU
struct RDIObjectInfo struct RDIObjectInfo
{ {
RDIObjectInfo():id(0),val(""){} RDIObjectInfo():id(0),val(""){}
RDIObjectInfo( ModbusByte id, const std::string v ):id(id),val(v){} RDIObjectInfo( ModbusByte id, const std::string& v ):id(id),val(v){}
RDIObjectInfo( ModbusByte id, ModbusByte* dat, ModbusByte len ); RDIObjectInfo( ModbusByte id, ModbusByte* dat, ModbusByte len );
ModbusByte id; ModbusByte id;
...@@ -1130,7 +1130,7 @@ namespace ModbusRTU ...@@ -1130,7 +1130,7 @@ namespace ModbusRTU
* \return TRUE - если удалось * \return TRUE - если удалось
* \return FALSE - если НЕ удалось * \return FALSE - если НЕ удалось
*/ */
bool addData( ModbusByte id, const std::string value ); bool addData( ModbusByte id, const std::string& value );
bool addData( RDIObjectInfo& dat ); bool addData( RDIObjectInfo& dat );
/*! очистка данных */ /*! очистка данных */
......
...@@ -35,7 +35,7 @@ ComPort::~ComPort() ...@@ -35,7 +35,7 @@ ComPort::~ComPort()
} }
} }
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
ComPort::ComPort( const string comDevice, bool nocreate ): ComPort::ComPort( const string& comDevice, bool nocreate ):
curSym(0), bufLength(0),fd(-1),uTimeout(10000), curSym(0), bufLength(0),fd(-1),uTimeout(10000),
waiting(true),dev(comDevice) waiting(true),dev(comDevice)
{ {
...@@ -53,12 +53,12 @@ void ComPort::openPort() ...@@ -53,12 +53,12 @@ void ComPort::openPort()
string strErr="Unable to open "+dev+" [Error: "+strerror(errno)+"]"; string strErr="Unable to open "+dev+" [Error: "+strerror(errno)+"]";
throw UniSetTypes::SystemError(strErr.c_str()); throw UniSetTypes::SystemError(strErr.c_str());
} }
/* Get the current options for the port */ /* Get the current options for the port */
tcgetattr(fd, &options); tcgetattr(fd, &options);
oldTermios=options; oldTermios=options;
cfsetispeed(&options, B19200); /* Set the baud rates to 19200 */ cfsetispeed(&options, B19200); /* Set the baud rates to 19200 */
cfsetospeed(&options, B19200); cfsetospeed(&options, B19200);
...@@ -93,7 +93,7 @@ void ComPort::reopen() ...@@ -93,7 +93,7 @@ void ComPort::reopen()
openPort(); openPort();
if( fd > 0 ) if( fd > 0 )
tcsetattr(fd, TCSAFLUSH, &options); tcsetattr(fd, TCSAFLUSH, &options);
} }
} }
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
void ComPort::setSpeed( Speed s ) void ComPort::setSpeed( Speed s )
...@@ -114,7 +114,7 @@ void ComPort::setParity(Parity parity) ...@@ -114,7 +114,7 @@ void ComPort::setParity(Parity parity)
struct termios options; struct termios options;
tcgetattr(fd, &options); tcgetattr(fd, &options);
switch(parity) switch(parity)
{ {
case Odd: case Odd:
...@@ -205,14 +205,14 @@ unsigned char ComPort::m_receiveByte( bool wait ) ...@@ -205,14 +205,14 @@ unsigned char ComPort::m_receiveByte( bool wait )
{ {
fd_set set; fd_set set;
timeval timeout; timeval timeout;
FD_ZERO (&set); FD_ZERO (&set);
FD_SET (fd, &set); FD_SET (fd, &set);
/* Initialize the timeout data structure. */ /* Initialize the timeout data structure. */
timeout.tv_sec = 0; timeout.tv_sec = 0;
timeout.tv_usec = uTimeout; timeout.tv_usec = uTimeout;
/* select' returns 0 if timeout, 1 if input available, -1 if error. */ /* select' returns 0 if timeout, 1 if input available, -1 if error. */
if(select(FD_SETSIZE, &set, NULL, NULL, &timeout)==1) if(select(FD_SETSIZE, &set, NULL, NULL, &timeout)==1)
...@@ -287,10 +287,10 @@ int ComPort::sendBlock(unsigned char* msg, int len) ...@@ -287,10 +287,10 @@ int ComPort::sendBlock(unsigned char* msg, int len)
int ComPort::receiveBlock(unsigned char* msg, int len) int ComPort::receiveBlock(unsigned char* msg, int len)
{ {
int k; int k;
if(!len) if(!len)
return 0; return 0;
for(k=0;k<len;k++) for(k=0;k<len;k++)
{ {
try try
...@@ -302,12 +302,12 @@ int ComPort::receiveBlock(unsigned char* msg, int len) ...@@ -302,12 +302,12 @@ int ComPort::receiveBlock(unsigned char* msg, int len)
break; break;
} }
} }
if(!k) if(!k)
{ {
throw UniSetTypes::TimeOut(); throw UniSetTypes::TimeOut();
} }
return k; return k;
} }
...@@ -346,7 +346,7 @@ void ComPort::cleanupChannel() ...@@ -346,7 +346,7 @@ void ComPort::cleanupChannel()
waiting = old_waiting; waiting = old_waiting;
} }
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
void ComPort::setSpeed( std::string s ) void ComPort::setSpeed( const std::string& s )
{ {
Speed sp=getSpeed(s); Speed sp=getSpeed(s);
if( sp != ComPort::ComSpeed0 ) if( sp != ComPort::ComSpeed0 )
...@@ -424,13 +424,13 @@ std::string ComPort::getSpeed( Speed s ) ...@@ -424,13 +424,13 @@ std::string ComPort::getSpeed( Speed s )
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
#define CHECK_SPEED(var,speed) \ #define CHECK_SPEED(var,speed) \
if( var == __STRING(speed) ) \ if( var == __STRING(speed) ) \
return ComPort::ComSpeed##speed; return ComPort::ComSpeed##speed;
ComPort::Speed ComPort::getSpeed( const string s ) ComPort::Speed ComPort::getSpeed( const string& s )
{ {
// см. ComPort.h // см. ComPort.h
// сперва самые вероятные // сперва самые вероятные
CHECK_SPEED(s,9600) CHECK_SPEED(s,9600)
CHECK_SPEED(s,19200) CHECK_SPEED(s,19200)
CHECK_SPEED(s,38400) CHECK_SPEED(s,38400)
...@@ -450,7 +450,7 @@ ComPort::Speed ComPort::getSpeed( const string s ) ...@@ -450,7 +450,7 @@ ComPort::Speed ComPort::getSpeed( const string s )
CHECK_SPEED(s,1800) CHECK_SPEED(s,1800)
CHECK_SPEED(s,2400) CHECK_SPEED(s,2400)
CHECK_SPEED(s,4800) CHECK_SPEED(s,4800)
CHECK_SPEED(s,230400) CHECK_SPEED(s,230400)
CHECK_SPEED(s,460800) CHECK_SPEED(s,460800)
CHECK_SPEED(s,500000) CHECK_SPEED(s,500000)
......
...@@ -199,7 +199,7 @@ SetDateTimeRetMessage ModbusClient::setDateTime( ModbusAddr addr, ModbusByte hou ...@@ -199,7 +199,7 @@ SetDateTimeRetMessage ModbusClient::setDateTime( ModbusAddr addr, ModbusByte hou
return SetDateTimeRetMessage(reply); return SetDateTimeRetMessage(reply);
throw mbException(res); throw mbException(res);
} }
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile, void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile,
const char* save2filename, timeout_t part_timeout_msec ) const char* save2filename, timeout_t part_timeout_msec )
...@@ -213,12 +213,12 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile, ...@@ -213,12 +213,12 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile,
if( fdsave == NULL ) if( fdsave == NULL )
{ {
if( dlog.is_warn() ) if( dlog.is_warn() )
dlog.warn() << "(fileTransfer): fopen '" dlog.warn() << "(fileTransfer): fopen '"
<< save2filename << "' with error: " << save2filename << "' with error: "
<< strerror(errno) << endl; << strerror(errno) << endl;
throw mbException(erHardwareError); throw mbException(erHardwareError);
} }
unsigned short maxpackets = 65535; unsigned short maxpackets = 65535;
unsigned short curpack = 0; unsigned short curpack = 0;
...@@ -227,12 +227,12 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile, ...@@ -227,12 +227,12 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile,
while( curpack < maxpackets && !ptTimeout.checkTime() ) while( curpack < maxpackets && !ptTimeout.checkTime() )
{ {
try try
{ {
FileTransferRetMessage ret = partOfFileTransfer( addr, numfile, curpack, part_timeout_msec ); FileTransferRetMessage ret = partOfFileTransfer( addr, numfile, curpack, part_timeout_msec );
if( ret.numfile != numfile ) if( ret.numfile != numfile )
{ {
if( dlog.is_warn() ) if( dlog.is_warn() )
dlog.warn() << "(fileTransfer): recv nfile=" << ret.numfile dlog.warn() << "(fileTransfer): recv nfile=" << ret.numfile
<< " !=numfile(" << numfile << ")" << endl; << " !=numfile(" << numfile << ")" << endl;
continue; continue;
} }
...@@ -240,25 +240,25 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile, ...@@ -240,25 +240,25 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile,
if( ret.packet != curpack ) if( ret.packet != curpack )
{ {
if( dlog.is_warn() ) if( dlog.is_warn() )
dlog.warn() << "(fileTransfer): recv npack=" << ret.packet dlog.warn() << "(fileTransfer): recv npack=" << ret.packet
<< " !=curpack(" << curpack << ")" << endl; << " !=curpack(" << curpack << ")" << endl;
continue; continue;
} }
maxpackets = ret.numpacks; maxpackets = ret.numpacks;
if( dlog.is_info() ) if( dlog.is_info() )
dlog.info() << "(fileTransfer): maxpackets=" dlog.info() << "(fileTransfer): maxpackets="
<< ret.numpacks << " curpack=" << curpack+1 << endl; << ret.numpacks << " curpack=" << curpack+1 << endl;
// save data... // save data...
if( fwrite(&ret.data,ret.dlen,1,fdsave) <= 0 ) if( fwrite(&ret.data,ret.dlen,1,fdsave) <= 0 )
{ {
if( dlog.is_warn() ) if( dlog.is_warn() )
dlog.warn() << "(fileTransfer): fwrite '" dlog.warn() << "(fileTransfer): fwrite '"
<< save2filename << "' with error: " << save2filename << "' with error: "
<< strerror(errno) << endl; << strerror(errno) << endl;
res = erHardwareError; res = erHardwareError;
break; break;
} }
...@@ -272,12 +272,12 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile, ...@@ -272,12 +272,12 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile,
continue; continue;
res = ex.err; res = ex.err;
break; break;
} }
} }
fclose(fdsave); fclose(fdsave);
if( curpack == maxpackets ) if( curpack == maxpackets )
return; return;
...@@ -285,7 +285,7 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile, ...@@ -285,7 +285,7 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile,
res = erTimeOut; res = erTimeOut;
throw mbException(res); throw mbException(res);
} }
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
FileTransferRetMessage ModbusClient::partOfFileTransfer( ModbusAddr addr, FileTransferRetMessage ModbusClient::partOfFileTransfer( ModbusAddr addr,
ModbusData idFile, ModbusData numpack, ModbusData idFile, ModbusData numpack,
...@@ -300,7 +300,7 @@ FileTransferRetMessage ModbusClient::partOfFileTransfer( ModbusAddr addr, ...@@ -300,7 +300,7 @@ FileTransferRetMessage ModbusClient::partOfFileTransfer( ModbusAddr addr,
return FileTransferRetMessage(reply); return FileTransferRetMessage(reply);
throw mbException(res); throw mbException(res);
} }
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc, mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc,
ModbusMessage& rbuf, timeout_t timeout ) ModbusMessage& rbuf, timeout_t timeout )
...@@ -314,7 +314,7 @@ mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc, ...@@ -314,7 +314,7 @@ mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc,
// предварительно чистим буфер // предварительно чистим буфер
memset(&rbuf,0,sizeof(rbuf)); memset(&rbuf,0,sizeof(rbuf));
int bcnt=0; // receive bytes count int bcnt=0; // receive bytes count
try try
{ {
bool begin = false; bool begin = false;
...@@ -326,14 +326,14 @@ mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc, ...@@ -326,14 +326,14 @@ mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc,
begin = true; begin = true;
break; break;
} }
usleep(sleepPause_usec); usleep(sleepPause_usec);
} }
if( !begin ) if( !begin )
return erTimeOut; return erTimeOut;
/*! \todo Подумать Может стоит всё-таки получать весь пакет, а проверять кому он адресован на уровне выше?! /*! \todo Подумать Может стоит всё-таки получать весь пакет, а проверять кому он адресован на уровне выше?!
// Lav: конечно стоит, нам же надо буфер чистить // Lav: конечно стоит, нам же надо буфер чистить
*/ */
// Проверка кому адресован пакет... // Проверка кому адресован пакет...
...@@ -363,7 +363,7 @@ mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc, ...@@ -363,7 +363,7 @@ mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc,
} }
return erTimeOut; return erTimeOut;
} }
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
...@@ -389,7 +389,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -389,7 +389,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
bcnt += k; bcnt += k;
rbuf.len = 0; rbuf.len = 0;
if( dlog.is_info() ) if( dlog.is_info() )
dlog.info() << "(recv): header: " << rbuf << endl; dlog.info() << "(recv): header: " << rbuf << endl;
...@@ -399,23 +399,23 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -399,23 +399,23 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
rbuf.len = ErrorRetMessage::szData(); rbuf.len = ErrorRetMessage::szData();
if( crcNoCheckit ) if( crcNoCheckit )
rbuf.len -= szCRC; rbuf.len -= szCRC;
int rlen = getNextData((unsigned char*)(&(rbuf.data)),rbuf.len); int rlen = getNextData((unsigned char*)(&(rbuf.data)),rbuf.len);
if( rlen < rbuf.len ) if( rlen < rbuf.len )
{ {
if( dlog.is_warn() ) if( dlog.is_warn() )
{ {
dlog.warn() << "(recv:Error): buf: " << rbuf << endl; dlog.warn() << "(recv:Error): buf: " << rbuf << endl;
dlog.warn() << "(recv:Error)(" << rbuf.func dlog.warn() << "(recv:Error)(" << rbuf.func
<< "): Получили данных меньше чем ждали...(recv=" << "): Получили данных меньше чем ждали...(recv="
<< rlen << " < wait=" << rbuf.len << ")" << endl; << rlen << " < wait=" << rbuf.len << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt+=rlen; bcnt+=rlen;
ErrorRetMessage em(rbuf); ErrorRetMessage em(rbuf);
if( !crcNoCheckit ) if( !crcNoCheckit )
{ {
...@@ -439,7 +439,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -439,7 +439,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
cleanupChannel(); cleanupChannel();
return erUnExpectedPacketType; return erUnExpectedPacketType;
} }
// Определяем тип сообщения // Определяем тип сообщения
switch( rbuf.func ) switch( rbuf.func )
{ {
...@@ -464,7 +464,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -464,7 +464,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( crcNoCheckit ) if( crcNoCheckit )
rbuf.len -= szCRC; rbuf.len -= szCRC;
break; break;
case fnWriteOutputRegisters: case fnWriteOutputRegisters:
rbuf.len = WriteOutputRetMessage::szData(); rbuf.len = WriteOutputRetMessage::szData();
if( crcNoCheckit ) if( crcNoCheckit )
...@@ -509,7 +509,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -509,7 +509,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
case fnRemoteService: case fnRemoteService:
rbuf.len = RemoteServiceMessage::szHead(); rbuf.len = RemoteServiceMessage::szHead();
break; break;
*/ */
default: default:
cleanupChannel(); cleanupChannel();
return erUnExpectedPacketType; return erUnExpectedPacketType;
...@@ -527,15 +527,15 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -527,15 +527,15 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() ) if( dlog.is_warn() )
{ {
dlog.warn() << "(recv): buf: " << rbuf << endl; dlog.warn() << "(recv): buf: " << rbuf << endl;
dlog.warn() << "(recv)(" << rbuf.func dlog.warn() << "(recv)(" << rbuf.func
<< "): Получили данных меньше чем ждали...(recv=" << "): Получили данных меньше чем ждали...(recv="
<< rlen << " < wait=" << rbuf.len << ")" << endl; << rlen << " < wait=" << rbuf.len << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt+=rlen; bcnt+=rlen;
// получаем остальное... // получаем остальное...
...@@ -545,9 +545,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -545,9 +545,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( crcNoCheckit ) if( crcNoCheckit )
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
...@@ -556,16 +556,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -556,16 +556,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() ) if( dlog.is_warn() )
{ {
dlog.warn() << "(0x01): buf: " << rbuf << endl; dlog.warn() << "(0x01): buf: " << rbuf << endl;
dlog.warn() << "(0x01)(" dlog.warn() << "(0x01)("
<< (int)rbuf.func << "):(fnReadCoilStatus) " << (int)rbuf.func << "):(fnReadCoilStatus) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -578,7 +578,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -578,7 +578,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -600,9 +600,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -600,9 +600,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( crcNoCheckit ) if( crcNoCheckit )
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
...@@ -611,16 +611,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -611,16 +611,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() ) if( dlog.is_warn() )
{ {
dlog.warn() << "(0x02): buf: " << rbuf << endl; dlog.warn() << "(0x02): buf: " << rbuf << endl;
dlog.warn() << "(0x02)(" dlog.warn() << "(0x02)("
<< (int)rbuf.func << "):(fnReadInputStatus) " << (int)rbuf.func << "):(fnReadInputStatus) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -628,12 +628,12 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -628,12 +628,12 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_info() ) if( dlog.is_info() )
dlog.info() << "(0x02)(fnReadInputStatus): recv buf: " << rbuf << endl; dlog.info() << "(0x02)(fnReadInputStatus): recv buf: " << rbuf << endl;
if( crcNoCheckit ) if( crcNoCheckit )
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -647,7 +647,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -647,7 +647,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erBadCheckSum; return erBadCheckSum;
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnReadInputRegisters ) else if( rbuf.func == fnReadInputRegisters )
{ {
...@@ -655,9 +655,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -655,9 +655,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( crcNoCheckit ) if( crcNoCheckit )
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
...@@ -666,16 +666,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -666,16 +666,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() ) if( dlog.is_warn() )
{ {
dlog.warn() << "(0x04): buf: " << rbuf << endl; dlog.warn() << "(0x04): buf: " << rbuf << endl;
dlog.warn() << "(0x04)(" dlog.warn() << "(0x04)("
<< (int)rbuf.func << "):(fnReadInputRegisters) " << (int)rbuf.func << "):(fnReadInputRegisters) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -688,7 +688,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -688,7 +688,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -709,9 +709,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -709,9 +709,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
int szDataLen = ReadOutputRetMessage::getDataLen(rbuf)+szCRC; int szDataLen = ReadOutputRetMessage::getDataLen(rbuf)+szCRC;
if( crcNoCheckit ) if( crcNoCheckit )
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
...@@ -720,16 +720,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -720,16 +720,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() ) if( dlog.is_warn() )
{ {
dlog.warn() << "(0x03): buf: " << rbuf << endl; dlog.warn() << "(0x03): buf: " << rbuf << endl;
dlog.warn() << "(0x03)(" dlog.warn() << "(0x03)("
<< (int)rbuf.func << "):(fnReadInputRegisters) " << (int)rbuf.func << "):(fnReadInputRegisters) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -742,7 +742,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -742,7 +742,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -770,7 +770,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -770,7 +770,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -796,7 +796,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -796,7 +796,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -822,7 +822,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -822,7 +822,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -848,7 +848,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -848,7 +848,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -868,9 +868,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -868,9 +868,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( crcNoCheckit ) if( crcNoCheckit )
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
...@@ -879,16 +879,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -879,16 +879,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() ) if( dlog.is_warn() )
{ {
dlog.warn() << "(0x08): buf: " << rbuf << endl; dlog.warn() << "(0x08): buf: " << rbuf << endl;
dlog.warn() << "(0x08)(" dlog.warn() << "(0x08)("
<< (int)rbuf.func << "):(fnDiagnostics) " << (int)rbuf.func << "):(fnDiagnostics) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -901,7 +901,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -901,7 +901,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -936,16 +936,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -936,16 +936,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() ) if( dlog.is_warn() )
{ {
dlog.warn() << "(0x2B/0x0E): buf: " << rbuf << endl; dlog.warn() << "(0x2B/0x0E): buf: " << rbuf << endl;
dlog.warn() << "(0x2B/0x0E)(" dlog.warn() << "(0x2B/0x0E)("
<< (int)rbuf.func << "):(fnMEI) " << (int)rbuf.func << "):(fnMEI) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
rlen += szDataLen; rlen += szDataLen;
bcnt += szDataLen; bcnt += szDataLen;
...@@ -958,12 +958,12 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -958,12 +958,12 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() ) if( dlog.is_warn() )
{ {
dlog.warn() << "(0x2B/0x0E): buf: " << rbuf << endl; dlog.warn() << "(0x2B/0x0E): buf: " << rbuf << endl;
dlog.warn() << "(0x2B/0x0E)(" dlog.warn() << "(0x2B/0x0E)("
<< (int)rbuf.func << "):(fnMEI) " << (int)rbuf.func << "):(fnMEI) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
...@@ -991,12 +991,12 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -991,12 +991,12 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() ) if( dlog.is_warn() )
{ {
dlog.warn() << "(0x2B/0x0E): buf: " << rbuf << endl; dlog.warn() << "(0x2B/0x0E): buf: " << rbuf << endl;
dlog.warn() << "(0x2B/0x0E)(" dlog.warn() << "(0x2B/0x0E)("
<< (int)rbuf.func << "):(fnMEI) " << (int)rbuf.func << "):(fnMEI) "
<< "(CRC): Получили данных меньше чем ждали...(" << "(CRC): Получили данных меньше чем ждали...("
<< rlen1 << " < " << szCRC << ")" << endl; << rlen1 << " < " << szCRC << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
...@@ -1010,7 +1010,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -1010,7 +1010,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
MEIMessageRetRDI mRDI(rbuf); MEIMessageRetRDI mRDI(rbuf);
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -1042,14 +1042,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -1042,14 +1042,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
ostringstream err; ostringstream err;
err << "(0x50): bad crc. calc.crc=" << dat2str(tcrc) err << "(0x50): bad crc. calc.crc=" << dat2str(tcrc)
<< " msg.crc=" << dat2str(mSet.crc); << " msg.crc=" << dat2str(mSet.crc);
dlog.warn() << err.str() << endl; if( dlog.is_warn() )
dlog.warn() << err.str() << endl;
return erBadCheckSum; return erBadCheckSum;
} }
} }
if( !mSet.checkFormat() ) if( !mSet.checkFormat() )
{ {
dlog.warn() << "(0x50): некорректные значения..." << endl; if( dlog.is_warn() )
dlog.warn() << "(0x50): некорректные значения..." << endl;
return erBadDataValue; // return erInvalidFormat; return erBadDataValue; // return erInvalidFormat;
} }
...@@ -1062,22 +1064,24 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -1062,22 +1064,24 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
{ {
rbuf.len = bcnt + rlen1 - szModbusHeader; rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x66): buf: " << rbuf << endl; if( dlog.is_warn() )
dlog.warn() << "(0x66)(" {
<< rbuf.func << "):(fnFileTransfer) " dlog.warn() << "(0x66): buf: " << rbuf << endl;
<< "Получили данных меньше чем ждали...(" dlog.warn() << "(0x66)("
<< rlen1 << " < " << szDataLen << ")" << endl; << rbuf.func << "):(fnFileTransfer) "
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -1089,7 +1093,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -1089,7 +1093,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -1098,7 +1102,8 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -1098,7 +1102,8 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
ostringstream err; ostringstream err;
err << "(0x66): bad crc. calc.crc=" << dat2str(tcrc) err << "(0x66): bad crc. calc.crc=" << dat2str(tcrc)
<< " msg.crc=" << dat2str(mFT.crc); << " msg.crc=" << dat2str(mFT.crc);
dlog.warn() << err.str() << endl; if( dlog.is_warn() )
dlog.warn() << err.str() << endl;
return erBadCheckSum; return erBadCheckSum;
} }
...@@ -1137,22 +1142,22 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -1137,22 +1142,22 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
{ {
rbuf.len = bcnt + rlen1 - szModbusHeader; rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x53): buf: " << rbuf << endl; dlog.warn() << "(0x53): buf: " << rbuf << endl;
dlog.warn() << "(0x53)(" dlog.warn() << "(0x53)("
<< rbuf.func << "):(fnWriteOutputRegisters) " << rbuf.func << "):(fnWriteOutputRegisters) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -1165,7 +1170,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -1165,7 +1170,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -1191,7 +1196,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -1191,7 +1196,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
} }
catch( mbException& ex ) catch( mbException& ex )
{ {
if( dlog.debugging(Debug::CRIT) ) if( dlog.is_crit() )
dlog.crit() << "(recv): " << ex << endl; dlog.crit() << "(recv): " << ex << endl;
return ex.err; return ex.err;
} }
...@@ -1201,7 +1206,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -1201,7 +1206,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
} }
catch( Exception& ex ) // SystemError catch( Exception& ex ) // SystemError
{ {
if( dlog.debugging(Debug::CRIT) ) if( dlog.is_crit() )
dlog.crit() << "(recv): " << ex << endl; dlog.crit() << "(recv): " << ex << endl;
return erHardwareError; return erHardwareError;
} }
...@@ -1231,12 +1236,14 @@ mbErrCode ModbusClient::send( ModbusMessage& msg ) ...@@ -1231,12 +1236,14 @@ mbErrCode ModbusClient::send( ModbusMessage& msg )
} }
catch( mbException& ex ) catch( mbException& ex )
{ {
dlog.crit() << "(send): " << ex << endl; if( dlog.is_crit() )
dlog.crit() << "(send): " << ex << endl;
return ex.err; return ex.err;
} }
catch( Exception& ex ) // SystemError catch( Exception& ex ) // SystemError
{ {
dlog.crit() << "(send): " << ex << endl; if( dlog.is_crit() )
dlog.crit() << "(send): " << ex << endl;
return erHardwareError; return erHardwareError;
} }
...@@ -1251,7 +1258,7 @@ mbErrCode ModbusClient::send( ModbusMessage& msg ) ...@@ -1251,7 +1258,7 @@ mbErrCode ModbusClient::send( ModbusMessage& msg )
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void ModbusClient::initLog( UniSetTypes::Configuration* conf, void ModbusClient::initLog( UniSetTypes::Configuration* conf,
const std::string lname, const string logfile ) const std::string& lname, const string& logfile )
{ {
conf->initDebug(dlog,lname); conf->initDebug(dlog,lname);
...@@ -1268,7 +1275,7 @@ void ModbusClient::printProcessingTime() ...@@ -1268,7 +1275,7 @@ void ModbusClient::printProcessingTime()
{ {
if( dlog.is_info() ) if( dlog.is_info() )
{ {
dlog.info() << "(processingTime): " dlog.info() << "(processingTime): "
<< tmProcessing.getCurrent() << " [мсек]" << endl; << tmProcessing.getCurrent() << " [мсек]" << endl;
} }
} }
......
...@@ -11,7 +11,7 @@ using namespace ModbusRTU; ...@@ -11,7 +11,7 @@ using namespace ModbusRTU;
using namespace UniSetTypes; using namespace UniSetTypes;
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusRTUMaster::ModbusRTUMaster( const string dev, bool use485, bool tr_ctl ): ModbusRTUMaster::ModbusRTUMaster( const string& dev, bool use485, bool tr_ctl ):
port(NULL), port(NULL),
myport(true) myport(true)
{ {
...@@ -67,7 +67,7 @@ void ModbusRTUMaster::setSpeed( ComPort::Speed s ) ...@@ -67,7 +67,7 @@ void ModbusRTUMaster::setSpeed( ComPort::Speed s )
port->setSpeed(s); port->setSpeed(s);
} }
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
void ModbusRTUMaster::setSpeed( const std::string s ) void ModbusRTUMaster::setSpeed( const std::string& s )
{ {
if( port != NULL ) if( port != NULL )
port->setSpeed(s); port->setSpeed(s);
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
using namespace ModbusRTU; using namespace ModbusRTU;
using namespace std; using namespace std;
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusRTUSlaveSlot::ModbusRTUSlaveSlot( const std::string dev, bool use485, bool tr_ctl ): ModbusRTUSlaveSlot::ModbusRTUSlaveSlot( const std::string& dev, bool use485, bool tr_ctl ):
ModbusRTUSlave(dev,use485,tr_ctl) ModbusRTUSlave(dev,use485,tr_ctl)
{ {
} }
......
...@@ -81,7 +81,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -81,7 +81,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( mRead.addr, mRead.func, res ); ErrorRetMessage em( mRead.addr, mRead.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
...@@ -113,7 +113,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -113,7 +113,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( mRead.addr, mRead.func, res ); ErrorRetMessage em( mRead.addr, mRead.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
...@@ -145,7 +145,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -145,7 +145,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( mRead.addr, mRead.func, res ); ErrorRetMessage em( mRead.addr, mRead.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
...@@ -177,7 +177,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -177,7 +177,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( mRead.addr, mRead.func, res ); ErrorRetMessage em( mRead.addr, mRead.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
...@@ -210,11 +210,11 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -210,11 +210,11 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( mWrite.addr, mWrite.func, res ); ErrorRetMessage em( mWrite.addr, mWrite.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
return res; return res;
} }
...@@ -243,11 +243,11 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -243,11 +243,11 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( mWrite.addr, mWrite.func, res ); ErrorRetMessage em( mWrite.addr, mWrite.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
return res; return res;
} }
...@@ -278,7 +278,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -278,7 +278,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
return res; return res;
} }
...@@ -309,7 +309,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -309,7 +309,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
return res; return res;
} }
...@@ -337,11 +337,11 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -337,11 +337,11 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( mWrite.addr, mWrite.func, res ); ErrorRetMessage em( mWrite.addr, mWrite.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
return res; return res;
} }
...@@ -370,11 +370,11 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -370,11 +370,11 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( mWrite.addr, mWrite.func, res ); ErrorRetMessage em( mWrite.addr, mWrite.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
return res; return res;
} }
...@@ -402,7 +402,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -402,7 +402,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( mJournal.addr, mJournal.func, res ); ErrorRetMessage em( mJournal.addr, mJournal.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
...@@ -433,7 +433,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -433,7 +433,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( mSet.addr, mSet.func, res ); ErrorRetMessage em( mSet.addr, mSet.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
...@@ -464,7 +464,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -464,7 +464,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( query.addr, query.func, res ); ErrorRetMessage em( query.addr, query.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
...@@ -495,7 +495,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -495,7 +495,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( query.addr, query.func, res ); ErrorRetMessage em( query.addr, query.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
...@@ -532,7 +532,7 @@ mbErrCode ModbusServer::recv( ModbusRTU::ModbusAddr addr, ModbusMessage& rbuf, t ...@@ -532,7 +532,7 @@ mbErrCode ModbusServer::recv( ModbusRTU::ModbusAddr addr, ModbusMessage& rbuf, t
// предварительно чистим буфер // предварительно чистим буфер
memset(&rbuf,0,sizeof(rbuf)); memset(&rbuf,0,sizeof(rbuf));
int bcnt=0; // receive bytes count int bcnt=0; // receive bytes count
try try
{ {
// wait byte = myaddr || byte = broadcast // wait byte = myaddr || byte = broadcast
...@@ -545,13 +545,13 @@ mbErrCode ModbusServer::recv( ModbusRTU::ModbusAddr addr, ModbusMessage& rbuf, t ...@@ -545,13 +545,13 @@ mbErrCode ModbusServer::recv( ModbusRTU::ModbusAddr addr, ModbusMessage& rbuf, t
begin = true; begin = true;
break; break;
} }
usleep(sleepPause_usec); usleep(sleepPause_usec);
} }
if( !begin ) if( !begin )
return erTimeOut; return erTimeOut;
/*! \todo Подумать Может стоит всё-таки получать весь пакет, а проверять кому он адресован на уровне выше?! /*! \todo Подумать Может стоит всё-таки получать весь пакет, а проверять кому он адресован на уровне выше?!
// Lav: конечно стоит, нам же надо буфер чистить // Lav: конечно стоит, нам же надо буфер чистить
*/ */
// Проверка кому адресован пакет... // Проверка кому адресован пакет...
...@@ -570,7 +570,7 @@ mbErrCode ModbusServer::recv( ModbusRTU::ModbusAddr addr, ModbusMessage& rbuf, t ...@@ -570,7 +570,7 @@ mbErrCode ModbusServer::recv( ModbusRTU::ModbusAddr addr, ModbusMessage& rbuf, t
} }
return recv_pdu(rbuf,timeout); return recv_pdu(rbuf,timeout);
} }
catch( UniSetTypes::TimeOut ) catch( UniSetTypes::TimeOut )
{ {
// cout << "(recv): catch TimeOut " << endl; // cout << "(recv): catch TimeOut " << endl;
...@@ -605,7 +605,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -605,7 +605,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
bcnt += k; bcnt += k;
rbuf.len = 0; rbuf.len = 0;
if( dlog.is_info() ) if( dlog.is_info() )
dlog.info() << "(recv): header: " << rbuf << endl; dlog.info() << "(recv): header: " << rbuf << endl;
...@@ -645,13 +645,13 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -645,13 +645,13 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
break; break;
case fnForceSingleCoil: case fnForceSingleCoil:
rbuf.len = ForceSingleCoilMessage::szHead(); rbuf.len = ForceSingleCoilMessage::szHead();
break; break;
case fnWriteOutputSingleRegister: case fnWriteOutputSingleRegister:
rbuf.len = WriteSingleOutputMessage::szHead(); rbuf.len = WriteSingleOutputMessage::szHead();
break; break;
case fnDiagnostics: case fnDiagnostics:
rbuf.len = DiagnosticMessage::szHead(); rbuf.len = DiagnosticMessage::szHead();
break; break;
...@@ -681,7 +681,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -681,7 +681,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( crcNoCheckit ) if( crcNoCheckit )
rbuf.len -= szCRC; rbuf.len -= szCRC;
break; break;
default: default:
cleanupChannel(); cleanupChannel();
return erUnExpectedPacketType; return erUnExpectedPacketType;
...@@ -698,14 +698,14 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -698,14 +698,14 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{ {
// rbuf.len = bcnt + rlen - szModbusHeader; // rbuf.len = bcnt + rlen - szModbusHeader;
dlog.warn() << "(recv): buf: " << rbuf << endl; dlog.warn() << "(recv): buf: " << rbuf << endl;
dlog.warn() << "(recv)(" << rbuf.func dlog.warn() << "(recv)(" << rbuf.func
<< "): Получили данных меньше чем ждали...(recv=" << "): Получили данных меньше чем ждали...(recv="
<< rlen << " < wait=" << (int)rbuf.len << ")" << endl; << rlen << " < wait=" << (int)rbuf.len << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt+=rlen; bcnt+=rlen;
// получаем остальное... // получаем остальное...
...@@ -815,16 +815,16 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -815,16 +815,16 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum; return erBadCheckSum;
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnForceMultipleCoils ) else if( rbuf.func == fnForceMultipleCoils )
{ {
int szDataLen = ForceCoilsMessage::getDataLen(rbuf)+szCRC; int szDataLen = ForceCoilsMessage::getDataLen(rbuf)+szCRC;
if( crcNoCheckit ) if( crcNoCheckit )
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
...@@ -833,15 +833,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -833,15 +833,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{ {
rbuf.len = bcnt + rlen1 - szModbusHeader; rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x0F): buf: " << rbuf << endl; dlog.warn() << "(0x0F): buf: " << rbuf << endl;
dlog.warn() << "(0x0F)(" dlog.warn() << "(0x0F)("
<< rbuf.func << "):(fnForceMultipleCoils) " << rbuf.func << "):(fnForceMultipleCoils) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -853,7 +853,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -853,7 +853,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( !crcNoCheckit ) if( !crcNoCheckit )
{ {
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -872,15 +872,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -872,15 +872,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{ {
if( dlog.is_warn() ) if( dlog.is_warn() )
{ {
dlog.warn() << "(0x0F): (" << rbuf.func dlog.warn() << "(0x0F): (" << rbuf.func
<< ")(fnForceMultipleCoils): " << ")(fnForceMultipleCoils): "
<< ": некорректный формат сообщения..." << endl; << ": некорректный формат сообщения..." << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnWriteOutputRegisters ) else if( rbuf.func == fnWriteOutputRegisters )
{ {
...@@ -888,9 +888,9 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -888,9 +888,9 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( crcNoCheckit ) if( crcNoCheckit )
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
...@@ -899,15 +899,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -899,15 +899,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{ {
rbuf.len = bcnt + rlen1 - szModbusHeader; rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x10): buf: " << rbuf << endl; dlog.warn() << "(0x10): buf: " << rbuf << endl;
dlog.warn() << "(0x10)(" dlog.warn() << "(0x10)("
<< rbuf.func << "):(fnWriteOutputRegisters) " << rbuf.func << "):(fnWriteOutputRegisters) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -919,7 +919,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -919,7 +919,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( !crcNoCheckit ) if( !crcNoCheckit )
{ {
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -936,17 +936,17 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -936,17 +936,17 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum; return erBadCheckSum;
} }
} }
if( !mWrite.checkFormat() ) if( !mWrite.checkFormat() )
{ {
dlog.warn() << "(0x10): (" << rbuf.func dlog.warn() << "(0x10): (" << rbuf.func
<< ")(fnWriteOutputRegisters): " << ")(fnWriteOutputRegisters): "
<< ": некорректный формат сообщения..." << endl; << ": некорректный формат сообщения..." << endl;
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnForceSingleCoil ) else if( rbuf.func == fnForceSingleCoil )
{ {
...@@ -954,9 +954,9 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -954,9 +954,9 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( crcNoCheckit ) if( crcNoCheckit )
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
...@@ -965,15 +965,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -965,15 +965,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{ {
rbuf.len = bcnt + rlen1 - szModbusHeader; rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x05): buf: " << rbuf << endl; dlog.warn() << "(0x05): buf: " << rbuf << endl;
dlog.warn() << "(0x05)(" dlog.warn() << "(0x05)("
<< rbuf.func << "):(fnForceSingleCoil) " << rbuf.func << "):(fnForceSingleCoil) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -985,7 +985,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -985,7 +985,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( !crcNoCheckit ) if( !crcNoCheckit )
{ {
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -1002,17 +1002,17 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1002,17 +1002,17 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum; return erBadCheckSum;
} }
} }
if( !mWrite.checkFormat() ) if( !mWrite.checkFormat() )
{ {
dlog.warn() << "(0x05): (" << rbuf.func dlog.warn() << "(0x05): (" << rbuf.func
<< ")(fnForceSingleCoil): " << ")(fnForceSingleCoil): "
<< ": некорректный формат сообщения..." << endl; << ": некорректный формат сообщения..." << endl;
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnWriteOutputSingleRegister ) else if( rbuf.func == fnWriteOutputSingleRegister )
{ {
...@@ -1020,9 +1020,9 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1020,9 +1020,9 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( crcNoCheckit ) if( crcNoCheckit )
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
...@@ -1031,15 +1031,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1031,15 +1031,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{ {
rbuf.len = bcnt + rlen1 - szModbusHeader; rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x06): buf: " << rbuf << endl; dlog.warn() << "(0x06): buf: " << rbuf << endl;
dlog.warn() << "(0x06)(" dlog.warn() << "(0x06)("
<< rbuf.func << "):(fnWriteOutputSingleRegisters) " << rbuf.func << "):(fnWriteOutputSingleRegisters) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -1051,7 +1051,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1051,7 +1051,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( !crcNoCheckit ) if( !crcNoCheckit )
{ {
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -1071,14 +1071,14 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1071,14 +1071,14 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( !mWrite.checkFormat() ) if( !mWrite.checkFormat() )
{ {
dlog.warn() << "(0x06): (" << rbuf.func dlog.warn() << "(0x06): (" << rbuf.func
<< ")(fnWriteOutputSingleRegisters): " << ")(fnWriteOutputSingleRegisters): "
<< ": некорректный формат сообщения..." << endl; << ": некорректный формат сообщения..." << endl;
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnDiagnostics ) else if( rbuf.func == fnDiagnostics )
{ {
...@@ -1086,9 +1086,9 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1086,9 +1086,9 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( crcNoCheckit ) if( crcNoCheckit )
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
...@@ -1097,15 +1097,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1097,15 +1097,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{ {
rbuf.len = bcnt + rlen1 - szModbusHeader; rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x08): buf: " << rbuf << endl; dlog.warn() << "(0x08): buf: " << rbuf << endl;
dlog.warn() << "(0x08)(" dlog.warn() << "(0x08)("
<< rbuf.func << "):(fnDiagnostics) " << rbuf.func << "):(fnDiagnostics) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -1117,7 +1117,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1117,7 +1117,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( !crcNoCheckit ) if( !crcNoCheckit )
{ {
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -1134,12 +1134,12 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1134,12 +1134,12 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum; return erBadCheckSum;
} }
} }
/* /*
if( !mDiag.checkFormat() ) if( !mDiag.checkFormat() )
{ {
dlog.warn() << "(0x08): (" << rbuf.func dlog.warn() << "(0x08): (" << rbuf.func
<< ")(fnDiagnostics): " << ")(fnDiagnostics): "
<< ": некорректный формат сообщения..." << endl; << ": некорректный формат сообщения..." << endl;
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
...@@ -1157,15 +1157,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1157,15 +1157,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{ {
rbuf.len = bcnt + rlen1 - szModbusHeader; rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x2B/0x0E): buf: " << rbuf << endl; dlog.warn() << "(0x2B/0x0E): buf: " << rbuf << endl;
dlog.warn() << "(0x2B/0x0E)(" dlog.warn() << "(0x2B/0x0E)("
<< rbuf.func << "):(fnMEI) " << rbuf.func << "):(fnMEI) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szCRC << ")" << endl; << rlen1 << " < " << szCRC << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
} }
...@@ -1179,7 +1179,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1179,7 +1179,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -1197,7 +1197,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1197,7 +1197,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnJournalCommand ) else if( rbuf.func == fnJournalCommand )
{ {
JournalCommandMessage mRead(rbuf); JournalCommandMessage mRead(rbuf);
...@@ -1224,7 +1224,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1224,7 +1224,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum; return erBadCheckSum;
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnSetDateTime ) else if( rbuf.func == fnSetDateTime )
{ {
...@@ -1251,7 +1251,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1251,7 +1251,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum; return erBadCheckSum;
} }
} }
if( !mSet.checkFormat() ) if( !mSet.checkFormat() )
{ {
dlog.warn() << "(0x50): некорректные значения..." << endl; dlog.warn() << "(0x50): некорректные значения..." << endl;
...@@ -1259,7 +1259,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1259,7 +1259,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadDataValue; // return erInvalidFormat; return erBadDataValue; // return erInvalidFormat;
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnRemoteService ) else if( rbuf.func == fnRemoteService )
{ {
...@@ -1269,7 +1269,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1269,7 +1269,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
...@@ -1278,15 +1278,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1278,15 +1278,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{ {
rbuf.len = bcnt + rlen1 - szModbusHeader; rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x53): buf: " << rbuf << endl; dlog.warn() << "(0x53): buf: " << rbuf << endl;
dlog.warn() << "(0x53)(" dlog.warn() << "(0x53)("
<< rbuf.func << "):(fnWriteOutputRegisters) " << rbuf.func << "):(fnWriteOutputRegisters) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -1299,7 +1299,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1299,7 +1299,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -1316,7 +1316,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1316,7 +1316,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum; return erBadCheckSum;
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnFileTransfer ) else if( rbuf.func == fnFileTransfer )
{ {
...@@ -1328,7 +1328,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1328,7 +1328,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -1351,7 +1351,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1351,7 +1351,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{ {
// А как мы сюда добрались?!!!!!! // А как мы сюда добрались?!!!!!!
return erUnExpectedPacketType; return erUnExpectedPacketType;
} }
} }
catch( ModbusRTU::mbException& ex ) // SystemError catch( ModbusRTU::mbException& ex ) // SystemError
{ {
...@@ -1382,8 +1382,8 @@ void ModbusServer::setLog( DebugStream& l ) ...@@ -1382,8 +1382,8 @@ void ModbusServer::setLog( DebugStream& l )
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void ModbusServer::initLog( UniSetTypes::Configuration* conf, void ModbusServer::initLog( UniSetTypes::Configuration* conf,
const std::string lname, const string logfile ) const std::string& lname, const string& logfile )
{ {
conf->initDebug(dlog,lname); conf->initDebug(dlog,lname);
if( !logfile.empty() ) if( !logfile.empty() )
...@@ -1396,14 +1396,14 @@ void ModbusServer::printProcessingTime() ...@@ -1396,14 +1396,14 @@ void ModbusServer::printProcessingTime()
dlog.info() << "(processingTime): " << tmProcessing.getCurrent() << " [msec] (lim: " << tmProcessing.getInterval() << ")" << endl; dlog.info() << "(processingTime): " << tmProcessing.getCurrent() << " [msec] (lim: " << tmProcessing.getInterval() << ")" << endl;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string fname, ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string &fname,
ModbusRTU::FileTransferMessage& query, ModbusRTU::FileTransferMessage& query,
ModbusRTU::FileTransferRetMessage& reply, ModbusRTU::FileTransferRetMessage& reply,
DebugStream* dlog ) DebugStream* dlog )
{ {
if( dlog && dlog->is_info() ) if( dlog && dlog->is_info() )
(*dlog)[Debug::INFO] << "(replyFileTransfer): " << query << endl; (*dlog)[Debug::INFO] << "(replyFileTransfer): " << query << endl;
int fd = open(fname.c_str(), O_RDONLY | O_NONBLOCK ); int fd = open(fname.c_str(), O_RDONLY | O_NONBLOCK );
if( fd <= 0 ) if( fd <= 0 )
{ {
...@@ -1434,12 +1434,12 @@ ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string fname, ...@@ -1434,12 +1434,12 @@ ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string fname,
close(fd); close(fd);
return ModbusRTU::erOperationFailed; return ModbusRTU::erOperationFailed;
} }
close(fd); close(fd);
int numpacks = fs.st_size / ModbusRTU::FileTransferRetMessage::MaxDataLen; int numpacks = fs.st_size / ModbusRTU::FileTransferRetMessage::MaxDataLen;
if( fs.st_size % ModbusRTU::FileTransferRetMessage::MaxDataLen ) if( fs.st_size % ModbusRTU::FileTransferRetMessage::MaxDataLen )
numpacks++; numpacks++;
if( !reply.set(query.numfile,numpacks,query.numpacket,buf,ret) ) if( !reply.set(query.numfile,numpacks,query.numpacket,buf,ret) )
{ {
if( dlog && dlog->is_warn() ) if( dlog && dlog->is_warn() )
...@@ -1447,8 +1447,8 @@ ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string fname, ...@@ -1447,8 +1447,8 @@ ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string fname,
return ModbusRTU::erOperationFailed; return ModbusRTU::erOperationFailed;
} }
return ModbusRTU::erNoError; return ModbusRTU::erNoError;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusRTU::mbErrCode ModbusServer::replySetDateTime( ModbusRTU::SetDateTimeMessage& query, ModbusRTU::mbErrCode ModbusServer::replySetDateTime( ModbusRTU::SetDateTimeMessage& query,
ModbusRTU::SetDateTimeRetMessage& reply, ModbusRTU::SetDateTimeRetMessage& reply,
...@@ -1485,9 +1485,9 @@ ModbusRTU::mbErrCode ModbusServer::replySetDateTime( ModbusRTU::SetDateTimeMessa ...@@ -1485,9 +1485,9 @@ ModbusRTU::mbErrCode ModbusServer::replySetDateTime( ModbusRTU::SetDateTimeMessa
} }
else if( dlog && dlog->is_warn() ) else if( dlog && dlog->is_warn() )
(*dlog)[Debug::WARN] << "(replySetDateTime): gettimeofday err: " << strerror(errno) << endl; (*dlog)[Debug::WARN] << "(replySetDateTime): gettimeofday err: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed; return ModbusRTU::erOperationFailed;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
mbErrCode ModbusServer::send( ModbusMessage& msg ) mbErrCode ModbusServer::send( ModbusMessage& msg )
{ {
......
...@@ -271,7 +271,7 @@ void ModbusTCPMaster::cleanInputStream() ...@@ -271,7 +271,7 @@ void ModbusTCPMaster::cleanInputStream()
while( ret > 0); while( ret > 0);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
bool ModbusTCPMaster::checkConnection( const std::string ip, int port, int timeout_msec ) bool ModbusTCPMaster::checkConnection( const std::string& ip, int port, int timeout_msec )
{ {
try try
{ {
...@@ -334,7 +334,7 @@ void ModbusTCPMaster::reconnect() ...@@ -334,7 +334,7 @@ void ModbusTCPMaster::reconnect()
} }
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void ModbusTCPMaster::connect( const std::string addr, int port ) void ModbusTCPMaster::connect( const std::string& addr, int port )
{ {
ost::InetAddress ia(addr.c_str()); ost::InetAddress ia(addr.c_str());
connect(ia,port); connect(ia,port);
......
...@@ -2539,7 +2539,7 @@ MEIMessageRetRDI::MEIMessageRetRDI( ModbusAddr _addr, ModbusByte devID, ModbusBy ...@@ -2539,7 +2539,7 @@ MEIMessageRetRDI::MEIMessageRetRDI( ModbusAddr _addr, ModbusByte devID, ModbusBy
func = fnMEI; func = fnMEI;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
bool MEIMessageRetRDI::addData( ModbusByte id, const std::string val ) bool MEIMessageRetRDI::addData( ModbusByte id, const std::string& val )
{ {
if( isFull() ) if( isFull() )
return false; return false;
...@@ -2813,7 +2813,7 @@ float ModbusRTU::dat2f( const ModbusData dat1, const ModbusData dat2 ) ...@@ -2813,7 +2813,7 @@ float ModbusRTU::dat2f( const ModbusData dat1, const ModbusData dat2 )
return f; return f;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusAddr ModbusRTU::str2mbAddr( const std::string val ) ModbusAddr ModbusRTU::str2mbAddr( const std::string& val )
{ {
if( val.empty() ) if( val.empty() )
return 0; return 0;
...@@ -2821,7 +2821,7 @@ ModbusAddr ModbusRTU::str2mbAddr( const std::string val ) ...@@ -2821,7 +2821,7 @@ ModbusAddr ModbusRTU::str2mbAddr( const std::string val )
return (ModbusAddr)UniSetTypes::uni_atoi(val); return (ModbusAddr)UniSetTypes::uni_atoi(val);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusData ModbusRTU::str2mbData( const std::string val ) ModbusData ModbusRTU::str2mbData( const std::string& val )
{ {
if( val.empty() ) if( val.empty() )
return 0; return 0;
......
...@@ -1202,7 +1202,7 @@ bool UInterface::isExist( UniSetTypes::ObjectId id, UniSetTypes::ObjectId node ) ...@@ -1202,7 +1202,7 @@ bool UInterface::isExist( UniSetTypes::ObjectId id, UniSetTypes::ObjectId node )
return false; return false;
} }
// -------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------
string UInterface::set_err(const string& pre, UniSetTypes::ObjectId id, UniSetTypes::ObjectId node) string UInterface::set_err(const std::string& pre, UniSetTypes::ObjectId id, UniSetTypes::ObjectId node)
{ {
if( id==UniSetTypes::DefaultObjectId ) if( id==UniSetTypes::DefaultObjectId )
return string(pre+" DefaultObjectId"); return string(pre+" DefaultObjectId");
......
...@@ -47,7 +47,7 @@ string IORFile::getIOR( const ObjectId id, const ObjectId node ) ...@@ -47,7 +47,7 @@ string IORFile::getIOR( const ObjectId id, const ObjectId node )
return sior; return sior;
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
void IORFile::setIOR( const ObjectId id, const ObjectId node, const string sior ) void IORFile::setIOR( const ObjectId id, const ObjectId node, const string& sior )
{ {
string fname( genFName(id,node) ); string fname( genFName(id,node) );
ofstream ior_file(fname.c_str(), ios::out | ios::trunc); ofstream ior_file(fname.c_str(), ios::out | ios::trunc);
......
...@@ -31,7 +31,7 @@ using namespace std; ...@@ -31,7 +31,7 @@ using namespace std;
using namespace UniSetTypes; using namespace UniSetTypes;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
float UniSetTypes::fcalibrate( float raw, float rawMin, float rawMax, float UniSetTypes::fcalibrate( float raw, float rawMin, float rawMax,
float calMin, float calMax, bool limit ) float calMin, float calMax, bool limit )
{ {
if( rawMax == rawMin ) return 0; // деление на 0!!! if( rawMax == rawMin ) return 0; // деление на 0!!!
...@@ -52,7 +52,7 @@ using namespace UniSetTypes; ...@@ -52,7 +52,7 @@ using namespace UniSetTypes;
if( ret < calMax ) if( ret < calMax )
return calMax; return calMax;
} }
return ret; return ret;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -61,7 +61,7 @@ using namespace UniSetTypes; ...@@ -61,7 +61,7 @@ using namespace UniSetTypes;
{ {
if( rawMax == rawMin ) return 0; // деление на 0!!! if( rawMax == rawMin ) return 0; // деление на 0!!!
long ret = lroundf( (float)(raw - rawMin) * (float)(calMax - calMin) / long ret = lroundf( (float)(raw - rawMin) * (float)(calMax - calMin) /
(float)( rawMax - rawMin ) + calMin ); (float)( rawMax - rawMin ) + calMin );
if( !limit ) if( !limit )
...@@ -85,7 +85,7 @@ using namespace UniSetTypes; ...@@ -85,7 +85,7 @@ using namespace UniSetTypes;
if( ret < calMax ) if( ret < calMax )
return calMax; return calMax;
} }
return ret; return ret;
} }
...@@ -106,9 +106,9 @@ using namespace UniSetTypes; ...@@ -106,9 +106,9 @@ using namespace UniSetTypes;
UniSetTypes::IDList::IDList(): UniSetTypes::IDList::IDList():
node(UniSetTypes::conf->getLocalNode()) node(UniSetTypes::conf->getLocalNode())
{ {
} }
UniSetTypes::IDList::~IDList() UniSetTypes::IDList::~IDList()
{ {
} }
...@@ -120,11 +120,11 @@ using namespace UniSetTypes; ...@@ -120,11 +120,11 @@ using namespace UniSetTypes;
if( (*it) == id ) if( (*it) == id )
return; return;
} }
lst.push_back(id); lst.push_back(id);
} }
void UniSetTypes::IDList::del( ObjectId id ) void UniSetTypes::IDList::del( ObjectId id )
{ {
for( list<ObjectId>::iterator it=lst.begin(); it!=lst.end(); ++it ) for( list<ObjectId>::iterator it=lst.begin(); it!=lst.end(); ++it )
...@@ -146,7 +146,7 @@ using namespace UniSetTypes; ...@@ -146,7 +146,7 @@ using namespace UniSetTypes;
{ {
if( lst.empty() ) if( lst.empty() )
return UniSetTypes::DefaultObjectId; return UniSetTypes::DefaultObjectId;
return (*lst.begin()); return (*lst.begin());
} }
...@@ -159,18 +159,18 @@ using namespace UniSetTypes; ...@@ -159,18 +159,18 @@ using namespace UniSetTypes;
int i=0; int i=0;
for( list<ObjectId>::iterator it=lst.begin(); it!=lst.end(); ++it,i++ ) for( list<ObjectId>::iterator it=lst.begin(); it!=lst.end(); ++it,i++ )
(*seq)[i] = (*it); (*seq)[i] = (*it);
return seq; return seq;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
bool UniSetTypes::file_exist( const std::string filename ) bool UniSetTypes::file_exist( const std::string& filename )
{ {
std::ifstream file; std::ifstream file;
#ifdef HAVE_IOS_NOCREATE #ifdef HAVE_IOS_NOCREATE
file.open( filename.c_str(), std::ios::in | std::ios::nocreate ); file.open( filename.c_str(), std::ios::in | std::ios::nocreate );
#else #else
file.open( filename.c_str(), std::ios::in ); file.open( filename.c_str(), std::ios::in );
#endif #endif
bool result = false; bool result = false;
if( file ) if( file )
result = true; result = true;
...@@ -179,7 +179,7 @@ using namespace UniSetTypes; ...@@ -179,7 +179,7 @@ using namespace UniSetTypes;
return result; return result;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
UniSetTypes::IDList UniSetTypes::explode( const string str, char sep ) UniSetTypes::IDList UniSetTypes::explode( const string& str, char sep )
{ {
UniSetTypes::IDList l; UniSetTypes::IDList l;
...@@ -196,11 +196,11 @@ using namespace UniSetTypes; ...@@ -196,11 +196,11 @@ using namespace UniSetTypes;
} }
} }
while( pos!=string::npos ); while( pos!=string::npos );
return l; return l;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
std::list<std::string> UniSetTypes::explode_str( const string str, char sep ) std::list<std::string> UniSetTypes::explode_str( const string& str, char sep )
{ {
std::list<std::string> l; std::list<std::string> l;
...@@ -217,31 +217,31 @@ using namespace UniSetTypes; ...@@ -217,31 +217,31 @@ using namespace UniSetTypes;
} }
} }
while( pos!=string::npos ); while( pos!=string::npos );
return l; return l;
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
bool UniSetTypes::is_digit( const std::string s ) bool UniSetTypes::is_digit( const std::string& s )
{ {
for( std::string::const_iterator it=s.begin(); it!=s.end(); it++ ) for( std::string::const_iterator it=s.begin(); it!=s.end(); it++ )
{ {
if( !isdigit(*it) ) if( !isdigit(*it) )
return false; return false;
} }
return true; return true;
//return (std::count_if(s.begin(),s.end(),std::isdigit) == s.size()) ? true : false; //return (std::count_if(s.begin(),s.end(),std::isdigit) == s.size()) ? true : false;
} }
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------
std::list<UniSetTypes::ParamSInfo> UniSetTypes::getSInfoList( string str, Configuration* conf ) std::list<UniSetTypes::ParamSInfo> UniSetTypes::getSInfoList( const string& str, Configuration* conf )
{ {
std::list<UniSetTypes::ParamSInfo> res; std::list<UniSetTypes::ParamSInfo> res;
std::list<std::string> l = UniSetTypes::explode_str(str,','); std::list<std::string> l = UniSetTypes::explode_str(str,',');
for( std::list<std::string>::iterator it=l.begin(); it!=l.end(); it++ ) for( std::list<std::string>::iterator it=l.begin(); it!=l.end(); it++ )
{ {
UniSetTypes::ParamSInfo item; UniSetTypes::ParamSInfo item;
std::list<std::string> p = UniSetTypes::explode_str((*it),'='); std::list<std::string> p = UniSetTypes::explode_str((*it),'=');
std::string s = ""; std::string s = "";
if( p.size() == 1 ) if( p.size() == 1 )
...@@ -258,8 +258,8 @@ using namespace UniSetTypes; ...@@ -258,8 +258,8 @@ using namespace UniSetTypes;
{ {
cerr << "WARNING: parse error for '" << (*it) << "'. IGNORE..." << endl; cerr << "WARNING: parse error for '" << (*it) << "'. IGNORE..." << endl;
continue; continue;
} }
item.fname = s; item.fname = s;
std::list<std::string> t = UniSetTypes::explode_str(s,'@'); std::list<std::string> t = UniSetTypes::explode_str(s,'@');
if( t.size() == 1 ) if( t.size() == 1 )
...@@ -279,7 +279,7 @@ using namespace UniSetTypes; ...@@ -279,7 +279,7 @@ using namespace UniSetTypes;
item.si.id = uni_atoi(s_id); item.si.id = uni_atoi(s_id);
else else
item.si.id = conf->getSensorID(s_id); item.si.id = conf->getSensorID(s_id);
if( is_digit(s_node.c_str()) ) if( is_digit(s_node.c_str()) )
item.si.node = uni_atoi(s_node); item.si.node = uni_atoi(s_node);
else else
...@@ -293,12 +293,12 @@ using namespace UniSetTypes; ...@@ -293,12 +293,12 @@ using namespace UniSetTypes;
res.push_back(item); res.push_back(item);
} }
return res; return res;
} }
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------
UniversalIO::IOType UniSetTypes::getIOType( const std::string stype ) UniversalIO::IOType UniSetTypes::getIOType( const std::string& stype )
{ {
if ( stype == "DI" || stype == "di" ) if ( stype == "DI" || stype == "di" )
return UniversalIO::DI; return UniversalIO::DI;
...@@ -336,7 +336,7 @@ using namespace UniSetTypes; ...@@ -336,7 +336,7 @@ using namespace UniSetTypes;
<< " precision=" << c.precision; << " precision=" << c.precision;
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
bool UniSetTypes::check_filter( UniXML_iterator& it, const std::string f_prop, const std::string f_val ) bool UniSetTypes::check_filter( UniXML_iterator& it, const std::string& f_prop, const std::string& f_val )
{ {
if( f_prop.empty() ) if( f_prop.empty() )
return true; return true;
...@@ -352,23 +352,23 @@ using namespace UniSetTypes; ...@@ -352,23 +352,23 @@ using namespace UniSetTypes;
return true; return true;
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
string UniSetTypes::timeToString(time_t tm, const std::string brk ) string UniSetTypes::timeToString(time_t tm, const std::string& brk )
{ {
struct tm *tms = localtime(&tm); struct tm *tms = localtime(&tm);
ostringstream time; ostringstream time;
time << std::setw(2) << std::setfill('0') << tms->tm_hour << brk; time << std::setw(2) << std::setfill('0') << tms->tm_hour << brk;
time << std::setw(2) << std::setfill('0') << tms->tm_min << brk; time << std::setw(2) << std::setfill('0') << tms->tm_min << brk;
time << std::setw(2) << std::setfill('0') << tms->tm_sec; time << std::setw(2) << std::setfill('0') << tms->tm_sec;
return time.str(); return time.str();
} }
string UniSetTypes::dateToString(time_t tm, const std::string brk ) string UniSetTypes::dateToString(time_t tm, const std::string& brk )
{ {
struct tm *tms = localtime(&tm); struct tm *tms = localtime(&tm);
ostringstream date; ostringstream date;
date << std::setw(4) << std::setfill('0') << tms->tm_year+1900 << brk; date << std::setw(4) << std::setfill('0') << tms->tm_year+1900 << brk;
date << std::setw(2) << std::setfill('0') << tms->tm_mon+1 << brk; date << std::setw(2) << std::setfill('0') << tms->tm_mon+1 << brk;
date << std::setw(2) << std::setfill('0') << tms->tm_mday; date << std::setw(2) << std::setfill('0') << tms->tm_mday;
return date.str(); return date.str();
} }
......
...@@ -40,7 +40,7 @@ IOController::IOController(): ...@@ -40,7 +40,7 @@ IOController::IOController():
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
IOController::IOController(const string name, const string section): IOController::IOController(const string& name, const string& section):
UniSetManager(name, section), UniSetManager(name, section),
ioMutex(name+"_ioMutex"), ioMutex(name+"_ioMutex"),
isPingDBServer(true) isPingDBServer(true)
......
...@@ -47,7 +47,7 @@ maxAttemtps(conf->getPIntField("ConsumerMaxAttempts", 5)) ...@@ -47,7 +47,7 @@ maxAttemtps(conf->getPIntField("ConsumerMaxAttempts", 5))
} }
IONotifyController::IONotifyController(const string name, const string section, NCRestorer* d ): IONotifyController::IONotifyController(const string& name, const string& section, NCRestorer* d ):
IOController(name, section), IOController(name, section),
restorer(d), restorer(d),
askIOMutex(name+"askIOMutex"), askIOMutex(name+"askIOMutex"),
......
...@@ -42,7 +42,7 @@ using namespace std; ...@@ -42,7 +42,7 @@ using namespace std;
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
static const string UniSetDefaultPort = "2809"; static const string UniSetDefaultPort = "2809";
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
static ostream& print_help( ostream& os, int width, const string& cmd, static ostream& print_help( ostream& os, int width, const string& cmd,
const string& help, const string& tab="" ) const string& help, const string& tab="" )
{ {
// чтобы не менчять параметры основного потока // чтобы не менчять параметры основного потока
...@@ -66,7 +66,7 @@ ostream& UniSetTypes::Configuration::help(ostream& os) ...@@ -66,7 +66,7 @@ ostream& UniSetTypes::Configuration::help(ostream& os)
print_help(os,25,"--uniport num","использовать заданный порт (переопеределяет 'defaultport' заданный в конф. файле в разделе <nodes>)\n"); print_help(os,25,"--uniport num","использовать заданный порт (переопеределяет 'defaultport' заданный в конф. файле в разделе <nodes>)\n");
print_help(os,25,"--localIOR {1,0}","использовать локальные файлы для получения IOR (т.е. не использовать omniNames). Переопределяет параметр в конфигурационном файле.\n"); print_help(os,25,"--localIOR {1,0}","использовать локальные файлы для получения IOR (т.е. не использовать omniNames). Переопределяет параметр в конфигурационном файле.\n");
print_help(os,25,"--transientIOR {1,0}","использовать генерируемые IOR(не постоянные). Переопределяет параметр в конфигурационном файле. Default=1\n"); print_help(os,25,"--transientIOR {1,0}","использовать генерируемые IOR(не постоянные). Переопределяет параметр в конфигурационном файле. Default=1\n");
return os << "\nПример использования:\t myUniSetProgram " return os << "\nПример использования:\t myUniSetProgram "
<< "--ulog.dd-levels level1,info,system,warn --ulog.og-in-file myprogrpam.log\n\n"; << "--ulog.dd-levels level1,info,system,warn --ulog.og-in-file myprogrpam.log\n\n";
} }
...@@ -80,7 +80,7 @@ namespace UniSetTypes ...@@ -80,7 +80,7 @@ namespace UniSetTypes
Configuration::Configuration(): Configuration::Configuration():
oind(NULL), oind(NULL),
NSName("NameService"), NSName("NameService"),
repeatCount(2),repeatTimeout(100), repeatCount(2),repeatTimeout(100),
localDBServer(UniSetTypes::DefaultObjectId), localDBServer(UniSetTypes::DefaultObjectId),
localNode(UniSetTypes::DefaultObjectId), localNode(UniSetTypes::DefaultObjectId),
localNodeName(""), localNodeName(""),
...@@ -101,7 +101,7 @@ Configuration::~Configuration() ...@@ -101,7 +101,7 @@ Configuration::~Configuration()
} }
// --------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------
Configuration::Configuration( int argc, const char* const* argv, const string xmlfile ): Configuration::Configuration( int argc, const char* const* argv, const string& xmlfile ):
oind(NULL), oind(NULL),
_argc(argc), _argc(argc),
_argv(argv), _argv(argv),
...@@ -119,12 +119,12 @@ Configuration::Configuration( int argc, const char* const* argv, const string xm ...@@ -119,12 +119,12 @@ Configuration::Configuration( int argc, const char* const* argv, const string xm
} }
// --------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------
Configuration::Configuration( int argc, const char* const* argv, ObjectIndex* _oind, Configuration::Configuration( int argc, const char* const* argv, ObjectIndex* _oind,
const string fileConf ): const string& fileConf ):
oind(NULL), oind(NULL),
_argc(argc), _argc(argc),
_argv(argv), _argv(argv),
NSName("NameService"), NSName("NameService"),
repeatCount(2),repeatTimeout(100), repeatCount(2),repeatTimeout(100),
localDBServer(UniSetTypes::DefaultObjectId), localDBServer(UniSetTypes::DefaultObjectId),
localNode(UniSetTypes::DefaultObjectId), localNode(UniSetTypes::DefaultObjectId),
localNodeName(""), localNodeName(""),
...@@ -137,13 +137,13 @@ Configuration::Configuration( int argc, const char* const* argv, ObjectIndex* _o ...@@ -137,13 +137,13 @@ Configuration::Configuration( int argc, const char* const* argv, ObjectIndex* _o
initConfiguration(argc,argv); initConfiguration(argc,argv);
} }
// --------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------
Configuration::Configuration( int argc, const char* const* argv, const string fileConf, Configuration::Configuration( int argc, const char* const* argv, const string& fileConf,
UniSetTypes::ObjectInfo* omap ): UniSetTypes::ObjectInfo* omap ):
oind(NULL), oind(NULL),
_argc(argc), _argc(argc),
_argv(argv), _argv(argv),
NSName("NameService"), NSName("NameService"),
repeatCount(2),repeatTimeout(100), repeatCount(2),repeatTimeout(100),
localDBServer(UniSetTypes::DefaultObjectId), localDBServer(UniSetTypes::DefaultObjectId),
localNode(UniSetTypes::DefaultObjectId), localNode(UniSetTypes::DefaultObjectId),
localNodeName(""), localNodeName(""),
...@@ -194,13 +194,13 @@ void Configuration::initConfiguration( int argc, const char* const* argv ) ...@@ -194,13 +194,13 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
ulog << "(Configuration): FAILED open configuration from " << fileConfName << endl; ulog << "(Configuration): FAILED open configuration from " << fileConfName << endl;
throw; throw;
} }
// default value // default value
heartbeat_msec = 5000; heartbeat_msec = 5000;
// cerr << "*************** initConfiguration: xmlOpen: " << pt.getCurrent() << " msec " << endl; // cerr << "*************** initConfiguration: xmlOpen: " << pt.getCurrent() << " msec " << endl;
// pt.reset(); // pt.reset();
// Init ObjectIndex interface // Init ObjectIndex interface
{ {
if( oind == NULL ) if( oind == NULL )
...@@ -228,7 +228,7 @@ void Configuration::initConfiguration( int argc, const char* const* argv ) ...@@ -228,7 +228,7 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
} }
} }
} }
// Настраиваем отладочные логи // Настраиваем отладочные логи
initDebug(ulog,"UniSetDebug"); initDebug(ulog,"UniSetDebug");
...@@ -302,11 +302,11 @@ void Configuration::initConfiguration( int argc, const char* const* argv ) ...@@ -302,11 +302,11 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
ostringstream uri; ostringstream uri;
uri << "corbaname::" << it->host << ":" << it->port; uri << "corbaname::" << it->host << ":" << it->port;
if( !omni::omniInitialReferences::setFromArgs(name.c_str(), uri.str().c_str()) ) if( !omni::omniInitialReferences::setFromArgs(name.c_str(), uri.str().c_str()) )
cerr << "**********************!!!! FAILED ADD name=" << name << " uri=" << uri.str() << endl; cerr << "**********************!!!! FAILED ADD name=" << name << " uri=" << uri.str() << endl;
assert( i < _argc ); assert( i < _argc );
} }
// т..к _argc уже изменился, то и _argv надо обновить // т..к _argc уже изменился, то и _argv надо обновить
// чтобы вызов getArgParam не привел к SIGSEGV // чтобы вызов getArgParam не привел к SIGSEGV
_argv = new_argv; _argv = new_argv;
...@@ -323,7 +323,7 @@ void Configuration::initConfiguration( int argc, const char* const* argv ) ...@@ -323,7 +323,7 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
{ {
new_argv[i] = "-ORBInitRef"; new_argv[i] = "-ORBInitRef";
new_argv[i+1] = ""; // сперва инициализиуем пустой строкой (т.к. будет вызываться getArgParam) new_argv[i+1] = ""; // сперва инициализиуем пустой строкой (т.к. будет вызываться getArgParam)
string defPort( getPort( getProp(nsnode,"port") ) ); // здесь вызывается getArgParam! проходящий по _argv string defPort( getPort( getProp(nsnode,"port") ) ); // здесь вызывается getArgParam! проходящий по _argv
ostringstream param; ostringstream param;
...@@ -338,19 +338,19 @@ void Configuration::initConfiguration( int argc, const char* const* argv ) ...@@ -338,19 +338,19 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
ostringstream uri; ostringstream uri;
uri << "corbaname::" << getProp(nsnode,"host") << ":" << defPort; uri << "corbaname::" << getProp(nsnode,"host") << ":" << defPort;
if( !omni::omniInitialReferences::setFromArgs(ns_name.str().c_str(), uri.str().c_str()) ) if( !omni::omniInitialReferences::setFromArgs(ns_name.str().c_str(), uri.str().c_str()) )
cerr << "**********************!!!! FAILED ADD name=" <<ns_name << " uri=" << uri.str() << endl; cerr << "**********************!!!! FAILED ADD name=" <<ns_name << " uri=" << uri.str() << endl;
} }
} }
_argv = new_argv; _argv = new_argv;
// ------------- CORBA INIT ------------- // ------------- CORBA INIT -------------
// orb init // orb init
orb = CORBA::ORB_init(_argc,(char**)_argv); orb = CORBA::ORB_init(_argc,(char**)_argv);
// create policy // create policy
CORBA::Object_var obj = orb->resolve_initial_references("RootPOA"); CORBA::Object_var obj = orb->resolve_initial_references("RootPOA");
PortableServer::POA_var root_poa = PortableServer::POA::_narrow(obj); PortableServer::POA_var root_poa = PortableServer::POA::_narrow(obj);
CORBA::PolicyList pl; CORBA::PolicyList pl;
if( transientIOR == false ) if( transientIOR == false )
{ {
pl.length(3); pl.length(3);
...@@ -366,10 +366,10 @@ void Configuration::initConfiguration( int argc, const char* const* argv ) ...@@ -366,10 +366,10 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
pl[1] = root_poa->create_servant_retention_policy(PortableServer::RETAIN); pl[1] = root_poa->create_servant_retention_policy(PortableServer::RETAIN);
pl[2] = root_poa->create_request_processing_policy(PortableServer::USE_ACTIVE_OBJECT_MAP_ONLY); pl[2] = root_poa->create_request_processing_policy(PortableServer::USE_ACTIVE_OBJECT_MAP_ONLY);
// pl[3] = root_poa->create_thread_policy(PortableServer::SINGLE_THREAD_MODEL); // pl[3] = root_poa->create_thread_policy(PortableServer::SINGLE_THREAD_MODEL);
} }
policyList = pl; policyList = pl;
// --------------------------------------- // ---------------------------------------
} }
catch( Exception& ex ) catch( Exception& ex )
...@@ -387,17 +387,17 @@ void Configuration::initConfiguration( int argc, const char* const* argv ) ...@@ -387,17 +387,17 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
string Configuration::getArgParam( const string name, const string defval ) string Configuration::getArgParam( const string& name, const string& defval )
{ {
return UniSetTypes::getArgParam(name, _argc, _argv, defval); return UniSetTypes::getArgParam(name, _argc, _argv, defval);
} }
int Configuration::getArgInt( const string name, const string defval ) int Configuration::getArgInt( const string& name, const string& defval )
{ {
return UniSetTypes::uni_atoi(getArgParam( name, defval )); return UniSetTypes::uni_atoi(getArgParam( name, defval ));
} }
int Configuration::getArgPInt( const string name, int defval ) int Configuration::getArgPInt( const string& name, int defval )
{ {
string param = getArgParam(name,""); string param = getArgParam(name,"");
if( param.empty() ) if( param.empty() )
...@@ -406,7 +406,7 @@ int Configuration::getArgPInt( const string name, int defval ) ...@@ -406,7 +406,7 @@ int Configuration::getArgPInt( const string name, int defval )
return UniSetTypes::uni_atoi(param); return UniSetTypes::uni_atoi(param);
} }
int Configuration::getArgPInt( const string name, const string strdefval, int defval ) int Configuration::getArgPInt( const string& name, const string& strdefval, int defval )
{ {
string param = getArgParam(name,strdefval); string param = getArgParam(name,strdefval);
if( param.empty() && strdefval.empty() ) if( param.empty() && strdefval.empty() )
...@@ -434,11 +434,11 @@ void Configuration::initParameters() ...@@ -434,11 +434,11 @@ void Configuration::initParameters()
ulog.crit()<< "Configuration: INIT PARAM`s FAILED!!!!"<< endl; ulog.crit()<< "Configuration: INIT PARAM`s FAILED!!!!"<< endl;
throw Exception("Configuration: INIT PARAM`s FAILED!!!!"); throw Exception("Configuration: INIT PARAM`s FAILED!!!!");
} }
for( ; it.getCurrent(); it.goNext() ) for( ; it.getCurrent(); it.goNext() )
{ {
string name( it.getName() ); string name( it.getName() );
if( name == "LocalNode" ) if( name == "LocalNode" )
{ {
if( localNode == UniSetTypes::DefaultObjectId ) if( localNode == UniSetTypes::DefaultObjectId )
...@@ -523,12 +523,14 @@ void Configuration::initParameters() ...@@ -523,12 +523,14 @@ void Configuration::initParameters()
} }
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void Configuration::setLocalNode( string nodename ) void Configuration::setLocalNode( const string& nodename )
{ {
string virtnode = oind->getVirtualNodeName(nodename); string virtnode = oind->getVirtualNodeName(nodename);
string nn(nodename);
if( virtnode.empty() ) if( virtnode.empty() )
nodename = oind->mkFullNodeName(nodename,nodename); nn = oind->mkFullNodeName(nodename,nodename);
localNode = oind->getIdByName(nodename);
localNode = oind->getIdByName(nn);
if( localNode == DefaultObjectId ) if( localNode == DefaultObjectId )
{ {
...@@ -538,8 +540,8 @@ void Configuration::setLocalNode( string nodename ) ...@@ -538,8 +540,8 @@ void Configuration::setLocalNode( string nodename )
ulog.crit()<< err.str() << endl; ulog.crit()<< err.str() << endl;
throw Exception(err.str()); throw Exception(err.str());
} }
localNodeName = oind->getRealNodeName(nodename); localNodeName = oind->getRealNodeName(nn);
oind->initLocalNode(localNode); oind->initLocalNode(localNode);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -548,33 +550,33 @@ xmlNode* Configuration::getNode(const string& path) ...@@ -548,33 +550,33 @@ xmlNode* Configuration::getNode(const string& path)
return unixml.findNode(unixml.getFirstNode(), path); return unixml.findNode(unixml.getFirstNode(), path);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
string Configuration::getProp(xmlNode* node, const string name) string Configuration::getProp(xmlNode* node, const string& name)
{ {
return UniXML::getProp(node, name); return UniXML::getProp(node, name);
} }
int Configuration::getIntProp(xmlNode* node, const string name) int Configuration::getIntProp(xmlNode* node, const string& name)
{ {
return UniXML::getIntProp(node, name); return UniXML::getIntProp(node, name);
} }
int Configuration::getPIntProp(xmlNode* node, const string name, int def) int Configuration::getPIntProp(xmlNode* node, const string& name, int def)
{ {
return UniXML::getPIntProp(node, name, def); return UniXML::getPIntProp(node, name, def);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
string Configuration::getField(const string path) string Configuration::getField(const string& path)
{ {
return getProp(getNode(path),"name"); return getProp(getNode(path),"name");
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
int Configuration::getIntField(const std::string path) int Configuration::getIntField(const std::string& path)
{ {
return unixml.getIntProp(getNode(path), "name"); return unixml.getIntProp(getNode(path), "name");
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
int Configuration::getPIntField(const std::string path, int def) int Configuration::getPIntField(const std::string& path, int def)
{ {
int i = getIntField(path);; int i = getIntField(path);;
if (i <= 0) if (i <= 0)
...@@ -583,7 +585,7 @@ int Configuration::getPIntField(const std::string path, int def) ...@@ -583,7 +585,7 @@ int Configuration::getPIntField(const std::string path, int def)
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
xmlNode* Configuration::findNode(xmlNode* node, const std::string snode, const std::string sname) xmlNode* Configuration::findNode(xmlNode* node, const std::string& snode, const std::string& sname)
{ {
if( !unixml.isOpen() ) if( !unixml.isOpen() )
return 0; return 0;
...@@ -647,7 +649,7 @@ void Configuration::createNodesList() ...@@ -647,7 +649,7 @@ void Configuration::createNodesList()
ulog.crit()<< "Configuration(createNodesList): Not found ID for node '" << nodename << "'" << endl; ulog.crit()<< "Configuration(createNodesList): Not found ID for node '" << nodename << "'" << endl;
throw Exception("Configuration(createNodesList): Not found ID for node '"+nodename+"'"); throw Exception("Configuration(createNodesList): Not found ID for node '"+nodename+"'");
} }
ninf.host = getProp(it,"ip").c_str(); ninf.host = getProp(it,"ip").c_str();
string tp(getProp(it,"port")); string tp(getProp(it,"port"));
if( tp.empty() ) if( tp.empty() )
...@@ -656,7 +658,7 @@ void Configuration::createNodesList() ...@@ -656,7 +658,7 @@ void Configuration::createNodesList()
ninf.port = tp.c_str(); ninf.port = tp.c_str();
string tmp(it.getProp("dbserver")); string tmp(it.getProp("dbserver"));
if( tmp.empty() ) if( tmp.empty() )
ninf.dbserver = UniSetTypes::DefaultObjectId; ninf.dbserver = UniSetTypes::DefaultObjectId;
else else
...@@ -675,13 +677,13 @@ void Configuration::createNodesList() ...@@ -675,13 +677,13 @@ void Configuration::createNodesList()
localDBServer = ninf.dbserver; localDBServer = ninf.dbserver;
ninf.connected = false; ninf.connected = false;
initNode(ninf, it); initNode(ninf, it);
if( ulog.is_info() ) if( ulog.is_info() )
ulog.info() << "Configuration(createNodesList): add to list of nodes: node=" << nodename << " id=" << ninf.id << endl; ulog.info() << "Configuration(createNodesList): add to list of nodes: node=" << nodename << " id=" << ninf.id << endl;
lnodes.push_back(ninf); lnodes.push_back(ninf);
} }
if( ulog.is_info() ) if( ulog.is_info() )
ulog.info() << "Configuration(createNodesList): size of node list " << lnodes.size() << endl; ulog.info() << "Configuration(createNodesList): size of node list " << lnodes.size() << endl;
...@@ -746,12 +748,12 @@ xmlNode* Configuration::initDebug( DebugStream& deb, const string& _debname ) ...@@ -746,12 +748,12 @@ xmlNode* Configuration::initDebug( DebugStream& deb, const string& _debname )
if( !debug_file.empty() ) if( !debug_file.empty() )
deb.logFile(debug_file); deb.logFile(debug_file);
} }
// теперь смотрим командную строку // теперь смотрим командную строку
string log_in("--"+debname+"-log-in-file"); string log_in("--"+debname+"-log-in-file");
string add_level("--"+debname+"-add-levels"); string add_level("--"+debname+"-add-levels");
string del_level("--"+debname+"-del-levels"); string del_level("--"+debname+"-del-levels");
// смотрим командную строку // смотрим командную строку
for (int i=1; i < (_argc - 1); i++) for (int i=1; i < (_argc - 1); i++)
{ {
...@@ -792,7 +794,7 @@ void Configuration::initRepSections() ...@@ -792,7 +794,7 @@ void Configuration::initRepSections()
secServices = secRoot + "/" + getRepSectionName("services",xmlServicesSec); secServices = secRoot + "/" + getRepSectionName("services",xmlServicesSec);
} }
string Configuration::getRepSectionName( const string sec, xmlNode* secnode ) string Configuration::getRepSectionName( const string& sec, xmlNode* secnode )
{ {
xmlNode* node = unixml.findNode(unixml.getFirstNode(),sec); xmlNode* node = unixml.findNode(unixml.getFirstNode(),sec);
if( node == NULL ) if( node == NULL )
...@@ -803,7 +805,7 @@ string Configuration::getRepSectionName( const string sec, xmlNode* secnode ) ...@@ -803,7 +805,7 @@ string Configuration::getRepSectionName( const string sec, xmlNode* secnode )
ulog.crit()<< msg.str() << endl; ulog.crit()<< msg.str() << endl;
throw SystemError(msg.str()); throw SystemError(msg.str());
} }
secnode = node; secnode = node;
string ret(unixml.getProp(node,"section")); string ret(unixml.getProp(node,"section"));
...@@ -813,7 +815,7 @@ string Configuration::getRepSectionName( const string sec, xmlNode* secnode ) ...@@ -813,7 +815,7 @@ string Configuration::getRepSectionName( const string sec, xmlNode* secnode )
return ret; return ret;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void Configuration::setConfFileName( const string fn ) void Configuration::setConfFileName( const string& fn )
{ {
if( !fn.empty() ) if( !fn.empty() )
{ {
...@@ -846,7 +848,7 @@ void Configuration::setConfFileName( const string fn ) ...@@ -846,7 +848,7 @@ void Configuration::setConfFileName( const string fn )
} }
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
string Configuration::getPort(const string port) string Configuration::getPort( const string& port )
{ {
// Порт задан в параметрах программы // Порт задан в параметрах программы
string defport(getArgParam("--uniset-port")); string defport(getArgParam("--uniset-port"));
...@@ -868,15 +870,15 @@ string Configuration::getPort(const string port) ...@@ -868,15 +870,15 @@ string Configuration::getPort(const string port)
return UniSetDefaultPort; return UniSetDefaultPort;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ObjectId Configuration::getSensorID( const std::string name ) ObjectId Configuration::getSensorID( const std::string& name )
{ {
if( name.empty() ) if( name.empty() )
return DefaultObjectId; return DefaultObjectId;
return oind->getIdByName(getSensorsSection()+"/"+name); return oind->getIdByName(getSensorsSection()+"/"+name);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ObjectId Configuration::getControllerID( const std::string name ) ObjectId Configuration::getControllerID( const std::string& name )
{ {
if( name.empty() ) if( name.empty() )
return DefaultObjectId; return DefaultObjectId;
...@@ -884,7 +886,7 @@ ObjectId Configuration::getControllerID( const std::string name ) ...@@ -884,7 +886,7 @@ ObjectId Configuration::getControllerID( const std::string name )
return oind->getIdByName(getControllersSection()+"/"+name); return oind->getIdByName(getControllersSection()+"/"+name);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ObjectId Configuration::getObjectID( const std::string name ) ObjectId Configuration::getObjectID( const std::string& name )
{ {
if( name.empty() ) if( name.empty() )
return DefaultObjectId; return DefaultObjectId;
...@@ -892,7 +894,7 @@ ObjectId Configuration::getObjectID( const std::string name ) ...@@ -892,7 +894,7 @@ ObjectId Configuration::getObjectID( const std::string name )
return oind->getIdByName(getObjectsSection()+"/"+name); return oind->getIdByName(getObjectsSection()+"/"+name);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ObjectId Configuration::getServiceID( const std::string name ) ObjectId Configuration::getServiceID( const std::string& name )
{ {
if( name.empty() ) if( name.empty() )
return DefaultObjectId; return DefaultObjectId;
...@@ -900,15 +902,14 @@ ObjectId Configuration::getServiceID( const std::string name ) ...@@ -900,15 +902,14 @@ ObjectId Configuration::getServiceID( const std::string name )
return oind->getIdByName(getServicesSection()+"/"+name); return oind->getIdByName(getServicesSection()+"/"+name);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
UniSetTypes::ObjectId Configuration::getNodeID( const std::string name, std::string alias ) UniSetTypes::ObjectId Configuration::getNodeID( const std::string& name, const std::string& alias )
{ {
if( name.empty() ) if( name.empty() )
return DefaultObjectId; return DefaultObjectId;
if( alias.empty() ) string a( (alias.empty() ? name : alias ) );
alias = name;
// return oind->getNodeId( oind->mkFullNodeName(name,alias) ); return oind->getIdByName( oind->mkFullNodeName(name,a) );
return oind->getIdByName( oind->mkFullNodeName(name,alias) );
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -922,7 +923,7 @@ xmlNode* Configuration::getXMLSensorsSection() ...@@ -922,7 +923,7 @@ xmlNode* Configuration::getXMLSensorsSection()
{ {
if( xmlSensorsSec ) if( xmlSensorsSec )
return xmlSensorsSec; return xmlSensorsSec;
xmlSensorsSec = unixml.findNode(unixml.getFirstNode(),"sensors"); xmlSensorsSec = unixml.findNode(unixml.getFirstNode(),"sensors");
return xmlSensorsSec; return xmlSensorsSec;
} }
...@@ -931,7 +932,7 @@ xmlNode* Configuration::getXMLObjectsSection() ...@@ -931,7 +932,7 @@ xmlNode* Configuration::getXMLObjectsSection()
{ {
if( xmlObjectsSec ) if( xmlObjectsSec )
return xmlObjectsSec; return xmlObjectsSec;
xmlObjectsSec = unixml.findNode(unixml.getFirstNode(),"objects"); xmlObjectsSec = unixml.findNode(unixml.getFirstNode(),"objects");
return xmlObjectsSec; return xmlObjectsSec;
} }
...@@ -940,7 +941,7 @@ xmlNode* Configuration::getXMLControllersSection() ...@@ -940,7 +941,7 @@ xmlNode* Configuration::getXMLControllersSection()
{ {
if( xmlControllersSec ) if( xmlControllersSec )
return xmlControllersSec; return xmlControllersSec;
xmlControllersSec = unixml.findNode(unixml.getFirstNode(),"controllers"); xmlControllersSec = unixml.findNode(unixml.getFirstNode(),"controllers");
return xmlControllersSec; return xmlControllersSec;
...@@ -950,7 +951,7 @@ xmlNode* Configuration::getXMLServicesSection() ...@@ -950,7 +951,7 @@ xmlNode* Configuration::getXMLServicesSection()
{ {
if( xmlServicesSec ) if( xmlServicesSec )
return xmlServicesSec; return xmlServicesSec;
xmlServicesSec = unixml.findNode(unixml.getFirstNode(),"services"); xmlServicesSec = unixml.findNode(unixml.getFirstNode(),"services");
return xmlServicesSec; return xmlServicesSec;
} }
...@@ -959,7 +960,7 @@ xmlNode* Configuration::getXMLNodesSection() ...@@ -959,7 +960,7 @@ xmlNode* Configuration::getXMLNodesSection()
{ {
if( xmlNodesSec ) if( xmlNodesSec )
return xmlNodesSec; return xmlNodesSec;
xmlNodesSec = unixml.findNode(unixml.getFirstNode(),"nodes"); xmlNodesSec = unixml.findNode(unixml.getFirstNode(),"nodes");
return xmlNodesSec; return xmlNodesSec;
} }
...@@ -985,10 +986,10 @@ UniversalIO::IOType Configuration::getIOType( UniSetTypes::ObjectId id ) ...@@ -985,10 +986,10 @@ UniversalIO::IOType Configuration::getIOType( UniSetTypes::ObjectId id )
return UniversalIO::UnknownIOType; return UniversalIO::UnknownIOType;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
UniversalIO::IOType Configuration::getIOType( const std::string name ) UniversalIO::IOType Configuration::getIOType( const std::string& name )
{ {
// Если указано "короткое" имя // Если указано "короткое" имя
// то просто сперва ищём ID, а потом по нему // то просто сперва ищём ID, а потом по нему
// iotype // iotype
ObjectId id = getSensorID(name); ObjectId id = getSensorID(name);
if( id != DefaultObjectId ) if( id != DefaultObjectId )
......
...@@ -221,7 +221,7 @@ const DebugStream& DebugStream::operator=( const DebugStream& r ) ...@@ -221,7 +221,7 @@ const DebugStream& DebugStream::operator=( const DebugStream& r )
} }
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
/// Sets the debugstreams' logfile to f. /// Sets the debugstreams' logfile to f.
void DebugStream::logFile(const std::string f) void DebugStream::logFile( const std::string& f )
{ {
fname = f; fname = f;
if (internal) { if (internal) {
......
...@@ -44,13 +44,13 @@ Restorer_XML::~Restorer_XML() ...@@ -44,13 +44,13 @@ Restorer_XML::~Restorer_XML()
{ {
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void Restorer_XML::setItemFilter( const string field, const string val ) void Restorer_XML::setItemFilter( const string& field, const string& val )
{ {
i_filterField = field; i_filterField = field;
i_filterValue = val; i_filterValue = val;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void Restorer_XML::setConsumerFilter( const string field, const string val ) void Restorer_XML::setConsumerFilter( const string& field, const string& val )
{ {
c_filterField = field; c_filterField = field;
c_filterValue = val; c_filterValue = val;
...@@ -184,7 +184,7 @@ bool Restorer_XML::check_consumer_item( UniXML_iterator& it ) ...@@ -184,7 +184,7 @@ bool Restorer_XML::check_consumer_item( UniXML_iterator& it )
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
xmlNode* Restorer_XML::find_node( UniXML& xml, xmlNode* root, xmlNode* Restorer_XML::find_node( UniXML& xml, xmlNode* root,
const string& nodename, const string nm ) const string& nodename, const string& nm )
{ {
UniXML_iterator it(root); UniXML_iterator it(root);
if( it.goChildren() ) if( it.goChildren() )
......
...@@ -35,7 +35,7 @@ using namespace UniSetTypes; ...@@ -35,7 +35,7 @@ using namespace UniSetTypes;
using namespace UniversalIO; using namespace UniversalIO;
using namespace std; using namespace std;
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
SViewer::SViewer(const string csec, bool sn): SViewer::SViewer(const string& csec, bool sn):
csec(csec), csec(csec),
rep(UniSetTypes::conf), rep(UniSetTypes::conf),
cache(500, 15), cache(500, 15),
...@@ -79,7 +79,7 @@ void SViewer::view() ...@@ -79,7 +79,7 @@ void SViewer::view()
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
void SViewer::readSection(const string section, const string secRoot) void SViewer::readSection( const string& section, const string& secRoot )
{ {
ListObjectName lst; ListObjectName lst;
string curSection; string curSection;
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
using namespace std; using namespace std;
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
WDTInterface::WDTInterface( const std::string _dev ): WDTInterface::WDTInterface( const std::string& _dev ):
dev(_dev) dev(_dev)
{ {
} }
......
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