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 )
// -----------------------------------------------------------------------------
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),
polltime(150),
cards(11),
......@@ -1147,7 +1147,7 @@ void IOControl::check_testlamp()
// -----------------------------------------------------------------------------
IOControl* IOControl::init_iocontrol( int argc, const char* const* argv,
UniSetTypes::ObjectId icID, SharedMemory* ic,
const std::string prefix )
const std::string& prefix )
{
string name = conf->getArgParam("--"+prefix+"-name","IOControl1");
if( name.empty() )
......
......@@ -195,13 +195,13 @@ class IOControl:
public UniSetObject
{
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();
/*! глобальная функция для инициализации объекта */
static IOControl* init_iocontrol( int argc, const char* const* argv,
UniSetTypes::ObjectId icID, SharedMemory* ic=0,
const std::string prefix="io" );
const std::string& prefix="io" );
/*! глобальная функция для вывода help-а */
static void help_print( int argc, const char* const* argv );
......@@ -303,7 +303,7 @@ class IOControl:
void waitSM();
bool checkCards( const std::string func="" );
bool checkCards( const std::string& func="" );
// std::string myname;
xmlNode* cnode; /*!< xml-узел в настроечном файле */
......
......@@ -11,8 +11,8 @@ using namespace std;
using namespace UniSetTypes;
using namespace UniSetExtensions;
// -----------------------------------------------------------------------------
MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId,
SharedMemory* ic, const std::string prefix ):
MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId,
SharedMemory* ic, const std::string& prefix ):
UniSetObject_LT(objId),
allInitOK(false),
shm(0),
......@@ -176,14 +176,14 @@ MBExchange::~MBExchange()
delete it1->second->rtu;
it1->second->rtu = 0;
}
RTUDevice* d(it1->second);
for( RegMap::iterator it=d->regmap.begin(); it!=d->regmap.end(); ++it )
delete it->second;
delete it1->second;
}
delete shm;
}
// -----------------------------------------------------------------------------
......@@ -273,7 +273,7 @@ void MBExchange::readConfiguration()
if( UniSetTypes::check_filter(it,s_field,s_fvalue) )
initItem(it);
}
// readconf_ok = true;
}
// ------------------------------------------------------------------------------------------
......@@ -289,16 +289,16 @@ MBExchange::DeviceType MBExchange::getDeviceType( const std::string& dtype )
{
if( dtype.empty() )
return dtUnknown;
if( dtype == "mtr" || dtype == "MTR" )
return dtMTR;
if( dtype == "rtu" || dtype == "RTU" )
return dtRTU;
if( dtype == "rtu188" || dtype == "RTU188" )
return dtRTU188;
return dtUnknown;
}
// ------------------------------------------------------------------------------------------
......@@ -347,7 +347,7 @@ bool MBExchange::checkUpdateSM( bool wrFunc, long mdev )
<< " skip... mode='emWriteOnly' " << endl;
return false;
}
if( wrFunc && (exchangeMode == emSkipSaveToSM || mdev == emSkipSaveToSM) )
{
if( dlog.debugging(Debug::LEVEL3) )
......@@ -367,7 +367,7 @@ bool MBExchange::checkPoll( bool wrFunc )
dlog[Debug::LEVEL3] << myname << "(checkPoll): skip.. mode='emWriteOnly'" << endl;
return false;
}
if( exchangeMode == emReadOnly && wrFunc )
{
if( dlog.debugging(Debug::LEVEL3) )
......@@ -386,8 +386,8 @@ MBExchange::RegID MBExchange::genRegID( const ModbusRTU::ModbusData mbreg, const
// 1. ID > диапазона возможных регистров
// 2. одинаковые регистры, но разные функции должны давать разный ID
// 3. регистры идущие подряд, должна давать ID идущие тоже подряд
// Вообще диапазоны:
// Вообще диапазоны:
// mbreg: 0..65535
// fn: 0...255
int max = numeric_limits<ModbusRTU::ModbusData>::max(); // по идее 65535
......@@ -425,12 +425,12 @@ std::ostream& operator<<( std::ostream& os, MBExchange::RTUDevice& d )
<< " respond_state=" << d.resp_state
<< " respond_invert=" << d.resp_invert
<< endl;
os << " regs: " << endl;
for( MBExchange::RegMap::iterator it=d.regmap.begin(); it!=d.regmap.end(); ++it )
os << " " << *(it->second) << endl;
return os;
}
// -----------------------------------------------------------------------------
......@@ -466,7 +466,7 @@ void MBExchange::rtuQueryOptimization( RTUDeviceMap& m )
for( MBExchange::RTUDeviceMap::iterator it1=m.begin(); it1!=m.end(); ++it1 )
{
RTUDevice* d(it1->second);
// Вообще в map они уже лежат в нужном порядке, т.е. функция genRegID() гарантирует
// что регистры идущие подряд с одниковой функцией чтения/записи получат подряд идущие ID.
// так что оптимтизация это просто нахождение мест где id идут не подряд...
......@@ -484,7 +484,7 @@ void MBExchange::rtuQueryOptimization( RTUDeviceMap& m )
it--; // раз это регистр уже следующий, то надо вернуть на шаг обратно..
break;
}
beg->second->q_count++;
if( beg->second->q_count >= ModbusRTU::MAXDATALEN )
......@@ -504,7 +504,7 @@ void MBExchange::rtuQueryOptimization( RTUDeviceMap& m )
<< " <--> func=" << ModbusRTU::fnWriteOutputRegisters
<< " for mbaddr=" << ModbusRTU::addr2str(d->mbaddr)
<< " mbreg=" << ModbusRTU::dat2str(beg->second->mbreg);
beg->second->mbfunc = ModbusRTU::fnWriteOutputRegisters;
}
else if( beg->second->q_count>1 && beg->second->mbfunc==ModbusRTU::fnForceSingleCoil )
......@@ -515,10 +515,10 @@ void MBExchange::rtuQueryOptimization( RTUDeviceMap& m )
<< " <--> func=" << ModbusRTU::fnForceMultipleCoils
<< " for mbaddr=" << ModbusRTU::addr2str(d->mbaddr)
<< " mbreg=" << ModbusRTU::dat2str(beg->second->mbreg);
beg->second->mbfunc = ModbusRTU::fnForceMultipleCoils;
}
if( it==d->regmap.end() )
break;
}
......@@ -647,7 +647,7 @@ bool MBExchange::preInitRead( InitList::iterator& p )
{
bool f_out = force_out;
// выставляем флаг принудительного обновления
force_out = true;
force_out = true;
p->ri->mb_initOK = true;
p->ri->sm_initOK = false;
updateRTU(p->ri->rit);
......@@ -811,14 +811,14 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
<< " sm_initOK=" << p->sm_initOK
<< " mbval=" << p->mbval
<< endl;
if( p->q_count > ModbusRTU::MAXDATALEN )
{
dlog[Debug::LEVEL3] << myname << "(pollRTU): count(" << p->q_count
<< ") > MAXDATALEN(" << ModbusRTU::MAXDATALEN
dlog[Debug::LEVEL3] << myname << "(pollRTU): count(" << p->q_count
<< ") > MAXDATALEN(" << ModbusRTU::MAXDATALEN
<< " ..ignore..."
<< endl;
}
}
......@@ -828,11 +828,11 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
if( p->q_count == 0 )
{
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;
return false;
}
switch( p->mbfunc )
{
case ModbusRTU::fnReadInputRegisters:
......@@ -852,7 +852,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
it--;
}
break;
case ModbusRTU::fnReadInputStatus:
{
ModbusRTU::ReadInputStatusRetMessage ret = mb->read02(dev->mbaddr,p->mbreg,p->q_count);
......@@ -866,7 +866,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
it--;
}
break;
case ModbusRTU::fnReadCoilStatus:
{
ModbusRTU::ReadCoilRetMessage ret = mb->read01(dev->mbaddr,p->mbreg,p->q_count);
......@@ -880,17 +880,17 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
it--;
}
break;
case ModbusRTU::fnWriteOutputSingleRegister:
{
if( p->q_count != 1 )
{
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;
return false;
}
if( !p->sm_initOK )
{
if( dlog.debugging(Debug::LEVEL3) )
......@@ -898,7 +898,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
<< " slist=" << (*p)
<< " IGNORE...(sm_initOK=false)" << endl;
return true;
}
}
// cerr << "**** mbreg=" << ModbusRTU::dat2str(p->mbreg) << " val=" << ModbusRTU::dat2str(p->mbval) << endl;
ModbusRTU::WriteSingleOutputRetMessage ret = mb->write06(dev->mbaddr,p->mbreg,p->mbval);
......@@ -909,7 +909,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
{
if( !p->sm_initOK )
{
// может быть такая ситуация, что
// может быть такая ситуация, что
// некоторые регистры уже инициализированы, а другие ещё нет
// при этом после оптимизации они попадают в один запрос
// поэтому здесь сделано так:
......@@ -917,7 +917,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
// и его просто надо пропустить..
if( p->q_num > 1 )
return true;
// смещаем итератор, если данный запрос содержит много регистров
// if( q->count > 1 )
// {
......@@ -925,12 +925,12 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
// it++;
// return true;
// }
if( dlog.debugging(Debug::LEVEL3) )
dlog[Debug::LEVEL3] << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " IGNORE...(sm_initOK=false)" << endl;
return true;
}
}
ModbusRTU::WriteOutputMessage msg(dev->mbaddr,p->mbreg);
for( int i=0; i<p->q_count; i++,it++ )
......@@ -946,7 +946,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
if( p->q_count != 1 )
{
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;
return false;
}
......@@ -956,7 +956,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
dlog[Debug::LEVEL3] << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " IGNORE...(sm_initOK=false)" << endl;
return true;
}
}
// cerr << "****(coil) mbreg=" << ModbusRTU::dat2str(p->mbreg) << " val=" << ModbusRTU::dat2str(p->mbval) << endl;
ModbusRTU::ForceSingleCoilRetMessage ret = mb->write05(dev->mbaddr,p->mbreg,p->mbval);
......@@ -971,7 +971,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
dlog[Debug::LEVEL3] << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " IGNORE...(sm_initOK=false)" << endl;
return true;
}
}
ModbusRTU::ForceCoilsMessage msg(dev->mbaddr,p->mbreg);
for( int i=0; i<p->q_count; i++,it++ )
......@@ -982,17 +982,17 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
ModbusRTU::ForceCoilsRetMessage ret = mb->write0F(msg);
}
break;
default:
{
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;
return false;
}
break;
}
return true;
}
// -----------------------------------------------------------------------------
......@@ -1089,7 +1089,7 @@ void MBExchange::updateSM()
if( dlog.debugging(Debug::LEVEL3) )
dlog[Debug::LEVEL3] << myname << "(updateSM): catch ..." << endl;
}
if( it==d->regmap.end() )
break;
}
......@@ -1111,21 +1111,21 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
RegInfo* r(p->reg->rit->second);
bool save = isWriteFunction( r->mbfunc );
if( !save && write_only )
return;
if( !checkUpdateSM(save,r->dev->mode) )
return;
// если требуется инициализация и она ещё не произведена,
// то игнорируем
if( save && !r->mb_initOK )
return;
if( dlog.debugging(Debug::LEVEL3) )
dlog[Debug::LEVEL3] << "updateP: sid=" << p->si.id
<< " mbval=" << r->mbval
dlog[Debug::LEVEL3] << "updateP: sid=" << p->si.id
<< " mbval=" << r->mbval
<< " vtype=" << p->vType
<< " rnum=" << p->rnum
<< " nbit=" << p->nbit
......@@ -1160,7 +1160,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
return;
}
if( p->rnum <= 1 )
{
if( save )
......@@ -1172,7 +1172,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
{
r->mbval = IOBase::processingAsDO( p, shm, force_out );
}
else
else
r->mbval = IOBase::processingAsAO( p, shm, force_out );
r->sm_initOK = true;
......@@ -1193,7 +1193,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
}
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;
return;
}
......@@ -1208,7 +1208,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
{
r->mbval = (signed short)IOBase::processingAsDO( p, shm, force_out );
}
else
else
r->mbval = (signed short)IOBase::processingAsAO( p, shm, force_out );
r->sm_initOK = true;
......@@ -1239,7 +1239,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
{
r->mbval = (unsigned short)IOBase::processingAsDO( p, shm, force_out );
}
else
else
r->mbval = (unsigned short)IOBase::processingAsAO( p, shm, force_out );
r->sm_initOK = true;
......@@ -1264,7 +1264,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
if( p->nbyte <= 0 || p->nbyte > VTypes::Byte::bsize )
{
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;
return;
}
......@@ -1285,7 +1285,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
VTypes::Byte b(r->mbval);
IOBase::processingAsAI( p, b.raw.b[p->nbyte-1], shm, force );
}
return;
}
else if( p->vType == VTypes::vtF2 )
......@@ -1308,10 +1308,10 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[VTypes::F2::wsize()];
for( int k=0; k<VTypes::F2::wsize(); k++, i++ )
data[k] = i->second->mbval;
VTypes::F2 f(data,VTypes::F2::wsize());
delete[] data;
IOBase::processingFasAI( p, (float)f, shm, force );
}
}
......@@ -1333,10 +1333,10 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[VTypes::F4::wsize()];
for( int k=0; k<VTypes::F4::wsize(); k++, i++ )
data[k] = i->second->mbval;
VTypes::F4 f(data,VTypes::F4::wsize());
delete[] data;
IOBase::processingFasAI( p, (float)f, shm, force );
}
}
......@@ -1360,10 +1360,10 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[VTypes::I2::wsize()];
for( int k=0; k<VTypes::I2::wsize(); k++, i++ )
data[k] = i->second->mbval;
VTypes::I2 i2(data,VTypes::I2::wsize());
delete[] data;
IOBase::processingAsAI( p, (int)i2, shm, force );
}
}
......@@ -1387,10 +1387,10 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[VTypes::U2::wsize()];
for( int k=0; k<VTypes::U2::wsize(); k++, i++ )
data[k] = i->second->mbval;
VTypes::U2 u2(data,VTypes::U2::wsize());
delete[] data;
IOBase::processingAsAI( p, (unsigned int)u2, shm, force );
}
}
......@@ -1462,13 +1462,13 @@ void MBExchange::updateMTR( RegMap::iterator& rit )
}
continue;
}
if( r->mtrType == MTR::mtT2 )
{
if( save )
{
MTR::T2 t(IOBase::processingAsAO( &(*it), shm, force_out ));
r->mbval = t.val;
r->mbval = t.val;
}
else
{
......@@ -1477,7 +1477,7 @@ void MBExchange::updateMTR( RegMap::iterator& rit )
}
continue;
}
if( r->mtrType == MTR::mtT3 )
{
RegMap::iterator i(rit);
......@@ -1492,14 +1492,14 @@ void MBExchange::updateMTR( RegMap::iterator& rit )
ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[MTR::T3::wsize()];
for( int k=0; k<MTR::T3::wsize(); k++, i++ )
data[k] = i->second->mbval;
MTR::T3 t(data,MTR::T3::wsize());
delete[] data;
IOBase::processingAsAI( &(*it), (long)t, shm, force );
}
continue;
}
if( r->mtrType == MTR::mtT4 )
{
if( save )
......@@ -1514,7 +1514,7 @@ void MBExchange::updateMTR( RegMap::iterator& rit )
}
continue;
}
if( r->mtrType == MTR::mtT5 )
{
RegMap::iterator i(rit);
......@@ -1529,15 +1529,15 @@ void MBExchange::updateMTR( RegMap::iterator& rit )
ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[MTR::T5::wsize()];
for( int k=0; k<MTR::T5::wsize(); k++, i++ )
data[k] = i->second->mbval;
MTR::T5 t(data,MTR::T5::wsize());
delete[] data;
IOBase::processingFasAI( &(*it), (float)t.val, shm, force );
}
continue;
}
if( r->mtrType == MTR::mtT6 )
{
RegMap::iterator i(rit);
......@@ -1552,15 +1552,15 @@ void MBExchange::updateMTR( RegMap::iterator& rit )
ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[MTR::T6::wsize()];
for( int k=0; k<MTR::T6::wsize(); k++, i++ )
data[k] = i->second->mbval;
MTR::T6 t(data,MTR::T6::wsize());
delete[] data;
IOBase::processingFasAI( &(*it), (float)t.val, shm, force );
}
continue;
}
if( r->mtrType == MTR::mtT7 )
{
RegMap::iterator i(rit);
......@@ -1575,15 +1575,15 @@ void MBExchange::updateMTR( RegMap::iterator& rit )
ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[MTR::T7::wsize()];
for( int k=0; k<MTR::T7::wsize(); k++, i++ )
data[k] = i->second->mbval;
MTR::T7 t(data,MTR::T7::wsize());
delete[] data;
IOBase::processingFasAI( &(*it), (float)t.val, shm, force );
}
continue;
}
if( r->mtrType == MTR::mtT16 )
{
if( save )
......@@ -1612,8 +1612,8 @@ void MBExchange::updateMTR( RegMap::iterator& rit )
IOBase::processingFasAI( &(*it), t.fval, shm, force );
}
continue;
}
}
if( r->mtrType == MTR::mtF1 )
{
RegMap::iterator i(rit);
......@@ -1629,10 +1629,10 @@ void MBExchange::updateMTR( RegMap::iterator& rit )
ModbusRTU::ModbusData* data = new ModbusRTU::ModbusData[MTR::F1::wsize()];
for( int k=0; k<MTR::F1::wsize(); k++, i++ )
data[k] = i->second->mbval;
MTR::F1 t(data,MTR::F1::wsize());
delete[] data;
IOBase::processingFasAI( &(*it), (float)t, shm, force );
}
continue;
......@@ -1683,7 +1683,7 @@ void MBExchange::updateRTU188( RegMap::iterator& rit )
bool save = isWriteFunction( r->mbfunc );
// пока-что функции записи в обмене с RTU188
// пока-что функции записи в обмене с RTU188
// не реализованы
if( isWriteFunction(r->mbfunc) )
{
......@@ -1715,7 +1715,7 @@ void MBExchange::updateRTU188( RegMap::iterator& rit )
<< " skip... mode=emWriteOnly " << endl;
return;
}
if( save && ( exchangeMode == emSkipSaveToSM || r->dev->mode == emSkipSaveToSM) )
{
if( dlog.debugging(Debug::LEVEL3) )
......@@ -1784,14 +1784,14 @@ MBExchange::RTUDevice* MBExchange::addDev( RTUDeviceMap& mp, ModbusRTU::ModbusAd
{
if( dlog.is_crit() )
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)
<< endl;
return 0;
}
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;
return it->second;
}
......@@ -1800,7 +1800,7 @@ MBExchange::RTUDevice* MBExchange::addDev( RTUDeviceMap& mp, ModbusRTU::ModbusAd
d->mbaddr = a;
if( !initRTUDevice(d,xmlit) )
{
{
delete d;
return 0;
}
......@@ -1822,7 +1822,7 @@ MBExchange::RegInfo* MBExchange::addReg( RegMap& mp, RegID id, ModbusRTU::Modbus
<< " dev=0!!!! " << endl;
return 0;
}
if( it->second->dev->dtype != dev->dtype )
{
if( dlog.is_crit() )
......@@ -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;
return 0;
}
if( dlog.is_info() )
{
dlog.info() << myname << "(addReg): reg=" << ModbusRTU::dat2str(r)
dlog.info() << myname << "(addReg): reg=" << ModbusRTU::dat2str(r)
<< "(id=" << id << ")"
<< " already added for " << (*it->second)
<< " already added for " << (*it->second)
<< " Ignore register params for " << xmlit.getProp("name") << " ..." << endl;
}
it->second->rit = it;
return it->second;
}
MBExchange::RegInfo* ri;
if( rcopy )
{
......@@ -1862,10 +1862,10 @@ MBExchange::RegInfo* MBExchange::addReg( RegMap& mp, RegID id, ModbusRTU::Modbus
}
ri->id = id;
mp.insert(RegMap::value_type(id,ri));
ri->rit = mp.find(id);
return ri;
}
// ------------------------------------------------------------------------------------------
......@@ -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 )
return &(*it);
}
plist.push_back(p);
PList::iterator it = plist.end();
it--;
......@@ -1905,12 +1905,12 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML_iterator& it )
if( p.stype == UniversalIO::UnknownIOType )
{
if( dlog.is_crit() )
dlog.crit() << myname << "(IOBase::readItem): неизвестный iotype=: "
dlog.crit() << myname << "(IOBase::readItem): неизвестный iotype=: "
<< stype << " for " << it.getProp("name") << endl;
return false;
}
}
string sbit(it.getProp(prop_prefix + "nbit"));
if( !sbit.empty() )
{
......@@ -1918,13 +1918,13 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML_iterator& it )
if( p.nbit < 0 || p.nbit >= ModbusRTU::BitsPerData )
{
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;
return false;
}
}
if( p.nbit > 0 &&
if( p.nbit > 0 &&
( p.stype == UniversalIO::AI ||
p.stype == UniversalIO::AO ) )
{
......@@ -1940,12 +1940,12 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML_iterator& it )
if( p.nbyte < 0 || p.nbyte > VTypes::Byte::bsize )
{
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;
return false;
}
}
string vt(it.getProp(prop_prefix + "vtype"));
if( vt.empty() )
{
......@@ -1958,8 +1958,8 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML_iterator& it )
if( v == VTypes::vtUnknown )
{
if( dlog.is_crit() )
dlog.crit() << myname << "(initRSProperty): Unknown tcp_vtype='" << vt << "' for "
<< it.getProp("name")
dlog.crit() << myname << "(initRSProperty): Unknown tcp_vtype='" << vt << "' for "
<< it.getProp("name")
<< endl;
return false;
......@@ -1976,10 +1976,10 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, MBExchange::RTUD
{
r->dev = dev;
r->mbval = it.getIntProp("default");
if( dev->dtype == MBExchange::dtRTU )
{
// dlog.info() << myname << "(initRegInfo): init RTU.."
// dlog.info() << myname << "(initRegInfo): init RTU.."
}
else if( dev->dtype == MBExchange::dtMTR )
{
......@@ -1998,7 +1998,7 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, MBExchange::RTUD
r->mbfunc = RTUStorage::getFunction(r->rtuJack,r->rtuChan,t);
// т.к. с RTU188 свой обмен
// mbreg и mbfunc поля не используются
// mbreg и mbfunc поля не используются
return true;
}
......@@ -2009,7 +2009,7 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, MBExchange::RTUD
<< "' for " << it.getProp("name") << endl;
return false;
}
if( mbregFromID )
{
if( it.getProp("id").empty() )
......@@ -2054,7 +2054,7 @@ bool MBExchange::initRTUDevice( RTUDevice* d, UniXML_iterator& it )
{
if( dlog.is_crit() )
dlog.crit() << myname << "(initRTUDevice): Unknown tcp_mbtype=" << it.getProp(prop_prefix + "mbtype")
<< ". Use: rtu "
<< ". Use: rtu "
<< " for " << it.getProp("name") << endl;
return false;
}
......@@ -2126,7 +2126,7 @@ bool MBExchange::initItem( UniXML_iterator& it )
{
string reg = it.getProp(prop_prefix + "mbreg");
if( reg.empty() )
{
{
if( dlog.is_crit() )
dlog.crit() << myname << "(initItem): unknown mbreg(" << prop_prefix << ") for " << it.getProp("name") << endl;
return false;
......@@ -2142,7 +2142,7 @@ bool MBExchange::initItem( UniXML_iterator& it )
RegID rID = genRegID(mbreg,fn);
RegInfo* ri = addReg(dev->regmap,rID,mbreg,it,dev);
if( dev->dtype == dtMTR )
{
p.rnum = MTR::wsize(ri->mtrType);
......@@ -2153,7 +2153,7 @@ bool MBExchange::initItem( UniXML_iterator& it )
return false;
}
}
if( !ri )
return false;
......@@ -2181,14 +2181,14 @@ bool MBExchange::initItem( UniXML_iterator& it )
abort(); // ABORT PROGRAM!!!!
return false;
}
if( p.nbit >= 0 && ri->slst.size() == 1 )
{
PList::iterator it2 = ri->slst.begin();
if( it2->nbit < 0 )
{
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)!"
<< " IGNORE --> " << it.getProp("name") << endl;
abort(); // ABORT PROGRAM!!!!
......@@ -2208,15 +2208,15 @@ bool MBExchange::initItem( UniXML_iterator& it )
ri->mb_initOK = true;
ri->sm_initOK = true;
}
RSProperty* p1 = addProp(ri->slst,p);
if( !p1 )
return false;
p1->reg = ri;
if( p1->rnum > 1 )
{
ri->q_count = p1->rnum;
......@@ -2234,7 +2234,7 @@ bool MBExchange::initItem( UniXML_iterator& it )
{
// Если занимает несколько регистров, а указана функция записи "одного",
// то это ошибка..
if( ri->mbfunc != ModbusRTU::fnWriteOutputRegisters &&
if( ri->mbfunc != ModbusRTU::fnWriteOutputRegisters &&
ri->mbfunc != ModbusRTU::fnForceMultipleCoils )
{
if( dlog.is_crit() )
......@@ -2244,7 +2244,7 @@ bool MBExchange::initItem( UniXML_iterator& it )
<< " for " << it.getProp("name") << endl;
abort(); // ABORT PROGRAM!!!!
return false;
return false;
}
}
}
......@@ -2288,7 +2288,7 @@ bool MBExchange::initItem( UniXML_iterator& it )
case ModbusRTU::fnForceSingleCoil:
ii.mbfunc = ModbusRTU::fnReadCoilStatus;
break;
case ModbusRTU::fnWriteOutputRegisters:
ii.mbfunc = ModbusRTU::fnReadOutputRegisters;
break;
......@@ -2298,7 +2298,7 @@ bool MBExchange::initItem( UniXML_iterator& it )
break;
default:
ii.mbfunc = ModbusRTU::fnReadOutputRegisters;
ii.mbfunc = ModbusRTU::fnReadOutputRegisters;
break;
}
}
......@@ -2307,7 +2307,7 @@ bool MBExchange::initItem( UniXML_iterator& it )
ri->mb_initOK = false;
ri->sm_initOK = false;
}
return true;
}
// ------------------------------------------------------------------------------------------
......@@ -2317,7 +2317,7 @@ bool MBExchange::initMTRitem( UniXML_iterator& it, RegInfo* p )
if( p->mtrType == MTR::mtUnknown )
{
if( dlog.is_crit() )
dlog.crit() << myname << "(readMTRItem): Unknown mtrtype '"
dlog.crit() << myname << "(readMTRItem): Unknown mtrtype '"
<< it.getProp(prop_prefix + "mtrtype")
<< "' for " << it.getProp("name") << endl;
......@@ -2331,7 +2331,7 @@ bool MBExchange::initRTU188item( UniXML_iterator& it, RegInfo* p )
{
string jack(it.getProp(prop_prefix + "jack"));
string chan(it.getProp(prop_prefix + "channel"));
if( jack.empty() )
{
if( dlog.is_crit() )
......@@ -2355,12 +2355,12 @@ bool MBExchange::initRTU188item( UniXML_iterator& it, RegInfo* p )
<< " for " << it.getProp("name") << endl;
return false;
}
p->rtuChan = UniSetTypes::uni_atoi(chan);
if( dlog.debugging(Debug::LEVEL2) )
dlog[Debug::LEVEL2] << myname << "(readRTU188Item): add jack='" << jack << "'"
<< " channel='" << p->rtuChan << "'" << endl;
dlog[Debug::LEVEL2] << myname << "(readRTU188Item): add jack='" << jack << "'"
<< " channel='" << p->rtuChan << "'" << endl;
return true;
}
......@@ -2372,7 +2372,7 @@ std::ostream& operator<<( std::ostream& os, const MBExchange::DeviceType& dt )
case MBExchange::dtRTU:
os << "RTU";
break;
case MBExchange::dtMTR:
os << "MTR";
break;
......@@ -2380,12 +2380,12 @@ std::ostream& operator<<( std::ostream& os, const MBExchange::DeviceType& dt )
case MBExchange::dtRTU188:
os << "RTU188";
break;
default:
os << "Unknown device type (" << (int)dt << ")";
break;
}
return os;
}
// -----------------------------------------------------------------------------
......@@ -2404,8 +2404,8 @@ std::ostream& operator<<( std::ostream& os, const MBExchange::RSProperty& p )
{
os << p.cal
<< " cdiagram=" << ( p.cdiagram ? "yes" : "no" );
}
}
return os;
}
// -----------------------------------------------------------------------------
......@@ -2447,7 +2447,7 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM
d->second->ask_every_reg = it.getIntProp("ask_every_reg");
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;
string s(it.getProp("respondSensor"));
......@@ -2481,7 +2481,7 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM
return false;
}
}
if( dlog.is_info() )
dlog.info() << myname << "(initDeviceInfo): add addr=" << ModbusRTU::addr2str(a) << endl;
int tout = it.getPIntProp("timeout",5000);
......@@ -2492,7 +2492,7 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM
// -----------------------------------------------------------------------------
bool MBExchange::activateObject()
{
// блокирование обработки Starsp
// блокирование обработки Starsp
// пока не пройдёт инициализация датчиков
// см. sysCommand()
{
......@@ -2527,7 +2527,7 @@ void MBExchange::processingMessage(UniSetTypes::VoidMessage *msg)
timerInfo(&tm);
}
break;
case Message::SensorInfo:
{
SensorMessage sm( msg );
......@@ -2568,7 +2568,7 @@ void MBExchange::sysCommand( UniSetTypes::SystemMessage *sm )
if( dlog.is_crit() )
dlog.crit() << myname << "(sysCommand): ************* ITEM MAP EMPTY! terminated... *************" << endl;
raise(SIGTERM);
return;
return;
}
if( dlog.is_info() )
......@@ -2576,7 +2576,7 @@ void MBExchange::sysCommand( UniSetTypes::SystemMessage *sm )
if( !shm->isLocalwork() )
initDeviceList();
waitSMReady();
// подождать пока пройдёт инициализация датчиков
......@@ -2584,16 +2584,16 @@ void MBExchange::sysCommand( UniSetTypes::SystemMessage *sm )
msleep(initPause);
PassiveTimer ptAct(activateTimeout);
while( !activated && !ptAct.checkTime() )
{
{
cout << myname << "(sysCommand): wait activate..." << endl;
msleep(300);
if( activated )
break;
}
if( !activated && dlog.debugging(Debug::CRIT) )
dlog.crit() << myname << "(sysCommand): ************* don`t activate?! ************" << endl;
{
UniSetTypes::uniset_rwmutex_rlock l(mutex_start);
askSensors(UniversalIO::UIONotify);
......@@ -2610,11 +2610,11 @@ void MBExchange::sysCommand( UniSetTypes::SystemMessage *sm )
case SystemMessage::Finish:
askSensors(UniversalIO::UIODontNotify);
break;
case SystemMessage::WatchDog:
{
// ОПТИМИЗАЦИЯ (защита от двойного перезаказа при старте)
// Если идёт локальная работа
// Если идёт локальная работа
// (т.е. MBExchange запущен в одном процессе с SharedMemory2)
// то обрабатывать WatchDog не надо, т.к. мы и так ждём готовности SM
// при заказе датчиков, а если SM вылетит, то вместе с этим процессом(MBExchange)
......@@ -2668,10 +2668,10 @@ void MBExchange::askSensors( UniversalIO::UIOCommand cmd )
if( !shm->waitSMworking(test_id,activateTimeout,50) )
{
ostringstream err;
err << myname
<< "(askSensors): Не дождались готовности(work) SharedMemory к работе в течение "
err << myname
<< "(askSensors): Не дождались готовности(work) SharedMemory к работе в течение "
<< activateTimeout << " мсек";
dlog.crit() << err.str() << endl;
kill(SIGTERM,getpid()); // прерываем (перезапускаем) процесс...
throw SystemError(err.str());
......@@ -2692,7 +2692,7 @@ void MBExchange::askSensors( UniversalIO::UIOCommand cmd )
if( dlog.is_warn() )
dlog.warn() << myname << "(askSensors): 'sidExchangeMode' catch..." << std::endl;
}
for( MBExchange::RTUDeviceMap::iterator it1=rmap.begin(); it1!=rmap.end(); ++it1 )
{
RTUDevice* d(it1->second);
......@@ -2720,7 +2720,7 @@ void MBExchange::askSensors( UniversalIO::UIOCommand cmd )
{
if( !isWriteFunction(it->second->mbfunc) )
continue;
for( PList::iterator i=it->second->slst.begin(); i!=it->second->slst.end(); ++i )
{
try
......@@ -2766,16 +2766,16 @@ void MBExchange::sensorInfo( UniSetTypes::SensorMessage* sm )
{
if( !isWriteFunction(it->second->mbfunc) )
continue;
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( 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)
<< " val=" << sm->value
<< " val=" << sm->value
<< " mb_initOK=" << i->reg->mb_initOK << endl;
}
......@@ -2847,7 +2847,7 @@ void MBExchange::poll()
continue;
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;
d->resp_real = false;
......@@ -2855,7 +2855,7 @@ void MBExchange::poll()
{
if( !checkProcActive() )
return;
try
{
if( d->dtype==MBExchange::dtRTU || d->dtype==MBExchange::dtMTR )
......@@ -2865,7 +2865,7 @@ void MBExchange::poll()
}
}
catch( ModbusRTU::mbException& ex )
{
{
// if( d->resp_real )
// {
if( dlog.debugging(Debug::LEVEL3) )
......@@ -2888,7 +2888,7 @@ void MBExchange::poll()
if( d->resp_real )
allNotRespond = false;
if( it==d->regmap.end() )
break;
......@@ -2917,7 +2917,7 @@ void MBExchange::poll()
// update SharedMemory...
updateSM();
// check thresholds
for( MBExchange::RTUDeviceMap::iterator it1=rmap.begin(); it1!=rmap.end(); ++it1 )
{
......@@ -2932,7 +2932,7 @@ void MBExchange::poll()
IOBase::processingThreshold( &(*i),shm,force);
}
}
if( trReopen.hi(allNotRespond) )
ptReopen.reset();
......@@ -2958,15 +2958,15 @@ bool MBExchange::RTUDevice::checkRespond()
resp_state = resp_real;
return (prev != resp_state);
}
if( resp_trTimeout.hi(resp_state && !resp_real) )
resp_ptTimeout.reset();
if( resp_real )
resp_state = true;
else if( resp_state && !resp_real && resp_ptTimeout.checkTime() )
resp_state = false;
resp_state = false;
// если ещё не инициализировали значение в SM
// то возвращаем true, чтобы оно принудительно сохранилось
if( !resp_init )
......@@ -2991,10 +2991,10 @@ void MBExchange::updateRespondSensors()
for( MBExchange::RTUDeviceMap::iterator it1=rmap.begin(); it1!=rmap.end(); ++it1 )
{
RTUDevice* d(it1->second);
if( chanTimeout )
it1->second->resp_real = false;
if( dlog.debugging(Debug::LEVEL4) )
{
dlog[Debug::LEVEL4] << myname << ": check respond addr=" << ModbusRTU::addr2str(d->mbaddr)
......@@ -3029,7 +3029,7 @@ void MBExchange::execute()
askTimer(tmExchange,0);
}
catch(...){}
initMB(false);
while(1)
......
......@@ -28,7 +28,7 @@ class MBExchange:
{
public:
MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID, SharedMemory* ic=0,
const std::string prefix="mb" );
const std::string& prefix="mb" );
virtual ~MBExchange();
/*! глобальная функция для вывода help-а */
......
......@@ -10,8 +10,8 @@ using namespace std;
using namespace UniSetTypes;
using namespace UniSetExtensions;
// -----------------------------------------------------------------------------
MBTCPMaster::MBTCPMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId,
SharedMemory* ic, const std::string prefix ):
MBTCPMaster::MBTCPMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId,
SharedMemory* ic, const std::string& prefix ):
MBExchange(objId,shmId,ic,prefix),
force_disconnect(true),
mbtcp(0),
......@@ -84,7 +84,7 @@ ModbusClient* MBTCPMaster::initMB( bool reopen )
{
if( !reopen )
return mbtcp;
delete mbtcp;
mb = 0;
mbtcp = 0;
......@@ -94,7 +94,7 @@ ModbusClient* MBTCPMaster::initMB( bool reopen )
{
ost::Thread::setException(ost::Thread::throwException);
mbtcp = new ModbusTCPMaster();
ost::InetAddress ia(iaddr.c_str());
mbtcp->connect(ia,port);
mbtcp->setForceDisconnect(force_disconnect);
......@@ -103,12 +103,12 @@ ModbusClient* MBTCPMaster::initMB( bool reopen )
mbtcp->setTimeout(recv_timeout);
mbtcp->setSleepPause(sleepPause_usec);
mbtcp->setAfterSendPause(aftersend_pause);
if( dlog.is_info() )
dlog.info() << myname << "(init): ipaddr=" << iaddr << " port=" << port << endl;
if( dlog.debugging(Debug::LEVEL9) )
mbtcp->setLog(dlog);
}
......@@ -175,9 +175,9 @@ void MBTCPMaster::help_print( int argc, const char* const* argv )
cout << "--prefix-persistent-connection 0,1 - Не закрывать соединение на каждом цикле опроса" << endl;
}
// -----------------------------------------------------------------------------
MBTCPMaster* MBTCPMaster::init_mbmaster( int argc, const char* const* argv,
UniSetTypes::ObjectId icID, SharedMemory* ic,
const std::string prefix )
MBTCPMaster* MBTCPMaster::init_mbmaster( int argc, const char* const* argv,
UniSetTypes::ObjectId icID, SharedMemory* ic,
const std::string& prefix )
{
string name = conf->getArgParam("--" + prefix + "-name","MBTCPMaster1");
if( name.empty() )
......@@ -191,7 +191,7 @@ MBTCPMaster* MBTCPMaster::init_mbmaster( int argc, const char* const* argv,
if( ID == UniSetTypes::DefaultObjectId )
{
if( dlog.debugging(Debug::CRIT) )
dlog.crit() << "(MBTCPMaster): идентификатор '" << name
dlog.crit() << "(MBTCPMaster): идентификатор '" << name
<< "' не найден в конф. файле!"
<< " в секции " << conf->getObjectsSection() << endl;
return 0;
......
......@@ -193,13 +193,13 @@ class MBTCPMaster:
{
public:
MBTCPMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID, SharedMemory* ic=0,
const std::string prefix="mbtcp" );
const std::string& prefix="mbtcp" );
virtual ~MBTCPMaster();
/*! глобальная функция для инициализации объекта */
static MBTCPMaster* init_mbmaster( int argc, const char* const* argv,
UniSetTypes::ObjectId shmID, SharedMemory* ic=0,
const std::string prefix="mbtcp" );
const std::string& prefix="mbtcp" );
/*! глобальная функция для вывода help-а */
static void help_print( int argc, const char* const* argv );
......
......@@ -10,8 +10,8 @@ using namespace std;
using namespace UniSetTypes;
using namespace UniSetExtensions;
// -----------------------------------------------------------------------------
MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId,
SharedMemory* ic, const std::string prefix ):
MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId,
SharedMemory* ic, const std::string& prefix ):
MBExchange(objId,shmId,ic,prefix),
force_disconnect(true),
pollThread(0),
......@@ -134,7 +134,7 @@ checkThread(0)
dlog.crit() << err.str() << endl;
throw UniSetTypes::SystemError(err.str());
}
mblist.sort();
mbi = mblist.rbegin();
......@@ -178,7 +178,7 @@ ModbusClient* MBTCPMultiMaster::initMB( bool reopen )
if( checktime <=0 )
{
mbi++;
if( mbi == mblist.rend() )
if( mbi == mblist.rend() )
mbi = mblist.rbegin();
mbi->init();
......@@ -250,7 +250,7 @@ bool MBTCPMultiMaster::MBSlaveInfo::init()
if( mbtcp->isConnection() && dlog.is_info() )
dlog.info() << "(init): " << myname << " connect OK" << endl;
initOK = true;
}
return mbtcp->isConnection();
......@@ -337,7 +337,7 @@ void MBTCPMultiMaster::check_thread()
catch(...){}
{
{
uniset_rwmutex_wrlock l(tcpMutex);
it->respond = r;
}
......@@ -375,9 +375,9 @@ void MBTCPMultiMaster::help_print( int argc, const char* const* argv )
cout << " Переключение на следующий канал зависит от '--prefix-timeout'" << endl;
}
// -----------------------------------------------------------------------------
MBTCPMultiMaster* MBTCPMultiMaster::init_mbmaster( int argc, const char* const* argv,
UniSetTypes::ObjectId icID, SharedMemory* ic,
const std::string prefix )
MBTCPMultiMaster* MBTCPMultiMaster::init_mbmaster( int argc, const char* const* argv,
UniSetTypes::ObjectId icID, SharedMemory* ic,
const std::string& prefix )
{
string name = conf->getArgParam("--" + prefix + "-name","MBTCPMultiMaster1");
if( name.empty() )
......@@ -389,7 +389,7 @@ MBTCPMultiMaster* MBTCPMultiMaster::init_mbmaster( int argc, const char* const*
ObjectId ID = conf->getObjectID(name);
if( ID == UniSetTypes::DefaultObjectId )
{
dlog.crit() << "(MBTCPMultiMaster): идентификатор '" << name
dlog.crit() << "(MBTCPMultiMaster): идентификатор '" << name
<< "' не найден в конф. файле!"
<< " в секции " << conf->getObjectsSection() << endl;
return 0;
......
......@@ -215,13 +215,13 @@ class MBTCPMultiMaster:
{
public:
MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmID, SharedMemory* ic=0,
const std::string prefix="mbtcp" );
const std::string& prefix="mbtcp" );
virtual ~MBTCPMultiMaster();
/*! глобальная функция для инициализации объекта */
static MBTCPMultiMaster* init_mbmaster( int argc, const char* const* argv,
UniSetTypes::ObjectId shmID, SharedMemory* ic=0,
const std::string prefix="mbtcp" );
const std::string& prefix="mbtcp" );
/*! глобальная функция для вывода help-а */
static void help_print( int argc, const char* const* argv );
......
......@@ -9,7 +9,7 @@ using namespace UniSetTypes;
using namespace UniSetExtensions;
// -----------------------------------------------------------------------------
RTUExchange::RTUExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, SharedMemory* ic,
const std::string prefix_ ):
const std::string& prefix_ ):
MBExchange(objId,shmId,ic,prefix_),
mbrtu(0),
defSpeed(ComPort::ComSpeed38400),
......@@ -329,7 +329,7 @@ void RTUExchange::poll()
}
// -----------------------------------------------------------------------------
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");
if( name.empty() )
......
......@@ -14,13 +14,13 @@ class RTUExchange:
{
public:
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();
/*! глобальная функция для инициализации объекта */
static RTUExchange* init_rtuexchange( int argc, const char* const* argv,
UniSetTypes::ObjectId shmID, SharedMemory* ic=0,
const std::string prefix="rs" );
const std::string& prefix="rs" );
/*! глобальная функция для вывода help-а */
static void help_print( int argc, const char* const* argv );
......
......@@ -12,7 +12,7 @@ using namespace UniSetTypes;
using namespace UniSetExtensions;
// -----------------------------------------------------------------------------
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),
shm( new SMInterface(shmId,&ui,objId,ic) ),
prefix(prefix)
......@@ -59,9 +59,9 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID )
bool overwrite = it.getPIntProp("overwrite",0);
if( RRDServer::dlog.is_info() )
RRDServer::dlog.info() << myname << "(init): add rrd: file='" << fname
<< " " << ff << "='" << fv
<< "' create='" << cf << "'"
RRDServer::dlog.info() << myname << "(init): add rrd: file='" << fname
<< " " << ff << "='" << fv
<< "' create='" << cf << "'"
<< " step=" << rrdstep
<< endl;
......@@ -188,7 +188,7 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID )
if( !overwrite && file_exist(fname) )
{
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;
}
else
......@@ -214,11 +214,11 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID )
rrdlist.push_back(rrd);
}
/* catch( Exception& ex )
{
{
RRDServer::dlog.crit() << myname << "(init) " << ex << std::endl;
}
catch( ... )
{
{
RRDServer::dlog.crit() << myname << "(init): catch ..." << std::endl;
}
*/
......@@ -228,14 +228,14 @@ void RRDServer::help_print( int argc, const char* const* argv )
{
cout << " Default prefix='rrd'" << 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-max val - max value for heartbeat sensor." << endl;
}
// -----------------------------------------------------------------------------
RRDServer* RRDServer::init_rrdstorage( int argc, const char* const* argv,
UniSetTypes::ObjectId icID, SharedMemory* ic,
const std::string prefix )
RRDServer* RRDServer::init_rrdstorage( int argc, const char* const* argv,
UniSetTypes::ObjectId icID, SharedMemory* ic,
const std::string& prefix )
{
string name = conf->getArgParam("--" + prefix + "-name","RRDServer");
if( name.empty() )
......@@ -247,7 +247,7 @@ RRDServer* RRDServer::init_rrdstorage( int argc, const char* const* argv,
ObjectId ID = conf->getObjectID(name);
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;
return 0;
}
......@@ -276,7 +276,7 @@ void RRDServer::askSensors( UniversalIO::UIOCommand cmd )
try
{
shm->askSensor(s->first,cmd);
}
}
catch( std::exception& ex )
{
if( RRDServer::dlog.is_crit() )
......@@ -296,7 +296,7 @@ void RRDServer::sysCommand( UniSetTypes::SystemMessage* sm )
try
{
askTimer(it->tid,it->sec*1000);
}
}
catch( std::exception& ex )
{
if( RRDServer::dlog.is_crit() )
......
......@@ -59,13 +59,13 @@ class RRDServer:
{
public:
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();
/*! глобальная функция для инициализации объекта */
static RRDServer* init_rrdstorage( int argc, const char* const* argv,
UniSetTypes::ObjectId shmID, SharedMemory* ic=0,
const std::string prefix="rrd" );
const std::string& prefix="rrd" );
/*! глобальная функция для вывода help-а */
static void help_print( int argc, const char* const* argv );
......
......@@ -8,8 +8,8 @@ using namespace std;
using namespace UniSetTypes;
using namespace UniSetExtensions;
// -----------------------------------------------------------------------------
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 ):
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 ):
s_field(s_f),
s_fvalue(s_val),
shm(smi),
......
......@@ -19,8 +19,8 @@
class UNetSender
{
public:
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 );
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 );
~UNetSender();
......
......@@ -18,7 +18,7 @@ UniExchange::NetNodeInfo::NetNodeInfo():
}
// --------------------------------------------------------------------------
UniExchange::UniExchange( UniSetTypes::ObjectId id, UniSetTypes::ObjectId shmID,
SharedMemory* ic, const std::string prefix ):
SharedMemory* ic, const std::string& prefix ):
IOController(id),
shm(0),
polltime(200),
......@@ -64,7 +64,7 @@ smReadyTimeout(15000)
for( ; it.getCurrent(); it.goNext() )
{
UniSetTypes::ObjectId id;
string n(it.getProp("id"));
if( !n.empty() )
id = it.getIntProp("id");
......@@ -73,7 +73,7 @@ smReadyTimeout(15000)
id = conf->getControllerID( it.getProp("name") );
n = it.getProp("name");
}
if( id == DefaultObjectId )
throw SystemError("(UniExchange): Uknown ID for " + n );
......@@ -90,7 +90,7 @@ smReadyTimeout(15000)
if( id == DefaultObjectId )
throw SystemError("(UniExchange): Uknown ID for node=" + n1 );
NetNodeInfo ni;
ni.oref = CORBA::Object::_nil();
ni.id = id;
......@@ -101,7 +101,7 @@ smReadyTimeout(15000)
nlst.push_back(ni);
}
}
if( shm->isLocalwork() )
{
readConfiguration();
......@@ -168,7 +168,7 @@ void UniExchange::execute()
{
dlog.info() << myname << "(execute): catch ..." << endl;
}
if( it->sidConnection != DefaultObjectId )
{
try
......@@ -179,8 +179,8 @@ void UniExchange::execute()
{
if( dlog.is_crit() )
dlog.crit()<< myname << "(execute): sensor not avalible "
<< conf->oind->getNameById( it->sidConnection)
<< endl;
<< conf->oind->getNameById( it->sidConnection)
<< endl;
}
}
......@@ -193,7 +193,7 @@ void UniExchange::execute()
updateLocalData();
ptUpdate.reset();
}
msleep(polltime);
}
}
......@@ -207,7 +207,7 @@ void UniExchange::NetNodeInfo::update( IOController_i::ShortMapSeq_var& map, SMI
// init new map...
smap.resize(map->length());
}
int size = map->length();
for( int i=0; i<size; i++ )
{
......@@ -221,7 +221,7 @@ void UniExchange::NetNodeInfo::update( IOController_i::ShortMapSeq_var& map, SMI
}
s->val = m->value;
try
{
/*
......@@ -285,7 +285,7 @@ void UniExchange::updateLocalData()
dlog.warn() << "(update): catch ..." << endl;
}
}
init_ok = true;
}
// --------------------------------------------------------------------------
......@@ -346,12 +346,12 @@ void UniExchange::sysCommand( SystemMessage* sm )
askSensors(UniversalIO::UIONotify);
break;
}
case SystemMessage::FoldUp:
case SystemMessage::Finish:
askSensors(UniversalIO::UIODontNotify);
break;
case SystemMessage::WatchDog:
askSensors(UniversalIO::UIONotify);
break;
......@@ -372,12 +372,12 @@ void UniExchange::sensorInfo( UniSetTypes::SensorMessage* sm )
// -----------------------------------------------------------------------------
void UniExchange::timerInfo( UniSetTypes::TimerMessage* tm )
{
}
// -----------------------------------------------------------------------------
UniExchange* UniExchange::init_exchange( int argc, const char* const* argv,
UniSetTypes::ObjectId icID, SharedMemory* ic,
const std::string prefix )
UniSetTypes::ObjectId icID, SharedMemory* ic,
const std::string& prefix )
{
string p("--" + prefix + "-name");
string nm(UniSetTypes::getArgParam(p,argc,argv,"UniExchange"));
......@@ -415,7 +415,7 @@ void UniExchange::readConfiguration()
if( UniSetTypes::check_filter(it,s_field,s_fvalue) )
initItem(it);
}
// readconf_ok = true;
}
// ------------------------------------------------------------------------------------------
......@@ -440,11 +440,11 @@ bool UniExchange::initItem( UniXML_iterator& it )
if( i.id <=0 )
i.id = DefaultObjectId;
}
if( i.id == DefaultObjectId )
{
if( dlog )
dlog.crit() << myname << "(initItem): Unknown ID for "
dlog.crit() << myname << "(initItem): Unknown ID for "
<< it.getProp("name") << endl;
return false;
}
......@@ -453,7 +453,7 @@ bool UniExchange::initItem( UniXML_iterator& it )
if( i.type == UniversalIO::UnknownIOType )
{
if( dlog )
dlog.crit() << myname << "(initItem): Unknown iotype= "
dlog.crit() << myname << "(initItem): Unknown iotype= "
<< it.getProp("iotype") << " for " << it.getProp("name") << endl;
return false;
}
......
......@@ -11,14 +11,14 @@
// -----------------------------------------------------------------------------
/*!
\page pageUniExchange Обмен между узлами на основе TCP/IP (UniNet).
\par Обмен построен на основе функций IOControl-ера получения списка дискретных
и аналоговых датчиков. Работает через удалённые CORBA-вызовы.
\par Процесс считывает из конфигурационного файла список узлов которые необходимо
опрашивать (точнее список IOControl-еров), запускается поток обмена, в котором
эти узлы ПОСЛЕДОВАТЕЛЬНО опрашиваются..
\par Пример записи в конфигурационном файле для опроса пяти узлов...
\code
<UniExchange name="UniExchange">
......@@ -36,15 +36,15 @@ class UniExchange:
public IOController
{
public:
UniExchange( UniSetTypes::ObjectId id, UniSetTypes::ObjectId shmID,
SharedMemory* ic=0, const std::string prefix="unet" );
UniExchange( UniSetTypes::ObjectId id, UniSetTypes::ObjectId shmID,
SharedMemory* ic=0, const std::string& prefix="unet" );
virtual ~UniExchange();
void execute();
static UniExchange* init_exchange( int argc, const char* const* argv,
UniSetTypes::ObjectId shmID, SharedMemory* ic=0,
const std::string prefix="unet" );
const std::string& prefix="unet" );
/*! глобальная функция для вывода help-а */
static void help_print( int argc, const char** argv );
......@@ -64,7 +64,7 @@ class UniExchange:
std::string s_field;
std::string s_fvalue;
SMInterface* shm;
struct SInfo
{
SInfo():
......@@ -79,13 +79,13 @@ class UniExchange:
UniversalIO::IOType type;
UniSetTypes::uniset_rwmutex val_lock;
};
typedef std::vector<SInfo> SList;
struct NetNodeInfo
{
NetNodeInfo();
CORBA::Object_var oref;
IOController_i_var shm;
UniSetTypes::ObjectId id;
......@@ -93,10 +93,10 @@ class UniExchange:
UniSetTypes::ObjectId sidConnection; /*!< датчик связи */
IOController::IOStateList::iterator conn_it;
SList smap;
void update(IOController_i::ShortMapSeq_var& map, SMInterface* shm );
};
typedef std::list<NetNodeInfo> NetNodeList;
NetNodeList nlst;
......@@ -105,15 +105,15 @@ class UniExchange:
bool initItem( UniXML_iterator& it );
void updateLocalData();
void initIterators();
int polltime;
PassiveTimer ptUpdate;
bool init_ok;
SList mymap;
size_t maxIndex;
int smReadyTimeout;
private:
};
// -----------------------------------------------------------------------------
......
......@@ -25,7 +25,7 @@ class Calibration
{
public:
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();
......@@ -75,7 +75,7 @@ class Calibration
\param confile - файл содержащий данные
\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("")
// ----------------------------------------------------------------------------
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),
myname(name)
{
......@@ -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;
try
......
......@@ -43,7 +43,7 @@ namespace UniSetTypes
LimitTimers():Exception("LimitTimers"){ printException(); }
/*! Конструктор позволяющий вывести в сообщении об ошибке дополнительную информацию err */
LimitTimers(const std::string err):Exception(err){ printException(); }
LimitTimers(const std::string& err):Exception(err){ printException(); }
};
};
//@}
......
......@@ -66,37 +66,37 @@ public:
TwoBits=3
};
ComPort( const std::string comDevice, bool nocreate=false );
ComPort( const std::string& comDevice, bool nocreate=false );
virtual ~ComPort();
inline std::string getDevice(){ return dev; }
void setSpeed( Speed s );
void setSpeed( std::string speed );
void setSpeed( const std::string& 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 );
void setParity(Parity);
void setCharacterSize(CharacterSize);
void setStopBits(StopBits sBit);
virtual void setTimeout(int timeout);
void setWaiting(bool waiting);
inline int getTimeout(){ return uTimeout*1000; } // msec
virtual unsigned char receiveByte();
virtual void sendByte(unsigned char x);
virtual int receiveBlock(unsigned char*msg,int len);
virtual int sendBlock(unsigned char*msg,int len);
void setBlocking(bool blocking);
virtual void cleanupChannel();
virtual void reopen();
protected:
void openPort();
......@@ -109,9 +109,9 @@ protected:
bool waiting;
Speed speed;
std::string dev;
virtual unsigned char m_receiveByte( bool wait );
private:
struct termios oldTermios;
};
......
......@@ -45,8 +45,8 @@ class SystemGuard;
namespace UniSetTypes
{
/*!
Конфигуратор системы
\note В случае обнаружения критической ошибки в настроечном файле файле.
Конфигуратор системы
\note В случае обнаружения критической ошибки в настроечном файле файле.
Вырабатывает исключение и прекращает работу.
*/
class Configuration
......@@ -55,30 +55,30 @@ namespace UniSetTypes
virtual ~Configuration();
/*! конфигурирование xml-файлом ( предпочтительный способ ) */
Configuration( int argc, const char* const* argv, const std::string xmlfile="" );
Configuration( int argc, const char* const* argv, const std::string& xmlfile="" );
/*! конфигурирование 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,
const std::string fileConf, UniSetTypes::ObjectInfo* objectsMap );
const std::string& fileConf, UniSetTypes::ObjectInfo* objectsMap );
/// Получить значение полей с путём path
std::string getField(const std::string path);
std::string getField(const std::string& path);
/// Получить число из поле с путём path
int getIntField(const std::string path);
int getIntField(const std::string& path);
/// Получить число из поле с путём path (или def, если значение <= 0)
int getPIntField(const std::string path, int def);
xmlNode* findNode(xmlNode* node, const std::string searchnode, const std::string name = "" );
int getPIntField(const std::string& path, int def);
xmlNode* findNode(xmlNode* node, const std::string& searchnode, const std::string& name="" );
// Получить узел
xmlNode* getNode(const std::string& path);
// Получить указанное свойство пути
std::string getProp(xmlNode*, const std::string name);
int getIntProp(xmlNode*, const std::string name);
int getPIntProp(xmlNode*, const std::string name, int def);
std::string getProp(xmlNode*, const std::string& name);
int getIntProp(xmlNode*, const std::string& name);
int getPIntProp(xmlNode*, const std::string& name, int def);
// Получить указанное свойство по имени узла
std::string getPropByNodeName(const std::string& nodename, const std::string& prop);
......@@ -90,8 +90,8 @@ namespace UniSetTypes
inline ObjectId getDBServer() const { return localDBServer; } /*!< получение идентификатора DBServer-а */
inline ObjectId getLocalNode() const { return localNode; } /*!< получение идентификатора локального узла */
inline std::string getLocalNodeName() const { return localNodeName; } /*!< получение название локального узла */
inline const std::string getNSName() const { return NSName; }
inline const std::string getNSName() const { return NSName; }
// repository
inline std::string getRootSection() const { return secRoot; }
inline std::string getSensorsSection() const { return secSensors; }
......@@ -106,18 +106,18 @@ namespace UniSetTypes
xmlNode* getXMLNodesSection();
xmlNode* getXMLObjectNode( UniSetTypes::ObjectId );
UniversalIO::IOType getIOType( UniSetTypes::ObjectId );
UniversalIO::IOType getIOType( const std::string name );
UniversalIO::IOType getIOType( const std::string& name );
// net
inline unsigned int getCountOfNet() const { return countOfNet; }
inline unsigned int getRepeatTimeout() const { return repeatTimeout; }
inline unsigned int getRepeatCount() const { return repeatCount; }
UniSetTypes::ObjectId getSensorID( const std::string name );
UniSetTypes::ObjectId getControllerID( const std::string name );
UniSetTypes::ObjectId getObjectID( const std::string name );
UniSetTypes::ObjectId getServiceID( const std::string name );
UniSetTypes::ObjectId getNodeID( const std::string name, const std::string alias="" );
UniSetTypes::ObjectId getSensorID( const std::string& name );
UniSetTypes::ObjectId getControllerID( const std::string& name );
UniSetTypes::ObjectId getObjectID( const std::string& name );
UniSetTypes::ObjectId getServiceID( const std::string& name );
UniSetTypes::ObjectId getNodeID( const std::string& name, const std::string& alias="" );
inline const std::string getConfFileName() const { return fileConfName; }
inline std::string getImagesDir() const { return imagesDir; } // временно
......@@ -135,14 +135,14 @@ namespace UniSetTypes
inline bool isLocalIOR(){ return localIOR; }
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 */
int getArgInt(const std::string name, const std::string defval="");
int getArgInt(const std::string& name, const std::string& defval="");
/*! получить числовое значение параметра, но если оно не положительное, вернуть 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, int defval);
int getArgPInt(const std::string& name, const std::string& strdefval, int defval);
xmlNode* initDebug( DebugStream& deb, const std::string& nodename );
......@@ -155,10 +155,10 @@ namespace UniSetTypes
{
return lnodes.end();
}
/*! интерфейс к карте объектов */
ObjectIndex* oind;
/*! интерфейс к работе с локальнымми ior-файлами */
IORFile iorfile;
......@@ -172,18 +172,18 @@ namespace UniSetTypes
Configuration();
virtual void initConfiguration(int argc, const char* const* argv);
void createNodesList();
virtual void initNode( UniSetTypes::NodeInfo& ninfo, UniXML_iterator& it);
void initRepSections();
std::string getRepSectionName(const std::string sec, xmlNode* secnode=0 );
void setConfFileName(const std::string fn="");
std::string getRepSectionName(const std::string& sec, xmlNode* secnode=0 );
void setConfFileName( const std::string& fn="" );
void initParameters();
void setLocalNode( std::string nodename );
std::string getPort(const std::string port="");
void setLocalNode( const std::string& nodename );
std::string getPort( const std::string& port="" );
friend class ::SystemGuard;
// friend bool SystemGuard::pingNode();
std::string rootDir;
......@@ -193,7 +193,7 @@ namespace UniSetTypes
const char* const* _argv;
CORBA::ORB_var orb;
CORBA::PolicyList policyList;
std::string NSName; /*!< имя сервиса именования на ланной машине (обычно "NameService") */
unsigned int countOfNet; /*!< количество резервных каналов */
unsigned int repeatCount; /*!< количество попыток получить доступ к удаленному объекту
......@@ -207,7 +207,7 @@ namespace UniSetTypes
std::string secRoot;
std::string secSensors;
std::string secObjects;
std::string secControlles;
std::string secControlles;
std::string secServices;
// xml
......@@ -219,7 +219,7 @@ namespace UniSetTypes
ObjectId localDBServer;
ObjectId localNode;
std::string localNodeName;
std::string fileConfName;
std::string imagesDir;
......@@ -232,22 +232,22 @@ namespace UniSetTypes
std::string lockDir;
bool localIOR;
bool transientIOR;
int heartbeat_msec;
};
/*! Глобальный указатель на конфигуратор */
extern Configuration* conf;
/*! Глобальный объект для вывода логов */
extern DebugStream ulog;
// Инициализация UniSetTypes::conf.
// ( учитываются параметры командной строки --confile и --id-from-config )
void uniset_init( int argc, const char* const* argv, const std::string& xmlfile="configure.xml" );
} // end of UniSetTypes namespace
#endif // Configuration_H_
......@@ -112,10 +112,10 @@ public:
}
/// Sets the debugstreams' logfile to f.
void logFile(const std::string f);
void logFile( const std::string& f );
inline std::string getLogFile(){ return fname; }
/// Returns true if t is part of the current debug level.
inline bool debugging(Debug::type t = Debug::ANY) const
{ return (dt & t); }
......@@ -138,13 +138,13 @@ public:
return debug(t);
}
/**
/**
Вывод продолжения логов (без даты и времени)
*/
inline std::ostream& to_end(Debug::type t)
{ return this->operator()(t); }
/**
/**
Вывод продолжения логов (без даты и времени) "log()"
*/
std::ostream& operator()(Debug::type t);
......@@ -189,11 +189,11 @@ public:
std::ostream& printDate(Debug::type t, char brk='/');
std::ostream& printTime(Debug::type t, char brk=':');
std::ostream& printDateTime(Debug::type t);
std::ostream& pos(int x, int y);
const DebugStream &operator=(const DebugStream& r);
private:
/// The current debug level
Debug::type dt;
......@@ -205,7 +205,7 @@ private:
debugstream_internal * internal;
bool show_datetime;
std::string fname;
};
#endif
......@@ -87,7 +87,7 @@ class OutOfRange: public Exception
{
public:
OutOfRange():Exception("OutOfRange"){}
OutOfRange(const std::string err):Exception(err){}
OutOfRange(const std::string& err):Exception(err){}
};
......@@ -107,7 +107,7 @@ public:
LimitWaitingPTimers():Exception("LimitWaitingPassiveTimers"){}
/*! Конструктор, позволяющий вывести в сообщении об ошибке дополнительную информацию err */
LimitWaitingPTimers(const std::string err):Exception(err){}
LimitWaitingPTimers(const std::string& err):Exception(err){}
};
......@@ -121,7 +121,7 @@ public:
ORepFailed():Exception("ORepFailed"){}
/*! Конструктор, позволяющий вывести в сообщении об ошибке дополнительную информацию err */
ORepFailed(const std::string err):Exception(err){}
ORepFailed(const std::string& err):Exception(err){}
};
......@@ -134,7 +134,7 @@ public:
SystemError():Exception("SystemError"){}
/*! Конструктор, позволяющий вывести в сообщении об ошибке дополнительную информацию err */
SystemError(const std::string err):Exception(err){}
SystemError(const std::string& err):Exception(err){}
};
class CRCError: public Exception
......@@ -153,7 +153,7 @@ public:
CommFailed():Exception("CommFailed"){}
/*! Конструктор, позволяющий вывести в сообщении об ошибке дополнительную информацию err */
CommFailed(const std::string err):Exception(err){}
CommFailed(const std::string& err):Exception(err){}
};
......@@ -167,7 +167,7 @@ class TimeOut: public CommFailed
TimeOut():CommFailed("TimeOut") {}
/*! Конструктор, позволяющий вывести в сообщении об ошибке дополнительную информацию err */
TimeOut(const std::string err):CommFailed(err){}
TimeOut(const std::string& err):CommFailed(err){}
};
......@@ -178,7 +178,7 @@ class ResolveNameError: public ORepFailed
{
public:
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
{
public:
NSResolveError():ORepFailed("NSResolveError"){}
NSResolveError(const std::string err):ORepFailed(err){}
NSResolveError(const std::string& err):ORepFailed(err){}
};
......@@ -200,7 +200,7 @@ public:
ObjectNameAlready():ResolveNameError("ObjectNameAlready"){}
/*! Конструктор, позволяющий вывести в сообщении об ошибке дополнительную информацию err */
ObjectNameAlready(const std::string err):ResolveNameError(err){}
ObjectNameAlready(const std::string& err):ResolveNameError(err){}
};
/*!
......@@ -213,7 +213,7 @@ class IOBadParam: public Exception
IOBadParam():Exception("IOBadParam"){}
/*! Конструктор, позволяющий вывести в сообщении об ошибке дополнительную информацию err */
IOBadParam(const std::string err):Exception(err){}
IOBadParam(const std::string& err):Exception(err){}
};
/*!
......@@ -224,7 +224,7 @@ class InvalidObjectName: public ResolveNameError
{
public:
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
{
public:
NotSetSignal():Exception("NotSetSignal"){}
NotSetSignal(const std::string err):Exception(err){}
NotSetSignal(const std::string& err):Exception(err){}
};
class NameNotFound: public ResolveNameError
{
public:
NameNotFound():ResolveNameError("NameNotFound"){}
NameNotFound(const std::string err):ResolveNameError(err){}
NameNotFound(const std::string& err):ResolveNameError(err){}
};
//@}
......
......@@ -40,14 +40,14 @@ class IOController:
public POA_IOController_i
{
public:
IOController(const std::string name, const std::string section);
IOController(const std::string& name, const std::string& section);
IOController(UniSetTypes::ObjectId id);
~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 контроллером
......@@ -59,8 +59,8 @@ class IOController:
UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId );
// ----------------------------------------------------------------
virtual void setUndefinedState(const IOController_i::SensorInfo& si,
CORBA::Boolean undefined,
virtual void setUndefinedState(const IOController_i::SensorInfo& si,
CORBA::Boolean undefined,
UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId );
......@@ -74,13 +74,13 @@ class IOController:
virtual IOController_i::SensorIOInfo getSensorIOInfo(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,
UniSetTypes::ObjectId adminId );
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())
{
IOController_i::SensorInfo si;
......@@ -89,9 +89,9 @@ class IOController:
return si;
};
UniSetTypes::Message::Priority getPriority(const IOController_i::SensorInfo& si,
UniSetTypes::Message::Priority getPriority(const IOController_i::SensorInfo& si,
UniversalIO::IOType type);
virtual IOController_i::ShortIOInfo getChangedTime(const IOController_i::SensorInfo& si);
virtual IOController_i::ShortMapSeq* getSensors();
......@@ -106,7 +106,7 @@ class IOController:
/*!
// \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*> ChangeUndefinedStateSignal;
......@@ -150,12 +150,12 @@ class IOController:
// Дополнительные (вспомогательные поля)
UniSetTypes::uniset_rwmutex val_lock; /*!< флаг блокирующий работу со значением */
IOStateList::iterator it;
void* any; /*!< расширение для возможности хранения своей информации */
// сигнал для реализации механизма зависимостией..
// сигнал для реализации механизма зависимостией..
// (все зависимые датчики подключаются к нему (см. NCRestorer::init_depends_signals)
ChangeSignal sigChange;
ChangeUndefinedStateSignal sigUndefChange;
......@@ -178,9 +178,9 @@ class IOController:
CORBA::Long value, UniSetTypes::ObjectId sup_id );
virtual long localGetValue( IOStateList::iterator& it, const IOController_i::SensorInfo& si );
/*! функция выставления признака неопределённого состояния для аналоговых датчиков
/*! функция выставления признака неопределённого состояния для аналоговых датчиков
// для дискретных датчиков необходимости для подобной функции нет.
// см. логику выставления в функции localSaveState
*/
......@@ -199,7 +199,7 @@ class IOController:
virtual void sensorsRegistration(){};
/*! удаление из репозитория датчиков за информацию о которых отвечает данный IOController */
virtual void sensorsUnregistration();
typedef sigc::signal<void, IOStateList::iterator&, IOController*> InitSignal;
// signal по изменению определённого датчика
inline InitSignal signal_init(){ return sigInit; }
......@@ -211,12 +211,12 @@ class IOController:
/*! разрегистрация датчика */
void ioUnRegistration( const IOController_i::SensorInfo& si );
UniSetTypes::Message::Priority getMessagePriority(UniSetTypes::KeyType k, UniversalIO::IOType type);
// ------------------------------
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,
long defval=0, IOController_i::CalibrateInfo* ci=0 )
{
......@@ -238,16 +238,16 @@ class IOController:
ai.ci.maxCal = 0;
ai.ci.precision = 0;
}
return ai;
return ai;
};
//! сохранение информации об изменении состояния датчика
virtual void logging(UniSetTypes::SensorMessage& sm);
//! сохранение состояния всех датчиков в БД
virtual void dumpToDB();
IOController();
IOController();
// доступ к списку c изменением только для своих
IOStateList::iterator myioBegin();
......@@ -255,7 +255,7 @@ class IOController:
IOStateList::iterator myiofind(UniSetTypes::KeyType k);
// --------------------------
// ФИЛЬТРОВАНИЕ
//
//
typedef sigc::slot<bool,const USensorInfo&, CORBA::Long, UniSetTypes::ObjectId> IOFilterSlot;
typedef std::list<IOFilterSlot> IOFilterSlotList;
......@@ -263,8 +263,8 @@ class IOController:
Фильтрующая функция должна возвращать:
TRUE - если значение 'нормальное'
FALSE - если значение не подходит (отбрасывается)
Пример использования:
Пример использования:
addIOFilter( sigc::mem_fun(my,&MyClass::my_filter) );
*/
IOFilterSlotList::iterator addIOFilter( IOFilterSlot sl, bool push_front=false );
......@@ -276,16 +276,16 @@ class IOController:
inline bool iofiltersEmpty(){ return iofilters.empty(); }
inline int iodiltersSize(){ return iofilters.size(); }
private:
private:
friend class NCRestorer;
ChangeSignal sigAnyChange;
ChangeSignal sigAnyUndefChange;
InitSignal sigInit;
IOStateList ioList; /*!< список с текущим состоянием аналоговых входов/выходов */
UniSetTypes::uniset_rwmutex ioMutex; /*!< замок для блокирования совместного доступа к ioList */
bool isPingDBServer; // флаг связи с DBServer-ом
bool isPingDBServer; // флаг связи с DBServer-ом
IOFilterSlotList iofilters; /*!< список фильтров для аналоговых значений */
......
......@@ -88,9 +88,9 @@ class NCRestorer;
\endcode
"Статический" способ заказа гарантирует, что при перезапуске
\b IONC список заказчиков будет восстановлен по конфигурационному файлу.
\section sec_NC_Thresholds Пороговые датчики
\section sec_NC_Depends Механизм зависимостей между датчиками
Механизм зависимостей позволяет задать зависимость одного датчика, от другого.
Например пока "разрешающий" датчик не равен "1", у зависимого держится значение "0".
......@@ -119,9 +119,9 @@ class NCRestorer;
* \todo Сделать логирование выходов
\section AskSensors Заказ датчиков
....
ConsumerMaxAttempts - максимальное число неудачных
ConsumerMaxAttempts - максимальное число неудачных
попыток послать сообщение "заказчику". Настраивается в
конфигурационном файле. По умолчанию = 5.
*/
......@@ -130,8 +130,8 @@ class IONotifyController:
public POA_IONotifyController_i
{
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);
virtual ~IONotifyController();
......@@ -139,23 +139,23 @@ class 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 askThreshold(const IOController_i::SensorInfo& si, const UniSetTypes::ConsumerInfo& ci,
UniSetTypes::ThresholdId tid,
CORBA::Long lowLimit, CORBA::Long hiLimit, CORBA::Boolean invert,
virtual void askThreshold(const IOController_i::SensorInfo& si, const UniSetTypes::ConsumerInfo& ci,
UniSetTypes::ThresholdId tid,
CORBA::Long lowLimit, CORBA::Long hiLimit, CORBA::Boolean invert,
UniversalIO::UIOCommand cmd );
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::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);
// --------------------------------------------
// функция для работы напрямую черех iterator (оптимизация)
virtual void localSetValue( IOController::IOStateList::iterator& it,
virtual void localSetValue( IOController::IOStateList::iterator& it,
const IOController_i::SensorInfo& si,
CORBA::Long value, UniSetTypes::ObjectId sup_id );
......@@ -195,17 +195,17 @@ class IONotifyController:
/*! идентификатор дискретного датчика связанного с данным порогом */
UniSetTypes::ObjectId sid;
/*! итератор в списке датчиков (для оптимально-быстрого доступа) */
IOController::IOStateList::iterator sit;
/*! инверсная логика */
bool invert;
bool invert;
inline bool operator== ( const ThresholdInfo& r ) const
{
return ((id == r.id) &&
(hilimit == r.hilimit) &&
return ((id == r.id) &&
(hilimit == r.hilimit) &&
(lowlimit == r.lowlimit) &&
(invert == r.invert) );
}
......@@ -223,25 +223,25 @@ class IONotifyController:
return r;
}
};
typedef std::list<ThresholdInfoExt> ThresholdExtList;
/*! массив пар датчик->список потребителей */
typedef std::map<UniSetTypes::KeyType,ConsumerList> AskMap;
struct ThresholdsListInfo
{
ThresholdsListInfo(){}
ThresholdsListInfo( IOController_i::SensorInfo& si, ThresholdExtList& list,
ThresholdsListInfo( IOController_i::SensorInfo& si, ThresholdExtList& list,
UniversalIO::IOType t=UniversalIO::AI ):
si(si),type(t),list(list){}
IOController_i::SensorInfo si;
IOStateList::iterator ait;
UniversalIO::IOType type;
ThresholdExtList list;
};
/*! массив пар [датчик,список порогов] */
typedef std::map<UniSetTypes::KeyType,ThresholdsListInfo> AskThresholdMap;
......@@ -257,16 +257,16 @@ class IONotifyController:
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 );
//! поиск информации о пороговом датчике
ThresholdExtList::iterator findThreshold( UniSetTypes::KeyType k, UniSetTypes::ThresholdId tid );
//! сохранение информации об изменении состояния датчика в базу
virtual void loggingInfo(UniSetTypes::SensorMessage& sm);
/*! сохранение списка заказчиков
/*! сохранение списка заказчиков
По умолчанию делает dump, если объявлен dumper.
*/
virtual void dumpOrdersList(const IOController_i::SensorInfo& si, const IONotifyController::ConsumerList& lst);
......@@ -292,10 +292,10 @@ class IONotifyController:
//----------------------
bool addConsumer(ConsumerList& lst, const UniSetTypes::ConsumerInfo& cons ); //!< добавить потребителя сообщения
bool removeConsumer(ConsumerList& lst, const UniSetTypes::ConsumerInfo& cons ); //!< удалить потребителя сообщения
//! обработка заказа
void ask(AskMap& askLst, const IOController_i::SensorInfo& si,
const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd);
//! обработка заказа
void ask(AskMap& askLst, const IOController_i::SensorInfo& si,
const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd);
/*! добавить новый порог для датчика */
bool addThreshold(ThresholdExtList& lst, ThresholdInfoExt& ti, const UniSetTypes::ConsumerInfo& cons);
......@@ -305,14 +305,15 @@ class IONotifyController:
AskMap askIOList; /*!< список потребителей по аналоговым датчикам */
AskThresholdMap askTMap; /*!< список порогов по аналоговым датчикам */
/*! замок для блокирования совместного доступа к cписку потребителей датчиков */
UniSetTypes::uniset_rwmutex askIOMutex;
/*! замок для блокирования совместного доступа к cписку потребителей пороговых датчиков */
/*! замок для блокирования совместного доступа к cписку потребителей пороговых датчиков */
UniSetTypes::uniset_rwmutex trshMutex;
int maxAttemtps; /*! timeout for consumer */
};
// --------------------------------------------------------------------------
#endif
// --------------------------------------------------------------------------
......@@ -38,11 +38,11 @@ class IORFile
IORFile();
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 );
protected:
std::string genFName( const ObjectId id, const ObjectId node);
std::string genFName( const ObjectId id, const ObjectId node );
private:
};
......
......@@ -83,12 +83,12 @@ class Restorer_XML
/*! Установить фильтр на чтение списка датчиков
\note Функцию необходимо вызывать до вызова read(...)
*/
void setItemFilter( const std::string filterField, const std::string filterValue="" );
void setItemFilter( const std::string& filterField, const std::string& filterValue="" );
/*! Установить фильтр на чтение списка заказчиков (по каждому датчику)
\note Функцию необходимо вызывать до вызова read(...)
*/
void setConsumerFilter( const std::string filterField, const std::string filterValue="" );
void setConsumerFilter( const std::string& filterField, const std::string& filterValue="" );
/*! универсальная функция получения информации о заказчике (id и node)
......@@ -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:
......
......@@ -35,7 +35,7 @@ class SViewer
{
public:
SViewer(const std::string ControllersSection, bool isShort=true);
SViewer(const std::string& ControllersSection, bool isShort=true);
virtual ~SViewer();
void view();
......@@ -45,7 +45,7 @@ class SViewer
friend class SViewer_glade;
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);
virtual void updateSensors( IOController_i::SensorInfoSeq_var& amap, UniSetTypes::ObjectId oid );
......
......@@ -196,11 +196,11 @@ class UInterface
// Работа с ID, Name
/*! получение идентификатора объекта по имени */
inline UniSetTypes::ObjectId getIdByName(const char* name)
inline UniSetTypes::ObjectId getIdByName( const char* 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());
}
......
......@@ -19,7 +19,7 @@
// --------------------------------------------------------------------------
/*! \file
* \author Pavel Vainerman
* \brief базовые типы и вспомогательные функции библиотеки UniSet
* \brief базовые типы и вспомогательные функции библиотеки UniSet
*/
// --------------------------------------------------------------------------
#ifndef UniSetTypes_H_
......@@ -56,15 +56,15 @@ namespace UniSetTypes
const ThresholdId DefaultTimerId = -1; /*!< идентификатор таймера по умолчанию */
typedef long KeyType; /*!< уникальный ключ объекта */
/*! генератор уникального положительного ключа
* Уникальность гарантируется только для пары значений
* id и node.
* \warning что тут у нас с переполнением..
* \warning Уникальность генерируемого ключа еще не проверялась,
* \warning Уникальность генерируемого ключа еще не проверялась,
но нареканий по использованию тоже не было :)
* \todo Желательно продумать что-нибудь с использованием хэш.
*/
*/
inline static KeyType key( const UniSetTypes::ObjectId id, const UniSetTypes::ObjectId node )
{
return KeyType((id*node)+(id+2*node));
......@@ -84,7 +84,7 @@ namespace UniSetTypes
/*! Функция делает ObjectType из const char * (переводит const-строку в обычную, что плохо, но мы обещаем не писать в неё :) ) */
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 );
/*! Команды для управления лампочками */
......@@ -101,26 +101,26 @@ namespace UniSetTypes
class IDList
{
public:
public:
IDList();
~IDList();
void add( ObjectId id );
void del( ObjectId id );
inline int size(){ return lst.size(); }
inline bool empty(){ return lst.empty(); }
std::list<ObjectId> getList();
// за освобождение выделеной памяти
// отвечает вызывающий!
IDSeq* getIDSeq();
//
//
ObjectId getFirst();
ObjectId node; // узел, на котором находятся датчики
private:
std::list<ObjectId> lst;
};
......@@ -136,13 +136,13 @@ namespace UniSetTypes
char* repName; /*!< текстовое имя для регистрации в репозитории */
char* textName; /*!< текстовое имя */
void* data;
inline bool operator < ( const ObjectInfo& o ) const
{
return (id < o.id);
}
};
typedef std::list<NodeInfo> ListOfNode;
/*! Запрещенные для использования в именах объектов символы */
......@@ -160,43 +160,43 @@ namespace UniSetTypes
std::sscanf(str, "%i", &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());
}
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 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 */
/*! Разбивка строки по указанному символу */
IDList explode( const std::string str, char sep=',' );
std::list<std::string> explode_str( 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=',' );
struct ParamSInfo
{
IOController_i::SensorInfo si;
long val;
std::string fname; // fullname id@node or id
};
/*! Функция разбора строки вида: id1@node1=val1,id2@node2=val2,...
Если '=' не указано, возвращается val=0
Если @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 defval - значение, которое будет возвращено, если параметр не найден
*/
inline std::string getArgParam( const std::string name,
inline std::string getArgParam( const std::string& name,
int _argc, const char* const* _argv,
const std::string defval="" )
const std::string& defval="" )
{
for( int i=1; i < (_argc - 1) ; i++ )
{
......@@ -206,7 +206,7 @@ namespace UniSetTypes
return defval;
}
inline int getArgInt( const std::string name,
inline int getArgInt( const std::string& name,
int _argc, const char* const* _argv,
const std::string defval="" )
{
......@@ -215,10 +215,10 @@ namespace UniSetTypes
/*! Проверка наличия параметра в командной строке
\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++ )
{
......@@ -239,7 +239,7 @@ namespace UniSetTypes
// rawMax - максимальная граница исходного диапазона
// calMin - минимальная граница калиброванного диапазона
// calMin - минимальная граница калиброванного диапазона
// limit - обрезать итоговое значение по границам
// limit - обрезать итоговое значение по границам
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 );
......@@ -251,11 +251,11 @@ namespace UniSetTypes
// ---------------------------------------------------------------
// Всякие helper-ы
bool file_exist( const std::string filename );
bool file_exist( const std::string& filename );
// Проверка xml-узла на соответствие <...f_prop="f_val">,
// если не задано 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,
......
......@@ -11,7 +11,7 @@
class WDTInterface
{
public:
WDTInterface(const std::string dev);
WDTInterface(const std::string& dev);
~WDTInterface();
bool ping();
......
......@@ -143,7 +143,7 @@ class ModbusClient
/*! установить паузу при ожидании символа */
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 );
......
......@@ -20,13 +20,13 @@ class ModbusRTUMaster:
public:
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 void cleanupChannel(){ if( port ) port->cleanupChannel(); }
void setSpeed( ComPort::Speed s );
void setSpeed( const std::string s );
void setSpeed( const std::string& s );
ComPort::Speed getSpeed();
void setParity( ComPort::Parity parity );
......
......@@ -18,7 +18,7 @@ class ModbusRTUSlaveSlot:
{
public:
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 void sigterm( int signo );
......
......@@ -17,11 +17,11 @@ class ModbusServer
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 );
/*! обработать очередное сообщение
/*! обработать очередное сообщение
\param addr - адрес для которого принимать сообщения
\param msecTimeout - время ожидания прихода очередного сообщения в мсек.
\return Возвращает код ошибки из ModbusRTU::mbErrCode
......@@ -29,7 +29,7 @@ class ModbusServer
virtual ModbusRTU::mbErrCode receive( ModbusRTU::ModbusAddr addr, timeout_t msecTimeout )=0;
/*! Установка паузы после посылки
/*! Установка паузы после посылки
\return старое значение
*/
timeout_t setAfterSendPause( timeout_t msec );
......@@ -57,18 +57,18 @@ class ModbusServer
/*! Вспомогательная функция реализующая обработку запроса на установку времени.
Основана на использовании gettimeofday и settimeofday.
*/
static ModbusRTU::mbErrCode replySetDateTime( ModbusRTU::SetDateTimeMessage& query,
static ModbusRTU::mbErrCode replySetDateTime( ModbusRTU::SetDateTimeMessage& query,
ModbusRTU::SetDateTimeRetMessage& reply,
DebugStream* dlog=0 );
/*! Вспомогательная функция реализующая обработку передачи файла
/*! Вспомогательная функция реализующая обработку передачи файла
\param fname - запрашиваемый файл.
\param query - запрос
\param reply - ответ
*/
static ModbusRTU::mbErrCode replyFileTransfer( const std::string fname,
ModbusRTU::FileTransferMessage& query,
static ModbusRTU::mbErrCode replyFileTransfer( const std::string& fname,
ModbusRTU::FileTransferMessage& query,
ModbusRTU::FileTransferRetMessage& reply,
DebugStream* dlog=0 );
......@@ -82,22 +82,22 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query,
virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query,
ModbusRTU::ReadCoilRetMessage& reply )=0;
/*! Обработка запроса на чтение данных (0x02).
\param query - запрос
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query,
virtual ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query,
ModbusRTU::ReadInputStatusRetMessage& reply )=0;
/*! Обработка запроса на чтение данных (0x03).
\param query - запрос
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query,
virtual ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query,
ModbusRTU::ReadOutputRetMessage& reply )=0;
/*! Обработка запроса на чтение данных (0x04).
......@@ -105,7 +105,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query,
virtual ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query,
ModbusRTU::ReadInputRetMessage& reply )=0;
/*! Обработка запроса на запись данных (0x05).
......@@ -113,7 +113,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query,
virtual ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query,
ModbusRTU::ForceSingleCoilRetMessage& reply )=0;
......@@ -122,7 +122,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query,
virtual ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query,
ModbusRTU::WriteSingleOutputRetMessage& reply )=0;
/*! Обработка запроса на запись данных (0x0F).
......@@ -130,7 +130,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query,
virtual ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query,
ModbusRTU::ForceCoilsRetMessage& reply )=0;
/*! Обработка запроса на запись данных (0x10).
......@@ -138,16 +138,16 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query,
virtual ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query,
ModbusRTU::WriteOutputRetMessage& reply )=0;
/*! Обработка запроса на запись данных (0x08).
\param query - запрос
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query,
virtual ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query,
ModbusRTU::DiagnosticRetMessage& reply )=0;
/*! Обработка запроса 43(0x2B).
......@@ -155,7 +155,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query,
virtual ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query,
ModbusRTU::MEIMessageRetRDI& reply )=0;
......@@ -164,7 +164,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query,
virtual ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query,
ModbusRTU::JournalCommandRetMessage& reply )=0;
......@@ -173,7 +173,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query,
virtual ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query,
ModbusRTU::SetDateTimeRetMessage& reply )=0;
......@@ -182,7 +182,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query,
virtual ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query,
ModbusRTU::RemoteServiceRetMessage& reply )=0;
......@@ -191,19 +191,19 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query,
virtual ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query,
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 buf - buffer for data
\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 ModbusRTU::mbErrCode sendData( unsigned char* buf, int len )=0;
/*! set timeout for receive data */
virtual void setChannelTimeout( timeout_t msec )=0;
......
......@@ -16,12 +16,12 @@ class ModbusTCPMaster:
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 disconnect();
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 )
{
......
......@@ -129,8 +129,8 @@ namespace ModbusRTU
/*! вывод сообщения */
std::ostream& mbPrintMessage( std::ostream& os, ModbusByte* b, int len );
// -------------------------------------------------------------------------
ModbusAddr str2mbAddr( const std::string val );
ModbusData str2mbData( const std::string val );
ModbusAddr str2mbAddr( const std::string& val );
ModbusData str2mbData( const std::string& val );
std::string dat2str( const ModbusData dat );
std::string addr2str( const ModbusAddr addr );
std::string b2str( const ModbusByte b );
......@@ -1082,7 +1082,7 @@ namespace ModbusRTU
struct RDIObjectInfo
{
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 );
ModbusByte id;
......@@ -1130,7 +1130,7 @@ namespace ModbusRTU
* \return TRUE - если удалось
* \return FALSE - если НЕ удалось
*/
bool addData( ModbusByte id, const std::string value );
bool addData( ModbusByte id, const std::string& value );
bool addData( RDIObjectInfo& dat );
/*! очистка данных */
......
......@@ -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),
waiting(true),dev(comDevice)
{
......@@ -53,12 +53,12 @@ void ComPort::openPort()
string strErr="Unable to open "+dev+" [Error: "+strerror(errno)+"]";
throw UniSetTypes::SystemError(strErr.c_str());
}
/* Get the current options for the port */
tcgetattr(fd, &options);
oldTermios=options;
cfsetispeed(&options, B19200); /* Set the baud rates to 19200 */
cfsetospeed(&options, B19200);
......@@ -93,7 +93,7 @@ void ComPort::reopen()
openPort();
if( fd > 0 )
tcsetattr(fd, TCSAFLUSH, &options);
}
}
}
// --------------------------------------------------------------------------------
void ComPort::setSpeed( Speed s )
......@@ -114,7 +114,7 @@ void ComPort::setParity(Parity parity)
struct termios options;
tcgetattr(fd, &options);
switch(parity)
{
case Odd:
......@@ -205,14 +205,14 @@ unsigned char ComPort::m_receiveByte( bool wait )
{
fd_set set;
timeval timeout;
FD_ZERO (&set);
FD_SET (fd, &set);
/* Initialize the timeout data structure. */
timeout.tv_sec = 0;
timeout.tv_usec = uTimeout;
/* select' returns 0 if timeout, 1 if input available, -1 if error. */
if(select(FD_SETSIZE, &set, NULL, NULL, &timeout)==1)
......@@ -287,10 +287,10 @@ int ComPort::sendBlock(unsigned char* msg, int len)
int ComPort::receiveBlock(unsigned char* msg, int len)
{
int k;
if(!len)
return 0;
for(k=0;k<len;k++)
{
try
......@@ -302,12 +302,12 @@ int ComPort::receiveBlock(unsigned char* msg, int len)
break;
}
}
if(!k)
{
throw UniSetTypes::TimeOut();
}
return k;
}
......@@ -346,7 +346,7 @@ void ComPort::cleanupChannel()
waiting = old_waiting;
}
// --------------------------------------------------------------------------------
void ComPort::setSpeed( std::string s )
void ComPort::setSpeed( const std::string& s )
{
Speed sp=getSpeed(s);
if( sp != ComPort::ComSpeed0 )
......@@ -424,13 +424,13 @@ std::string ComPort::getSpeed( Speed s )
// --------------------------------------------------------------------------------
#define CHECK_SPEED(var,speed) \
if( var == __STRING(speed) ) \
return ComPort::ComSpeed##speed;
ComPort::Speed ComPort::getSpeed( const string s )
return ComPort::ComSpeed##speed;
ComPort::Speed ComPort::getSpeed( const string& s )
{
// см. ComPort.h
// см. ComPort.h
// сперва самые вероятные
// сперва самые вероятные
CHECK_SPEED(s,9600)
CHECK_SPEED(s,19200)
CHECK_SPEED(s,38400)
......@@ -450,7 +450,7 @@ ComPort::Speed ComPort::getSpeed( const string s )
CHECK_SPEED(s,1800)
CHECK_SPEED(s,2400)
CHECK_SPEED(s,4800)
CHECK_SPEED(s,230400)
CHECK_SPEED(s,460800)
CHECK_SPEED(s,500000)
......
......@@ -199,7 +199,7 @@ SetDateTimeRetMessage ModbusClient::setDateTime( ModbusAddr addr, ModbusByte hou
return SetDateTimeRetMessage(reply);
throw mbException(res);
}
}
// --------------------------------------------------------------------------------
void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile,
const char* save2filename, timeout_t part_timeout_msec )
......@@ -213,12 +213,12 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile,
if( fdsave == NULL )
{
if( dlog.is_warn() )
dlog.warn() << "(fileTransfer): fopen '"
<< save2filename << "' with error: "
dlog.warn() << "(fileTransfer): fopen '"
<< save2filename << "' with error: "
<< strerror(errno) << endl;
throw mbException(erHardwareError);
}
unsigned short maxpackets = 65535;
unsigned short curpack = 0;
......@@ -227,12 +227,12 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile,
while( curpack < maxpackets && !ptTimeout.checkTime() )
{
try
{
{
FileTransferRetMessage ret = partOfFileTransfer( addr, numfile, curpack, part_timeout_msec );
if( ret.numfile != numfile )
{
if( dlog.is_warn() )
dlog.warn() << "(fileTransfer): recv nfile=" << ret.numfile
dlog.warn() << "(fileTransfer): recv nfile=" << ret.numfile
<< " !=numfile(" << numfile << ")" << endl;
continue;
}
......@@ -240,25 +240,25 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile,
if( ret.packet != curpack )
{
if( dlog.is_warn() )
dlog.warn() << "(fileTransfer): recv npack=" << ret.packet
dlog.warn() << "(fileTransfer): recv npack=" << ret.packet
<< " !=curpack(" << curpack << ")" << endl;
continue;
}
maxpackets = ret.numpacks;
if( dlog.is_info() )
dlog.info() << "(fileTransfer): maxpackets="
dlog.info() << "(fileTransfer): maxpackets="
<< ret.numpacks << " curpack=" << curpack+1 << endl;
// save data...
if( fwrite(&ret.data,ret.dlen,1,fdsave) <= 0 )
{
if( dlog.is_warn() )
dlog.warn() << "(fileTransfer): fwrite '"
<< save2filename << "' with error: "
dlog.warn() << "(fileTransfer): fwrite '"
<< save2filename << "' with error: "
<< strerror(errno) << endl;
res = erHardwareError;
break;
}
......@@ -272,12 +272,12 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile,
continue;
res = ex.err;
break;
break;
}
}
fclose(fdsave);
if( curpack == maxpackets )
return;
......@@ -285,7 +285,7 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile,
res = erTimeOut;
throw mbException(res);
}
}
// --------------------------------------------------------------------------------
FileTransferRetMessage ModbusClient::partOfFileTransfer( ModbusAddr addr,
ModbusData idFile, ModbusData numpack,
......@@ -300,7 +300,7 @@ FileTransferRetMessage ModbusClient::partOfFileTransfer( ModbusAddr addr,
return FileTransferRetMessage(reply);
throw mbException(res);
}
}
// --------------------------------------------------------------------------------
mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc,
ModbusMessage& rbuf, timeout_t timeout )
......@@ -314,7 +314,7 @@ mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc,
// предварительно чистим буфер
memset(&rbuf,0,sizeof(rbuf));
int bcnt=0; // receive bytes count
try
{
bool begin = false;
......@@ -326,14 +326,14 @@ mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc,
begin = true;
break;
}
usleep(sleepPause_usec);
}
if( !begin )
return erTimeOut;
/*! \todo Подумать Может стоит всё-таки получать весь пакет, а проверять кому он адресован на уровне выше?!
/*! \todo Подумать Может стоит всё-таки получать весь пакет, а проверять кому он адресован на уровне выше?!
// Lav: конечно стоит, нам же надо буфер чистить
*/
// Проверка кому адресован пакет...
......@@ -363,7 +363,7 @@ mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc,
}
return erTimeOut;
}
// --------------------------------------------------------------------------------
......@@ -389,7 +389,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
bcnt += k;
rbuf.len = 0;
if( dlog.is_info() )
dlog.info() << "(recv): header: " << rbuf << endl;
......@@ -399,23 +399,23 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
rbuf.len = ErrorRetMessage::szData();
if( crcNoCheckit )
rbuf.len -= szCRC;
int rlen = getNextData((unsigned char*)(&(rbuf.data)),rbuf.len);
if( rlen < rbuf.len )
{
if( dlog.is_warn() )
{
dlog.warn() << "(recv:Error): buf: " << rbuf << endl;
dlog.warn() << "(recv:Error)(" << rbuf.func
<< "): Получили данных меньше чем ждали...(recv="
dlog.warn() << "(recv:Error)(" << rbuf.func
<< "): Получили данных меньше чем ждали...(recv="
<< rlen << " < wait=" << rbuf.len << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt+=rlen;
ErrorRetMessage em(rbuf);
if( !crcNoCheckit )
{
......@@ -439,7 +439,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
cleanupChannel();
return erUnExpectedPacketType;
}
// Определяем тип сообщения
switch( rbuf.func )
{
......@@ -464,7 +464,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( crcNoCheckit )
rbuf.len -= szCRC;
break;
case fnWriteOutputRegisters:
rbuf.len = WriteOutputRetMessage::szData();
if( crcNoCheckit )
......@@ -509,7 +509,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
case fnRemoteService:
rbuf.len = RemoteServiceMessage::szHead();
break;
*/
*/
default:
cleanupChannel();
return erUnExpectedPacketType;
......@@ -527,15 +527,15 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() )
{
dlog.warn() << "(recv): buf: " << rbuf << endl;
dlog.warn() << "(recv)(" << rbuf.func
<< "): Получили данных меньше чем ждали...(recv="
dlog.warn() << "(recv)(" << rbuf.func
<< "): Получили данных меньше чем ждали...(recv="
<< rlen << " < wait=" << rbuf.len << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt+=rlen;
// получаем остальное...
......@@ -545,9 +545,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( crcNoCheckit )
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
......@@ -556,16 +556,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() )
{
dlog.warn() << "(0x01): buf: " << rbuf << endl;
dlog.warn() << "(0x01)("
dlog.warn() << "(0x01)("
<< (int)rbuf.func << "):(fnReadCoilStatus) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -578,7 +578,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -600,9 +600,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( crcNoCheckit )
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
......@@ -611,16 +611,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() )
{
dlog.warn() << "(0x02): buf: " << rbuf << endl;
dlog.warn() << "(0x02)("
dlog.warn() << "(0x02)("
<< (int)rbuf.func << "):(fnReadInputStatus) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -628,12 +628,12 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_info() )
dlog.info() << "(0x02)(fnReadInputStatus): recv buf: " << rbuf << endl;
if( crcNoCheckit )
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -647,7 +647,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erBadCheckSum;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnReadInputRegisters )
{
......@@ -655,9 +655,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( crcNoCheckit )
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
......@@ -666,16 +666,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() )
{
dlog.warn() << "(0x04): buf: " << rbuf << endl;
dlog.warn() << "(0x04)("
dlog.warn() << "(0x04)("
<< (int)rbuf.func << "):(fnReadInputRegisters) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -688,7 +688,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -709,9 +709,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
int szDataLen = ReadOutputRetMessage::getDataLen(rbuf)+szCRC;
if( crcNoCheckit )
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
......@@ -720,16 +720,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() )
{
dlog.warn() << "(0x03): buf: " << rbuf << endl;
dlog.warn() << "(0x03)("
dlog.warn() << "(0x03)("
<< (int)rbuf.func << "):(fnReadInputRegisters) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -742,7 +742,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -770,7 +770,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -796,7 +796,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -822,7 +822,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -848,7 +848,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -868,9 +868,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( crcNoCheckit )
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
......@@ -879,16 +879,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() )
{
dlog.warn() << "(0x08): buf: " << rbuf << endl;
dlog.warn() << "(0x08)("
dlog.warn() << "(0x08)("
<< (int)rbuf.func << "):(fnDiagnostics) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -901,7 +901,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -936,16 +936,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() )
{
dlog.warn() << "(0x2B/0x0E): buf: " << rbuf << endl;
dlog.warn() << "(0x2B/0x0E)("
dlog.warn() << "(0x2B/0x0E)("
<< (int)rbuf.func << "):(fnMEI) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
rlen += szDataLen;
bcnt += szDataLen;
......@@ -958,12 +958,12 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() )
{
dlog.warn() << "(0x2B/0x0E): buf: " << rbuf << endl;
dlog.warn() << "(0x2B/0x0E)("
dlog.warn() << "(0x2B/0x0E)("
<< (int)rbuf.func << "):(fnMEI) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
......@@ -991,12 +991,12 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() )
{
dlog.warn() << "(0x2B/0x0E): buf: " << rbuf << endl;
dlog.warn() << "(0x2B/0x0E)("
dlog.warn() << "(0x2B/0x0E)("
<< (int)rbuf.func << "):(fnMEI) "
<< "(CRC): Получили данных меньше чем ждали...("
<< "(CRC): Получили данных меньше чем ждали...("
<< rlen1 << " < " << szCRC << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
......@@ -1010,7 +1010,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
MEIMessageRetRDI mRDI(rbuf);
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -1042,14 +1042,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
ostringstream err;
err << "(0x50): bad crc. calc.crc=" << dat2str(tcrc)
<< " msg.crc=" << dat2str(mSet.crc);
dlog.warn() << err.str() << endl;
if( dlog.is_warn() )
dlog.warn() << err.str() << endl;
return erBadCheckSum;
}
}
if( !mSet.checkFormat() )
{
dlog.warn() << "(0x50): некорректные значения..." << endl;
if( dlog.is_warn() )
dlog.warn() << "(0x50): некорректные значения..." << endl;
return erBadDataValue; // return erInvalidFormat;
}
......@@ -1062,22 +1064,24 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
{
rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x66): buf: " << rbuf << endl;
dlog.warn() << "(0x66)("
<< rbuf.func << "):(fnFileTransfer) "
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
if( dlog.is_warn() )
{
dlog.warn() << "(0x66): buf: " << rbuf << endl;
dlog.warn() << "(0x66)("
<< rbuf.func << "):(fnFileTransfer) "
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -1089,7 +1093,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -1098,7 +1102,8 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
ostringstream err;
err << "(0x66): bad crc. calc.crc=" << dat2str(tcrc)
<< " msg.crc=" << dat2str(mFT.crc);
dlog.warn() << err.str() << endl;
if( dlog.is_warn() )
dlog.warn() << err.str() << endl;
return erBadCheckSum;
}
......@@ -1137,22 +1142,22 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
{
rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x53): buf: " << rbuf << endl;
dlog.warn() << "(0x53)("
dlog.warn() << "(0x53)("
<< rbuf.func << "):(fnWriteOutputRegisters) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -1165,7 +1170,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -1191,7 +1196,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
}
catch( mbException& ex )
{
if( dlog.debugging(Debug::CRIT) )
if( dlog.is_crit() )
dlog.crit() << "(recv): " << ex << endl;
return ex.err;
}
......@@ -1201,7 +1206,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
}
catch( Exception& ex ) // SystemError
{
if( dlog.debugging(Debug::CRIT) )
if( dlog.is_crit() )
dlog.crit() << "(recv): " << ex << endl;
return erHardwareError;
}
......@@ -1231,12 +1236,14 @@ mbErrCode ModbusClient::send( ModbusMessage& msg )
}
catch( mbException& ex )
{
dlog.crit() << "(send): " << ex << endl;
if( dlog.is_crit() )
dlog.crit() << "(send): " << ex << endl;
return ex.err;
}
catch( Exception& ex ) // SystemError
{
dlog.crit() << "(send): " << ex << endl;
if( dlog.is_crit() )
dlog.crit() << "(send): " << ex << endl;
return erHardwareError;
}
......@@ -1251,7 +1258,7 @@ mbErrCode ModbusClient::send( ModbusMessage& msg )
// -------------------------------------------------------------------------
void ModbusClient::initLog( UniSetTypes::Configuration* conf,
const std::string lname, const string logfile )
const std::string& lname, const string& logfile )
{
conf->initDebug(dlog,lname);
......@@ -1268,7 +1275,7 @@ void ModbusClient::printProcessingTime()
{
if( dlog.is_info() )
{
dlog.info() << "(processingTime): "
dlog.info() << "(processingTime): "
<< tmProcessing.getCurrent() << " [мсек]" << endl;
}
}
......
......@@ -11,7 +11,7 @@ using namespace ModbusRTU;
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),
myport(true)
{
......@@ -67,7 +67,7 @@ void ModbusRTUMaster::setSpeed( ComPort::Speed s )
port->setSpeed(s);
}
// --------------------------------------------------------------------------------
void ModbusRTUMaster::setSpeed( const std::string s )
void ModbusRTUMaster::setSpeed( const std::string& s )
{
if( port != NULL )
port->setSpeed(s);
......
......@@ -3,7 +3,7 @@
using namespace ModbusRTU;
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)
{
}
......
......@@ -81,7 +81,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( mRead.addr, mRead.func, res );
ErrorRetMessage em( mRead.addr, mRead.func, res );
buf = em.transport_msg();
return send(buf);
}
......@@ -113,7 +113,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( mRead.addr, mRead.func, res );
ErrorRetMessage em( mRead.addr, mRead.func, res );
buf = em.transport_msg();
return send(buf);
}
......@@ -145,7 +145,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( mRead.addr, mRead.func, res );
ErrorRetMessage em( mRead.addr, mRead.func, res );
buf = em.transport_msg();
return send(buf);
}
......@@ -177,7 +177,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( mRead.addr, mRead.func, res );
ErrorRetMessage em( mRead.addr, mRead.func, res );
buf = em.transport_msg();
return send(buf);
}
......@@ -210,11 +210,11 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( mWrite.addr, mWrite.func, res );
ErrorRetMessage em( mWrite.addr, mWrite.func, res );
buf = em.transport_msg();
return send(buf);
}
return res;
}
......@@ -243,11 +243,11 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( mWrite.addr, mWrite.func, res );
ErrorRetMessage em( mWrite.addr, mWrite.func, res );
buf = em.transport_msg();
return send(buf);
}
return res;
}
......@@ -278,7 +278,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
buf = em.transport_msg();
return send(buf);
}
return res;
}
......@@ -309,7 +309,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
buf = em.transport_msg();
return send(buf);
}
return res;
}
......@@ -337,11 +337,11 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( mWrite.addr, mWrite.func, res );
ErrorRetMessage em( mWrite.addr, mWrite.func, res );
buf = em.transport_msg();
return send(buf);
}
return res;
}
......@@ -370,11 +370,11 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( mWrite.addr, mWrite.func, res );
ErrorRetMessage em( mWrite.addr, mWrite.func, res );
buf = em.transport_msg();
return send(buf);
}
return res;
}
......@@ -402,7 +402,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( mJournal.addr, mJournal.func, res );
ErrorRetMessage em( mJournal.addr, mJournal.func, res );
buf = em.transport_msg();
return send(buf);
}
......@@ -433,7 +433,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( mSet.addr, mSet.func, res );
ErrorRetMessage em( mSet.addr, mSet.func, res );
buf = em.transport_msg();
return send(buf);
}
......@@ -464,7 +464,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( query.addr, query.func, res );
ErrorRetMessage em( query.addr, query.func, res );
buf = em.transport_msg();
return send(buf);
}
......@@ -495,7 +495,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( query.addr, query.func, res );
ErrorRetMessage em( query.addr, query.func, res );
buf = em.transport_msg();
return send(buf);
}
......@@ -532,7 +532,7 @@ mbErrCode ModbusServer::recv( ModbusRTU::ModbusAddr addr, ModbusMessage& rbuf, t
// предварительно чистим буфер
memset(&rbuf,0,sizeof(rbuf));
int bcnt=0; // receive bytes count
try
{
// wait byte = myaddr || byte = broadcast
......@@ -545,13 +545,13 @@ mbErrCode ModbusServer::recv( ModbusRTU::ModbusAddr addr, ModbusMessage& rbuf, t
begin = true;
break;
}
usleep(sleepPause_usec);
}
if( !begin )
return erTimeOut;
/*! \todo Подумать Может стоит всё-таки получать весь пакет, а проверять кому он адресован на уровне выше?!
/*! \todo Подумать Может стоит всё-таки получать весь пакет, а проверять кому он адресован на уровне выше?!
// Lav: конечно стоит, нам же надо буфер чистить
*/
// Проверка кому адресован пакет...
......@@ -570,7 +570,7 @@ mbErrCode ModbusServer::recv( ModbusRTU::ModbusAddr addr, ModbusMessage& rbuf, t
}
return recv_pdu(rbuf,timeout);
}
}
catch( UniSetTypes::TimeOut )
{
// cout << "(recv): catch TimeOut " << endl;
......@@ -605,7 +605,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
bcnt += k;
rbuf.len = 0;
if( dlog.is_info() )
dlog.info() << "(recv): header: " << rbuf << endl;
......@@ -645,13 +645,13 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
break;
case fnForceSingleCoil:
rbuf.len = ForceSingleCoilMessage::szHead();
rbuf.len = ForceSingleCoilMessage::szHead();
break;
case fnWriteOutputSingleRegister:
rbuf.len = WriteSingleOutputMessage::szHead();
rbuf.len = WriteSingleOutputMessage::szHead();
break;
case fnDiagnostics:
rbuf.len = DiagnosticMessage::szHead();
break;
......@@ -681,7 +681,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( crcNoCheckit )
rbuf.len -= szCRC;
break;
default:
cleanupChannel();
return erUnExpectedPacketType;
......@@ -698,14 +698,14 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{
// rbuf.len = bcnt + rlen - szModbusHeader;
dlog.warn() << "(recv): buf: " << rbuf << endl;
dlog.warn() << "(recv)(" << rbuf.func
<< "): Получили данных меньше чем ждали...(recv="
dlog.warn() << "(recv)(" << rbuf.func
<< "): Получили данных меньше чем ждали...(recv="
<< rlen << " < wait=" << (int)rbuf.len << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt+=rlen;
// получаем остальное...
......@@ -815,16 +815,16 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnForceMultipleCoils )
{
int szDataLen = ForceCoilsMessage::getDataLen(rbuf)+szCRC;
if( crcNoCheckit )
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
......@@ -833,15 +833,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{
rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x0F): buf: " << rbuf << endl;
dlog.warn() << "(0x0F)("
dlog.warn() << "(0x0F)("
<< rbuf.func << "):(fnForceMultipleCoils) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -853,7 +853,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( !crcNoCheckit )
{
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -872,15 +872,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{
if( dlog.is_warn() )
{
dlog.warn() << "(0x0F): (" << rbuf.func
dlog.warn() << "(0x0F): (" << rbuf.func
<< ")(fnForceMultipleCoils): "
<< ": некорректный формат сообщения..." << endl;
<< ": некорректный формат сообщения..." << endl;
}
cleanupChannel();
return erInvalidFormat;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnWriteOutputRegisters )
{
......@@ -888,9 +888,9 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( crcNoCheckit )
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
......@@ -899,15 +899,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{
rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x10): buf: " << rbuf << endl;
dlog.warn() << "(0x10)("
dlog.warn() << "(0x10)("
<< rbuf.func << "):(fnWriteOutputRegisters) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -919,7 +919,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( !crcNoCheckit )
{
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -936,17 +936,17 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum;
}
}
if( !mWrite.checkFormat() )
{
dlog.warn() << "(0x10): (" << rbuf.func
dlog.warn() << "(0x10): (" << rbuf.func
<< ")(fnWriteOutputRegisters): "
<< ": некорректный формат сообщения..." << endl;
<< ": некорректный формат сообщения..." << endl;
cleanupChannel();
return erInvalidFormat;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnForceSingleCoil )
{
......@@ -954,9 +954,9 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( crcNoCheckit )
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
......@@ -965,15 +965,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{
rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x05): buf: " << rbuf << endl;
dlog.warn() << "(0x05)("
dlog.warn() << "(0x05)("
<< rbuf.func << "):(fnForceSingleCoil) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -985,7 +985,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( !crcNoCheckit )
{
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -1002,17 +1002,17 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum;
}
}
if( !mWrite.checkFormat() )
{
dlog.warn() << "(0x05): (" << rbuf.func
dlog.warn() << "(0x05): (" << rbuf.func
<< ")(fnForceSingleCoil): "
<< ": некорректный формат сообщения..." << endl;
<< ": некорректный формат сообщения..." << endl;
cleanupChannel();
return erInvalidFormat;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnWriteOutputSingleRegister )
{
......@@ -1020,9 +1020,9 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( crcNoCheckit )
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
......@@ -1031,15 +1031,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{
rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x06): buf: " << rbuf << endl;
dlog.warn() << "(0x06)("
dlog.warn() << "(0x06)("
<< rbuf.func << "):(fnWriteOutputSingleRegisters) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -1051,7 +1051,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( !crcNoCheckit )
{
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -1071,14 +1071,14 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( !mWrite.checkFormat() )
{
dlog.warn() << "(0x06): (" << rbuf.func
dlog.warn() << "(0x06): (" << rbuf.func
<< ")(fnWriteOutputSingleRegisters): "
<< ": некорректный формат сообщения..." << endl;
<< ": некорректный формат сообщения..." << endl;
cleanupChannel();
return erInvalidFormat;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnDiagnostics )
{
......@@ -1086,9 +1086,9 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( crcNoCheckit )
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
......@@ -1097,15 +1097,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{
rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x08): buf: " << rbuf << endl;
dlog.warn() << "(0x08)("
dlog.warn() << "(0x08)("
<< rbuf.func << "):(fnDiagnostics) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -1117,7 +1117,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( !crcNoCheckit )
{
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -1134,12 +1134,12 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum;
}
}
/*
/*
if( !mDiag.checkFormat() )
{
dlog.warn() << "(0x08): (" << rbuf.func
dlog.warn() << "(0x08): (" << rbuf.func
<< ")(fnDiagnostics): "
<< ": некорректный формат сообщения..." << endl;
<< ": некорректный формат сообщения..." << endl;
cleanupChannel();
return erInvalidFormat;
}
......@@ -1157,15 +1157,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{
rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x2B/0x0E): buf: " << rbuf << endl;
dlog.warn() << "(0x2B/0x0E)("
dlog.warn() << "(0x2B/0x0E)("
<< rbuf.func << "):(fnMEI) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szCRC << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
}
......@@ -1179,7 +1179,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -1197,7 +1197,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
}
return erNoError;
}
}
else if( rbuf.func == fnJournalCommand )
{
JournalCommandMessage mRead(rbuf);
......@@ -1224,7 +1224,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnSetDateTime )
{
......@@ -1251,7 +1251,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum;
}
}
if( !mSet.checkFormat() )
{
dlog.warn() << "(0x50): некорректные значения..." << endl;
......@@ -1259,7 +1259,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadDataValue; // return erInvalidFormat;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnRemoteService )
{
......@@ -1269,7 +1269,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
......@@ -1278,15 +1278,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{
rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x53): buf: " << rbuf << endl;
dlog.warn() << "(0x53)("
dlog.warn() << "(0x53)("
<< rbuf.func << "):(fnWriteOutputRegisters) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -1299,7 +1299,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -1316,7 +1316,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnFileTransfer )
{
......@@ -1328,7 +1328,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -1351,7 +1351,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{
// А как мы сюда добрались?!!!!!!
return erUnExpectedPacketType;
}
}
}
catch( ModbusRTU::mbException& ex ) // SystemError
{
......@@ -1382,8 +1382,8 @@ void ModbusServer::setLog( DebugStream& l )
// -------------------------------------------------------------------------
void ModbusServer::initLog( UniSetTypes::Configuration* conf,
const std::string lname, const string logfile )
{
const std::string& lname, const string& logfile )
{
conf->initDebug(dlog,lname);
if( !logfile.empty() )
......@@ -1396,14 +1396,14 @@ void ModbusServer::printProcessingTime()
dlog.info() << "(processingTime): " << tmProcessing.getCurrent() << " [msec] (lim: " << tmProcessing.getInterval() << ")" << endl;
}
// -------------------------------------------------------------------------
ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string fname,
ModbusRTU::FileTransferMessage& query,
ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string &fname,
ModbusRTU::FileTransferMessage& query,
ModbusRTU::FileTransferRetMessage& reply,
DebugStream* dlog )
{
if( dlog && dlog->is_info() )
(*dlog)[Debug::INFO] << "(replyFileTransfer): " << query << endl;
int fd = open(fname.c_str(), O_RDONLY | O_NONBLOCK );
if( fd <= 0 )
{
......@@ -1434,12 +1434,12 @@ ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string fname,
close(fd);
return ModbusRTU::erOperationFailed;
}
close(fd);
close(fd);
int numpacks = fs.st_size / ModbusRTU::FileTransferRetMessage::MaxDataLen;
if( fs.st_size % ModbusRTU::FileTransferRetMessage::MaxDataLen )
numpacks++;
if( !reply.set(query.numfile,numpacks,query.numpacket,buf,ret) )
{
if( dlog && dlog->is_warn() )
......@@ -1447,8 +1447,8 @@ ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string fname,
return ModbusRTU::erOperationFailed;
}
return ModbusRTU::erNoError;
}
return ModbusRTU::erNoError;
}
// -------------------------------------------------------------------------
ModbusRTU::mbErrCode ModbusServer::replySetDateTime( ModbusRTU::SetDateTimeMessage& query,
ModbusRTU::SetDateTimeRetMessage& reply,
......@@ -1485,9 +1485,9 @@ ModbusRTU::mbErrCode ModbusServer::replySetDateTime( ModbusRTU::SetDateTimeMessa
}
else if( dlog && dlog->is_warn() )
(*dlog)[Debug::WARN] << "(replySetDateTime): gettimeofday err: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed;
}
}
// -------------------------------------------------------------------------
mbErrCode ModbusServer::send( ModbusMessage& msg )
{
......
......@@ -271,7 +271,7 @@ void ModbusTCPMaster::cleanInputStream()
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
{
......@@ -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());
connect(ia,port);
......
......@@ -2539,7 +2539,7 @@ MEIMessageRetRDI::MEIMessageRetRDI( ModbusAddr _addr, ModbusByte devID, ModbusBy
func = fnMEI;
}
// -------------------------------------------------------------------------
bool MEIMessageRetRDI::addData( ModbusByte id, const std::string val )
bool MEIMessageRetRDI::addData( ModbusByte id, const std::string& val )
{
if( isFull() )
return false;
......@@ -2813,7 +2813,7 @@ float ModbusRTU::dat2f( const ModbusData dat1, const ModbusData dat2 )
return f;
}
// -------------------------------------------------------------------------
ModbusAddr ModbusRTU::str2mbAddr( const std::string val )
ModbusAddr ModbusRTU::str2mbAddr( const std::string& val )
{
if( val.empty() )
return 0;
......@@ -2821,7 +2821,7 @@ ModbusAddr ModbusRTU::str2mbAddr( const std::string val )
return (ModbusAddr)UniSetTypes::uni_atoi(val);
}
// -------------------------------------------------------------------------
ModbusData ModbusRTU::str2mbData( const std::string val )
ModbusData ModbusRTU::str2mbData( const std::string& val )
{
if( val.empty() )
return 0;
......
......@@ -1202,7 +1202,7 @@ bool UInterface::isExist( UniSetTypes::ObjectId id, UniSetTypes::ObjectId node )
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 )
return string(pre+" DefaultObjectId");
......
......@@ -47,7 +47,7 @@ string IORFile::getIOR( const ObjectId id, const ObjectId node )
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) );
ofstream ior_file(fname.c_str(), ios::out | ios::trunc);
......
......@@ -31,7 +31,7 @@ using namespace std;
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 )
{
if( rawMax == rawMin ) return 0; // деление на 0!!!
......@@ -52,7 +52,7 @@ using namespace UniSetTypes;
if( ret < calMax )
return calMax;
}
return ret;
}
// -------------------------------------------------------------------------
......@@ -61,7 +61,7 @@ using namespace UniSetTypes;
{
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 );
if( !limit )
......@@ -85,7 +85,7 @@ using namespace UniSetTypes;
if( ret < calMax )
return calMax;
}
return ret;
}
......@@ -106,9 +106,9 @@ using namespace UniSetTypes;
UniSetTypes::IDList::IDList():
node(UniSetTypes::conf->getLocalNode())
{
}
UniSetTypes::IDList::~IDList()
{
}
......@@ -120,11 +120,11 @@ using namespace UniSetTypes;
if( (*it) == id )
return;
}
lst.push_back(id);
}
void UniSetTypes::IDList::del( ObjectId id )
{
for( list<ObjectId>::iterator it=lst.begin(); it!=lst.end(); ++it )
......@@ -146,7 +146,7 @@ using namespace UniSetTypes;
{
if( lst.empty() )
return UniSetTypes::DefaultObjectId;
return (*lst.begin());
}
......@@ -159,18 +159,18 @@ using namespace UniSetTypes;
int i=0;
for( list<ObjectId>::iterator it=lst.begin(); it!=lst.end(); ++it,i++ )
(*seq)[i] = (*it);
return seq;
}
// -------------------------------------------------------------------------
bool UniSetTypes::file_exist( const std::string filename )
bool UniSetTypes::file_exist( const std::string& filename )
{
std::ifstream file;
#ifdef HAVE_IOS_NOCREATE
file.open( filename.c_str(), std::ios::in | std::ios::nocreate );
#else
#else
file.open( filename.c_str(), std::ios::in );
#endif
#endif
bool result = false;
if( file )
result = true;
......@@ -179,7 +179,7 @@ using namespace UniSetTypes;
return result;
}
// -------------------------------------------------------------------------
UniSetTypes::IDList UniSetTypes::explode( const string str, char sep )
UniSetTypes::IDList UniSetTypes::explode( const string& str, char sep )
{
UniSetTypes::IDList l;
......@@ -196,11 +196,11 @@ using namespace UniSetTypes;
}
}
while( pos!=string::npos );
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;
......@@ -217,31 +217,31 @@ using namespace UniSetTypes;
}
}
while( pos!=string::npos );
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++ )
{
if( !isdigit(*it) )
return false;
}
return true;
//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<std::string> l = UniSetTypes::explode_str(str,',');
for( std::list<std::string>::iterator it=l.begin(); it!=l.end(); it++ )
{
UniSetTypes::ParamSInfo item;
std::list<std::string> p = UniSetTypes::explode_str((*it),'=');
std::string s = "";
if( p.size() == 1 )
......@@ -258,8 +258,8 @@ using namespace UniSetTypes;
{
cerr << "WARNING: parse error for '" << (*it) << "'. IGNORE..." << endl;
continue;
}
}
item.fname = s;
std::list<std::string> t = UniSetTypes::explode_str(s,'@');
if( t.size() == 1 )
......@@ -279,7 +279,7 @@ using namespace UniSetTypes;
item.si.id = uni_atoi(s_id);
else
item.si.id = conf->getSensorID(s_id);
if( is_digit(s_node.c_str()) )
item.si.node = uni_atoi(s_node);
else
......@@ -293,12 +293,12 @@ using namespace UniSetTypes;
res.push_back(item);
}
return res;
}
// --------------------------------------------------------------------------------------
UniversalIO::IOType UniSetTypes::getIOType( const std::string stype )
UniversalIO::IOType UniSetTypes::getIOType( const std::string& stype )
{
if ( stype == "DI" || stype == "di" )
return UniversalIO::DI;
......@@ -336,7 +336,7 @@ using namespace UniSetTypes;
<< " 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() )
return true;
......@@ -352,23 +352,23 @@ using namespace UniSetTypes;
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);
ostringstream time;
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_sec;
time << std::setw(2) << std::setfill('0') << tms->tm_sec;
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);
ostringstream date;
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_mday;
date << std::setw(2) << std::setfill('0') << tms->tm_mday;
return date.str();
}
......
......@@ -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),
ioMutex(name+"_ioMutex"),
isPingDBServer(true)
......
......@@ -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),
restorer(d),
askIOMutex(name+"askIOMutex"),
......
......@@ -42,7 +42,7 @@ using namespace std;
// -------------------------------------------------------------------------
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="" )
{
// чтобы не менчять параметры основного потока
......@@ -66,7 +66,7 @@ ostream& UniSetTypes::Configuration::help(ostream& os)
print_help(os,25,"--uniport num","использовать заданный порт (переопеределяет 'defaultport' заданный в конф. файле в разделе <nodes>)\n");
print_help(os,25,"--localIOR {1,0}","использовать локальные файлы для получения IOR (т.е. не использовать omniNames). Переопределяет параметр в конфигурационном файле.\n");
print_help(os,25,"--transientIOR {1,0}","использовать генерируемые IOR(не постоянные). Переопределяет параметр в конфигурационном файле. Default=1\n");
return os << "\nПример использования:\t myUniSetProgram "
<< "--ulog.dd-levels level1,info,system,warn --ulog.og-in-file myprogrpam.log\n\n";
}
......@@ -80,7 +80,7 @@ namespace UniSetTypes
Configuration::Configuration():
oind(NULL),
NSName("NameService"),
repeatCount(2),repeatTimeout(100),
repeatCount(2),repeatTimeout(100),
localDBServer(UniSetTypes::DefaultObjectId),
localNode(UniSetTypes::DefaultObjectId),
localNodeName(""),
......@@ -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),
_argc(argc),
_argv(argv),
......@@ -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,
const string fileConf ):
const string& fileConf ):
oind(NULL),
_argc(argc),
_argv(argv),
NSName("NameService"),
repeatCount(2),repeatTimeout(100),
repeatCount(2),repeatTimeout(100),
localDBServer(UniSetTypes::DefaultObjectId),
localNode(UniSetTypes::DefaultObjectId),
localNodeName(""),
......@@ -137,13 +137,13 @@ Configuration::Configuration( int argc, const char* const* argv, ObjectIndex* _o
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 ):
oind(NULL),
_argc(argc),
_argv(argv),
NSName("NameService"),
repeatCount(2),repeatTimeout(100),
repeatCount(2),repeatTimeout(100),
localDBServer(UniSetTypes::DefaultObjectId),
localNode(UniSetTypes::DefaultObjectId),
localNodeName(""),
......@@ -194,13 +194,13 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
ulog << "(Configuration): FAILED open configuration from " << fileConfName << endl;
throw;
}
// default value
heartbeat_msec = 5000;
// cerr << "*************** initConfiguration: xmlOpen: " << pt.getCurrent() << " msec " << endl;
// pt.reset();
// Init ObjectIndex interface
{
if( oind == NULL )
......@@ -228,7 +228,7 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
}
}
}
// Настраиваем отладочные логи
initDebug(ulog,"UniSetDebug");
......@@ -302,11 +302,11 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
ostringstream uri;
uri << "corbaname::" << it->host << ":" << it->port;
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 );
}
// т..к _argc уже изменился, то и _argv надо обновить
// чтобы вызов getArgParam не привел к SIGSEGV
_argv = new_argv;
......@@ -323,7 +323,7 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
{
new_argv[i] = "-ORBInitRef";
new_argv[i+1] = ""; // сперва инициализиуем пустой строкой (т.к. будет вызываться getArgParam)
string defPort( getPort( getProp(nsnode,"port") ) ); // здесь вызывается getArgParam! проходящий по _argv
ostringstream param;
......@@ -338,19 +338,19 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
ostringstream uri;
uri << "corbaname::" << getProp(nsnode,"host") << ":" << defPort;
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;
// ------------- CORBA INIT -------------
// ------------- CORBA INIT -------------
// orb init
orb = CORBA::ORB_init(_argc,(char**)_argv);
// create policy
CORBA::Object_var obj = orb->resolve_initial_references("RootPOA");
PortableServer::POA_var root_poa = PortableServer::POA::_narrow(obj);
CORBA::PolicyList pl;
if( transientIOR == false )
{
pl.length(3);
......@@ -366,10 +366,10 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
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[3] = root_poa->create_thread_policy(PortableServer::SINGLE_THREAD_MODEL);
}
}
policyList = pl;
// ---------------------------------------
// ---------------------------------------
}
catch( Exception& ex )
......@@ -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);
}
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 ));
}
int Configuration::getArgPInt( const string name, int defval )
int Configuration::getArgPInt( const string& name, int defval )
{
string param = getArgParam(name,"");
if( param.empty() )
......@@ -406,7 +406,7 @@ int Configuration::getArgPInt( const string name, int defval )
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);
if( param.empty() && strdefval.empty() )
......@@ -434,11 +434,11 @@ void Configuration::initParameters()
ulog.crit()<< "Configuration: INIT PARAM`s FAILED!!!!"<< endl;
throw Exception("Configuration: INIT PARAM`s FAILED!!!!");
}
for( ; it.getCurrent(); it.goNext() )
{
string name( it.getName() );
if( name == "LocalNode" )
{
if( localNode == UniSetTypes::DefaultObjectId )
......@@ -523,12 +523,14 @@ void Configuration::initParameters()
}
}
// -------------------------------------------------------------------------
void Configuration::setLocalNode( string nodename )
void Configuration::setLocalNode( const string& nodename )
{
string virtnode = oind->getVirtualNodeName(nodename);
string nn(nodename);
if( virtnode.empty() )
nodename = oind->mkFullNodeName(nodename,nodename);
localNode = oind->getIdByName(nodename);
nn = oind->mkFullNodeName(nodename,nodename);
localNode = oind->getIdByName(nn);
if( localNode == DefaultObjectId )
{
......@@ -538,8 +540,8 @@ void Configuration::setLocalNode( string nodename )
ulog.crit()<< err.str() << endl;
throw Exception(err.str());
}
localNodeName = oind->getRealNodeName(nodename);
localNodeName = oind->getRealNodeName(nn);
oind->initLocalNode(localNode);
}
// -------------------------------------------------------------------------
......@@ -548,33 +550,33 @@ xmlNode* Configuration::getNode(const string& 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);
}
int Configuration::getIntProp(xmlNode* node, const string name)
int Configuration::getIntProp(xmlNode* node, const string& 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);
}
// -------------------------------------------------------------------------
string Configuration::getField(const string path)
string Configuration::getField(const string& path)
{
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");
}
// -------------------------------------------------------------------------
int Configuration::getPIntField(const std::string path, int def)
int Configuration::getPIntField(const std::string& path, int def)
{
int i = getIntField(path);;
if (i <= 0)
......@@ -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() )
return 0;
......@@ -647,7 +649,7 @@ void Configuration::createNodesList()
ulog.crit()<< "Configuration(createNodesList): Not found ID for node '" << nodename << "'" << endl;
throw Exception("Configuration(createNodesList): Not found ID for node '"+nodename+"'");
}
ninf.host = getProp(it,"ip").c_str();
string tp(getProp(it,"port"));
if( tp.empty() )
......@@ -656,7 +658,7 @@ void Configuration::createNodesList()
ninf.port = tp.c_str();
string tmp(it.getProp("dbserver"));
if( tmp.empty() )
ninf.dbserver = UniSetTypes::DefaultObjectId;
else
......@@ -675,13 +677,13 @@ void Configuration::createNodesList()
localDBServer = ninf.dbserver;
ninf.connected = false;
initNode(ninf, it);
if( ulog.is_info() )
ulog.info() << "Configuration(createNodesList): add to list of nodes: node=" << nodename << " id=" << ninf.id << endl;
lnodes.push_back(ninf);
}
}
if( ulog.is_info() )
ulog.info() << "Configuration(createNodesList): size of node list " << lnodes.size() << endl;
......@@ -746,12 +748,12 @@ xmlNode* Configuration::initDebug( DebugStream& deb, const string& _debname )
if( !debug_file.empty() )
deb.logFile(debug_file);
}
// теперь смотрим командную строку
string log_in("--"+debname+"-log-in-file");
string add_level("--"+debname+"-add-levels");
string del_level("--"+debname+"-del-levels");
// смотрим командную строку
for (int i=1; i < (_argc - 1); i++)
{
......@@ -792,7 +794,7 @@ void Configuration::initRepSections()
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);
if( node == NULL )
......@@ -803,7 +805,7 @@ string Configuration::getRepSectionName( const string sec, xmlNode* secnode )
ulog.crit()<< msg.str() << endl;
throw SystemError(msg.str());
}
secnode = node;
string ret(unixml.getProp(node,"section"));
......@@ -813,7 +815,7 @@ string Configuration::getRepSectionName( const string sec, xmlNode* secnode )
return ret;
}
// -------------------------------------------------------------------------
void Configuration::setConfFileName( const string fn )
void Configuration::setConfFileName( const string& fn )
{
if( !fn.empty() )
{
......@@ -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"));
......@@ -868,15 +870,15 @@ string Configuration::getPort(const string port)
return UniSetDefaultPort;
}
// -------------------------------------------------------------------------
ObjectId Configuration::getSensorID( const std::string name )
ObjectId Configuration::getSensorID( const std::string& name )
{
if( name.empty() )
return DefaultObjectId;
return oind->getIdByName(getSensorsSection()+"/"+name);
}
// -------------------------------------------------------------------------
ObjectId Configuration::getControllerID( const std::string name )
ObjectId Configuration::getControllerID( const std::string& name )
{
if( name.empty() )
return DefaultObjectId;
......@@ -884,7 +886,7 @@ ObjectId Configuration::getControllerID( const std::string name )
return oind->getIdByName(getControllersSection()+"/"+name);
}
// -------------------------------------------------------------------------
ObjectId Configuration::getObjectID( const std::string name )
ObjectId Configuration::getObjectID( const std::string& name )
{
if( name.empty() )
return DefaultObjectId;
......@@ -892,7 +894,7 @@ ObjectId Configuration::getObjectID( const std::string name )
return oind->getIdByName(getObjectsSection()+"/"+name);
}
// -------------------------------------------------------------------------
ObjectId Configuration::getServiceID( const std::string name )
ObjectId Configuration::getServiceID( const std::string& name )
{
if( name.empty() )
return DefaultObjectId;
......@@ -900,15 +902,14 @@ ObjectId Configuration::getServiceID( const std::string 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() )
return DefaultObjectId;
if( alias.empty() )
alias = name;
// return oind->getNodeId( oind->mkFullNodeName(name,alias) );
return oind->getIdByName( oind->mkFullNodeName(name,alias) );
string a( (alias.empty() ? name : alias ) );
return oind->getIdByName( oind->mkFullNodeName(name,a) );
}
// -------------------------------------------------------------------------
......@@ -922,7 +923,7 @@ xmlNode* Configuration::getXMLSensorsSection()
{
if( xmlSensorsSec )
return xmlSensorsSec;
xmlSensorsSec = unixml.findNode(unixml.getFirstNode(),"sensors");
return xmlSensorsSec;
}
......@@ -931,7 +932,7 @@ xmlNode* Configuration::getXMLObjectsSection()
{
if( xmlObjectsSec )
return xmlObjectsSec;
xmlObjectsSec = unixml.findNode(unixml.getFirstNode(),"objects");
return xmlObjectsSec;
}
......@@ -940,7 +941,7 @@ xmlNode* Configuration::getXMLControllersSection()
{
if( xmlControllersSec )
return xmlControllersSec;
xmlControllersSec = unixml.findNode(unixml.getFirstNode(),"controllers");
return xmlControllersSec;
......@@ -950,7 +951,7 @@ xmlNode* Configuration::getXMLServicesSection()
{
if( xmlServicesSec )
return xmlServicesSec;
xmlServicesSec = unixml.findNode(unixml.getFirstNode(),"services");
return xmlServicesSec;
}
......@@ -959,7 +960,7 @@ xmlNode* Configuration::getXMLNodesSection()
{
if( xmlNodesSec )
return xmlNodesSec;
xmlNodesSec = unixml.findNode(unixml.getFirstNode(),"nodes");
return xmlNodesSec;
}
......@@ -985,10 +986,10 @@ UniversalIO::IOType Configuration::getIOType( UniSetTypes::ObjectId id )
return UniversalIO::UnknownIOType;
}
// -------------------------------------------------------------------------
UniversalIO::IOType Configuration::getIOType( const std::string name )
UniversalIO::IOType Configuration::getIOType( const std::string& name )
{
// Если указано "короткое" имя
// то просто сперва ищём ID, а потом по нему
// то просто сперва ищём ID, а потом по нему
// iotype
ObjectId id = getSensorID(name);
if( id != DefaultObjectId )
......
......@@ -221,7 +221,7 @@ const DebugStream& DebugStream::operator=( const DebugStream& r )
}
//--------------------------------------------------------------------------
/// Sets the debugstreams' logfile to f.
void DebugStream::logFile(const std::string f)
void DebugStream::logFile( const std::string& f )
{
fname = f;
if (internal) {
......
......@@ -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_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_filterValue = val;
......@@ -184,7 +184,7 @@ bool Restorer_XML::check_consumer_item( UniXML_iterator& it )
}
// -----------------------------------------------------------------------------
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);
if( it.goChildren() )
......
......@@ -35,7 +35,7 @@ using namespace UniSetTypes;
using namespace UniversalIO;
using namespace std;
// --------------------------------------------------------------------------
SViewer::SViewer(const string csec, bool sn):
SViewer::SViewer(const string& csec, bool sn):
csec(csec),
rep(UniSetTypes::conf),
cache(500, 15),
......@@ -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;
string curSection;
......
......@@ -12,7 +12,7 @@
// --------------------------------------------------------------------------
using namespace std;
// --------------------------------------------------------------------------
WDTInterface::WDTInterface( const std::string _dev ):
WDTInterface::WDTInterface( const std::string& _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