Commit 8d4fbf3b authored by Pavel Vainerman's avatar Pavel Vainerman

(Log): встроил LogServer в MBSlave и MBMaster

parent 32204606
...@@ -45,13 +45,23 @@ MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId ...@@ -45,13 +45,23 @@ MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId
shm = make_shared<SMInterface>(shmId, ui, objId, ic); shm = make_shared<SMInterface>(shmId, ui, objId, ic);
mblog = make_shared<DebugStream>();
conf->initLogStream(mblog, prefix + "-log");
logserv = make_shared<LogServer>(mblog);
UniXML::iterator it(cnode); UniXML::iterator it(cnode);
if( findArgParam("--" + prefix + "-run-logserver", conf->getArgc(), conf->getArgv()) != -1 )
{
logserv_host = conf->getArg2Param("--" + prefix + "-logserver-host", it.getProp("logserverHost"), "localhost");
logserv_port = conf->getArgPInt("--" + prefix + "-logserver-port", it.getProp("logserverPort"), getId());
}
// определяем фильтр // определяем фильтр
s_field = conf->getArgParam("--" + prefix + "-filter-field"); s_field = conf->getArgParam("--" + prefix + "-filter-field");
s_fvalue = conf->getArgParam("--" + prefix + "-filter-value"); s_fvalue = conf->getArgParam("--" + prefix + "-filter-value");
dinfo << myname << "(init): read fileter-field='" << s_field mbinfo << myname << "(init): read fileter-field='" << s_field
<< "' filter-value='" << s_fvalue << "'" << endl; << "' filter-value='" << s_fvalue << "'" << endl;
prop_prefix = initPropPrefix(); prop_prefix = initPropPrefix();
...@@ -72,7 +82,7 @@ MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId ...@@ -72,7 +82,7 @@ MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId
noQueryOptimization = conf->getArgInt("--" + prefix + "-no-query-optimization", it.getProp("no_query_optimization")); noQueryOptimization = conf->getArgInt("--" + prefix + "-no-query-optimization", it.getProp("no_query_optimization"));
mbregFromID = conf->getArgInt("--" + prefix + "-reg-from-id", it.getProp("reg_from_id")); mbregFromID = conf->getArgInt("--" + prefix + "-reg-from-id", it.getProp("reg_from_id"));
dinfo << myname << "(init): mbregFromID=" << mbregFromID << endl; mbinfo << myname << "(init): mbregFromID=" << mbregFromID << endl;
polltime = conf->getArgPInt("--" + prefix + "-polltime", it.getProp("polltime"), 100); polltime = conf->getArgPInt("--" + prefix + "-polltime", it.getProp("polltime"), 100);
...@@ -99,7 +109,7 @@ MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId ...@@ -99,7 +109,7 @@ MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId
{ {
ostringstream err; ostringstream err;
err << myname << ": ID not found ('HeartBeat') for " << heart; err << myname << ": ID not found ('HeartBeat') for " << heart;
dcrit << myname << "(init): " << err.str() << endl; mbcrit << myname << "(init): " << err.str() << endl;
throw SystemError(err.str()); throw SystemError(err.str());
} }
...@@ -121,12 +131,12 @@ MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId ...@@ -121,12 +131,12 @@ MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId
{ {
ostringstream err; ostringstream err;
err << myname << "(init): test_id unknown. 'TestMode_S' not found..."; err << myname << "(init): test_id unknown. 'TestMode_S' not found...";
dcrit << myname << "(init): " << err.str() << endl; mbcrit << myname << "(init): " << err.str() << endl;
throw SystemError(err.str()); throw SystemError(err.str());
} }
} }
dinfo << myname << "(init): test_id=" << test_id << endl; mbinfo << myname << "(init): test_id=" << test_id << endl;
string emode = conf->getArgParam("--" + prefix + "-exchange-mode-id", it.getProp("exchangeModeID")); string emode = conf->getArgParam("--" + prefix + "-exchange-mode-id", it.getProp("exchangeModeID"));
...@@ -138,7 +148,7 @@ MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId ...@@ -138,7 +148,7 @@ MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId
{ {
ostringstream err; ostringstream err;
err << myname << ": ID not found ('ExchangeMode') for " << emode; err << myname << ": ID not found ('ExchangeMode') for " << emode;
dcrit << myname << "(init): " << err.str() << endl; mbcrit << myname << "(init): " << err.str() << endl;
throw SystemError(err.str()); throw SystemError(err.str());
} }
} }
...@@ -199,6 +209,18 @@ void MBExchange::help_print( int argc, const char* const* argv ) ...@@ -199,6 +209,18 @@ void MBExchange::help_print( int argc, const char* const* argv )
cout << "--prefix-default-mbtype [rtu|rtu188|mtr] - У датчиков которых не задан 'mbtype' использовать данный. По умолчанию: 'rtu'" << endl; cout << "--prefix-default-mbtype [rtu|rtu188|mtr] - У датчиков которых не задан 'mbtype' использовать данный. По умолчанию: 'rtu'" << endl;
cout << "--prefix-default-mbadd addr - У датчиков которых не задан 'mbaddr' использовать данный. По умолчанию: ''" << endl; cout << "--prefix-default-mbadd addr - У датчиков которых не задан 'mbaddr' использовать данный. По умолчанию: ''" << endl;
cout << "--prefix-default-mbinit-ok 0,1 - Флаг инициализации. 1 - не ждать первого обмена с устройством, а сохранить при старте в SM значение 'default'" << endl; cout << "--prefix-default-mbinit-ok 0,1 - Флаг инициализации. 1 - не ждать первого обмена с устройством, а сохранить при старте в SM значение 'default'" << endl;
cout << endl;
cout << " Logs: " << endl;
cout << "--prefix-log-... - log control" << endl;
cout << " add-levels ... " << endl;
cout << " del-levels ... " << endl;
cout << " set-levels ... " << endl;
cout << " logfile filanme " << endl;
cout << " no-debug " << endl;
cout << " LogServer: " << endl;
cout << "--prefix-run-logserver - run logserver. Default: localhost:id" << endl;
cout << "--prefix-logserver-host ip - listen ip. Default: localhost" << endl;
cout << "--prefix-logserver-port num - listen port. Default: ID" << endl;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
MBExchange::~MBExchange() MBExchange::~MBExchange()
...@@ -246,7 +268,7 @@ void MBExchange::waitSMReady() ...@@ -246,7 +268,7 @@ void MBExchange::waitSMReady()
{ {
ostringstream err; ostringstream err;
err << myname << "(waitSMReady): failed waiting SharedMemory " << ready_timeout << " msec. ==> TERMINATE!"; err << myname << "(waitSMReady): failed waiting SharedMemory " << ready_timeout << " msec. ==> TERMINATE!";
dcrit << err.str() << endl; mbcrit << err.str() << endl;
raise(SIGTERM); raise(SIGTERM);
//if( checkProcActive() ) //if( checkProcActive() )
// throw SystemError(err.str()); // throw SystemError(err.str());
...@@ -270,7 +292,7 @@ void MBExchange::step() ...@@ -270,7 +292,7 @@ void MBExchange::step()
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
dcrit << myname << "(step): (hb) " << ex << std::endl; mbcrit << myname << "(step): (hb) " << ex << std::endl;
} }
} }
} }
...@@ -288,7 +310,7 @@ void MBExchange::setProcActive( bool st ) ...@@ -288,7 +310,7 @@ void MBExchange::setProcActive( bool st )
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void MBExchange::sigterm( int signo ) void MBExchange::sigterm( int signo )
{ {
dwarn << myname << ": ********* SIGTERM(" << signo << ") ********" << endl; mbwarn << myname << ": ********* SIGTERM(" << signo << ") ********" << endl;
setProcActive(false); setProcActive(false);
try try
...@@ -318,7 +340,7 @@ void MBExchange::readConfiguration() ...@@ -318,7 +340,7 @@ void MBExchange::readConfiguration()
if( !it.goChildren() ) if( !it.goChildren() )
{ {
dcrit << myname << "(readConfiguration): раздел <sensors> не содержит секций ?!!\n"; mbcrit << myname << "(readConfiguration): раздел <sensors> не содержит секций ?!!\n";
return; return;
} }
...@@ -415,29 +437,29 @@ bool MBExchange::checkUpdateSM( bool wrFunc, long mdev ) ...@@ -415,29 +437,29 @@ bool MBExchange::checkUpdateSM( bool wrFunc, long mdev )
if( wrFunc ) if( wrFunc )
return true; // данные для посылки, должны обновляться всегда (чтобы быть актуальными, когда режим переключиться обратно..) return true; // данные для посылки, должны обновляться всегда (чтобы быть актуальными, когда режим переключиться обратно..)
dlog3 << "(checkUpdateSM):" mblog3 << "(checkUpdateSM):"
<< " skip... mode='emSkipExchange' " << endl; << " skip... mode='emSkipExchange' " << endl;
return false; return false;
} }
if( wrFunc && (exchangeMode == emReadOnly || mdev == emReadOnly) ) if( wrFunc && (exchangeMode == emReadOnly || mdev == emReadOnly) )
{ {
dlog3 << "(checkUpdateSM):" mblog3 << "(checkUpdateSM):"
<< " skip... mode='emReadOnly' " << endl; << " skip... mode='emReadOnly' " << endl;
return false; return false;
} }
if( !wrFunc && (exchangeMode == emWriteOnly || mdev == emWriteOnly) ) if( !wrFunc && (exchangeMode == emWriteOnly || mdev == emWriteOnly) )
{ {
dlog3 << "(checkUpdateSM):" mblog3 << "(checkUpdateSM):"
<< " skip... mode='emWriteOnly' " << endl; << " skip... mode='emWriteOnly' " << endl;
return false; return false;
} }
if( !wrFunc && (exchangeMode == emSkipSaveToSM || mdev == emSkipSaveToSM) ) if( !wrFunc && (exchangeMode == emSkipSaveToSM || mdev == emSkipSaveToSM) )
{ {
dlog3 << "(checkUpdateSM):" mblog3 << "(checkUpdateSM):"
<< " skip... mode='emSkipSaveToSM' " << endl; << " skip... mode='emSkipSaveToSM' " << endl;
return false; return false;
} }
...@@ -448,19 +470,19 @@ bool MBExchange::checkPoll( bool wrFunc ) ...@@ -448,19 +470,19 @@ bool MBExchange::checkPoll( bool wrFunc )
{ {
if( exchangeMode == emWriteOnly && !wrFunc ) if( exchangeMode == emWriteOnly && !wrFunc )
{ {
dlog3 << myname << "(checkPoll): skip.. mode='emWriteOnly'" << endl; mblog3 << myname << "(checkPoll): skip.. mode='emWriteOnly'" << endl;
return false; return false;
} }
if( exchangeMode == emReadOnly && wrFunc ) if( exchangeMode == emReadOnly && wrFunc )
{ {
dlog3 << myname << "(checkPoll): skip.. poll mode='emReadOnly'" << endl; mblog3 << myname << "(checkPoll): skip.. poll mode='emReadOnly'" << endl;
return false; return false;
} }
if( exchangeMode == emSkipExchange ) if( exchangeMode == emSkipExchange )
{ {
dlog3 << myname << "(checkPoll): skip.. poll mode='emSkipExchange'" << endl; mblog3 << myname << "(checkPoll): skip.. poll mode='emSkipExchange'" << endl;
return false; return false;
} }
...@@ -531,7 +553,7 @@ void MBExchange::rtuQueryOptimization( RTUDeviceMap& m ) ...@@ -531,7 +553,7 @@ void MBExchange::rtuQueryOptimization( RTUDeviceMap& m )
if( noQueryOptimization ) if( noQueryOptimization )
return; return;
dinfo << myname << "(rtuQueryOptimization): optimization..." << endl; mbinfo << myname << "(rtuQueryOptimization): optimization..." << endl;
for( auto it1 = m.begin(); it1 != m.end(); ++it1 ) for( auto it1 = m.begin(); it1 != m.end(); ++it1 )
{ {
...@@ -569,21 +591,21 @@ void MBExchange::rtuQueryOptimization( RTUDeviceMap& m ) ...@@ -569,21 +591,21 @@ void MBExchange::rtuQueryOptimization( RTUDeviceMap& m )
// check correct function... // check correct function...
if( beg->second->q_count > 1 && beg->second->mbfunc == ModbusRTU::fnWriteOutputSingleRegister ) if( beg->second->q_count > 1 && beg->second->mbfunc == ModbusRTU::fnWriteOutputSingleRegister )
{ {
dwarn << myname << "(rtuQueryOptimization): " mbwarn << myname << "(rtuQueryOptimization): "
<< " optimization change func=" << ModbusRTU::fnWriteOutputSingleRegister << " optimization change func=" << ModbusRTU::fnWriteOutputSingleRegister
<< " <--> func=" << ModbusRTU::fnWriteOutputRegisters << " <--> func=" << ModbusRTU::fnWriteOutputRegisters
<< " for mbaddr=" << ModbusRTU::addr2str(d->mbaddr) << " for mbaddr=" << ModbusRTU::addr2str(d->mbaddr)
<< " mbreg=" << ModbusRTU::dat2str(beg->second->mbreg); << " mbreg=" << ModbusRTU::dat2str(beg->second->mbreg);
beg->second->mbfunc = ModbusRTU::fnWriteOutputRegisters; beg->second->mbfunc = ModbusRTU::fnWriteOutputRegisters;
} }
else if( beg->second->q_count > 1 && beg->second->mbfunc == ModbusRTU::fnForceSingleCoil ) else if( beg->second->q_count > 1 && beg->second->mbfunc == ModbusRTU::fnForceSingleCoil )
{ {
dwarn << myname << "(rtuQueryOptimization): " mbwarn << myname << "(rtuQueryOptimization): "
<< " optimization change func=" << ModbusRTU::fnForceSingleCoil << " optimization change func=" << ModbusRTU::fnForceSingleCoil
<< " <--> func=" << ModbusRTU::fnForceMultipleCoils << " <--> func=" << ModbusRTU::fnForceMultipleCoils
<< " for mbaddr=" << ModbusRTU::addr2str(d->mbaddr) << " for mbaddr=" << ModbusRTU::addr2str(d->mbaddr)
<< " mbreg=" << ModbusRTU::dat2str(beg->second->mbreg); << " mbreg=" << ModbusRTU::dat2str(beg->second->mbreg);
beg->second->mbfunc = ModbusRTU::fnForceMultipleCoils; beg->second->mbfunc = ModbusRTU::fnForceMultipleCoils;
} }
...@@ -624,9 +646,9 @@ void MBExchange::firstInitRegisters() ...@@ -624,9 +646,9 @@ void MBExchange::firstInitRegisters()
catch( ModbusRTU::mbException& ex ) catch( ModbusRTU::mbException& ex )
{ {
allInitOK = false; allInitOK = false;
dlog3 << myname << "(preInitRead): FAILED ask addr=" << ModbusRTU::addr2str(it->dev->mbaddr) mblog3 << myname << "(preInitRead): FAILED ask addr=" << ModbusRTU::addr2str(it->dev->mbaddr)
<< " reg=" << ModbusRTU::dat2str(it->mbreg) << " reg=" << ModbusRTU::dat2str(it->mbreg)
<< " err: " << ex << endl; << " err: " << ex << endl;
if( !it->dev->ask_every_reg ) if( !it->dev->ask_every_reg )
break; break;
...@@ -642,21 +664,21 @@ bool MBExchange::preInitRead( InitList::iterator& p ) ...@@ -642,21 +664,21 @@ bool MBExchange::preInitRead( InitList::iterator& p )
RTUDevice* dev = p->dev; RTUDevice* dev = p->dev;
int q_count = p->p.rnum; int q_count = p->p.rnum;
if( dlog()->is_level3() ) if( mblog->is_level3() )
{ {
dlog3 << myname << "(preInitRead): poll " mblog3 << myname << "(preInitRead): poll "
<< " mbaddr=" << ModbusRTU::addr2str(dev->mbaddr) << " mbaddr=" << ModbusRTU::addr2str(dev->mbaddr)
<< " mbreg=" << ModbusRTU::dat2str(p->mbreg) << " mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " mbfunc=" << p->mbfunc << " mbfunc=" << p->mbfunc
<< " q_count=" << q_count << " q_count=" << q_count
<< endl; << endl;
if( q_count > ModbusRTU::MAXDATALEN ) if( q_count > ModbusRTU::MAXDATALEN )
{ {
dlog3 << myname << "(preInitRead): count(" << q_count mblog3 << myname << "(preInitRead): count(" << q_count
<< ") > MAXDATALEN(" << ModbusRTU::MAXDATALEN << ") > MAXDATALEN(" << ModbusRTU::MAXDATALEN
<< " ..ignore..." << " ..ignore..."
<< endl; << endl;
} }
} }
...@@ -763,8 +785,8 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty ...@@ -763,8 +785,8 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty
return true; return true;
} }
dcrit << myname << "(initSMValue): IGNORE item: rnum=" << p->rnum mbcrit << myname << "(initSMValue): IGNORE item: rnum=" << p->rnum
<< " > 1 ?!! for id=" << p->si.id << endl; << " > 1 ?!! for id=" << p->si.id << endl;
return false; return false;
} }
...@@ -796,8 +818,8 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty ...@@ -796,8 +818,8 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty
{ {
if( p->nbyte <= 0 || p->nbyte > VTypes::Byte::bsize ) if( p->nbyte <= 0 || p->nbyte > VTypes::Byte::bsize )
{ {
dcrit << myname << "(initSMValue): IGNORE item: sid=" << ModbusRTU::dat2str(p->si.id) mbcrit << myname << "(initSMValue): IGNORE item: sid=" << ModbusRTU::dat2str(p->si.id)
<< " vtype=" << p->vType << " but nbyte=" << p->nbyte << endl; << " vtype=" << p->vType << " but nbyte=" << p->nbyte << endl;
return false; return false;
} }
...@@ -845,28 +867,28 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty ...@@ -845,28 +867,28 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty
} }
catch(IOController_i::NameNotFound& ex) catch(IOController_i::NameNotFound& ex)
{ {
dlog3 << myname << "(initSMValue):(NameNotFound) " << ex.err << endl; mblog3 << myname << "(initSMValue):(NameNotFound) " << ex.err << endl;
} }
catch(IOController_i::IOBadParam& ex ) catch(IOController_i::IOBadParam& ex )
{ {
dlog3 << myname << "(initSMValue):(IOBadParam) " << ex.err << endl; mblog3 << myname << "(initSMValue):(IOBadParam) " << ex.err << endl;
} }
catch(IONotifyController_i::BadRange ) catch(IONotifyController_i::BadRange )
{ {
dlog3 << myname << "(initSMValue): (BadRange)..." << endl; mblog3 << myname << "(initSMValue): (BadRange)..." << endl;
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
dlog3 << myname << "(initSMValue): " << ex << endl; mblog3 << myname << "(initSMValue): " << ex << endl;
} }
catch( const CORBA::SystemException& ex) catch( const CORBA::SystemException& ex)
{ {
dlog3 << myname << "(initSMValue): CORBA::SystemException: " mblog3 << myname << "(initSMValue): CORBA::SystemException: "
<< ex.NP_minorString() << endl; << ex.NP_minorString() << endl;
} }
catch(...) catch(...)
{ {
dlog3 << myname << "(initSMValue): catch ..." << endl; mblog3 << myname << "(initSMValue): catch ..." << endl;
} }
return false; return false;
...@@ -878,30 +900,30 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -878,30 +900,30 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
if( dev->mode == emSkipExchange ) if( dev->mode == emSkipExchange )
{ {
dlog3 << myname << "(pollRTU): SKIP EXCHANGE (mode=emSkipExchange) " mblog3 << myname << "(pollRTU): SKIP EXCHANGE (mode=emSkipExchange) "
<< " mbaddr=" << ModbusRTU::addr2str(dev->mbaddr) << " mbaddr=" << ModbusRTU::addr2str(dev->mbaddr)
<< endl; << endl;
return false; return false;
} }
if( dlog()->is_level3() ) if( mblog->is_level3() )
{ {
dlog3 << myname << "(pollRTU): poll " mblog3 << myname << "(pollRTU): poll "
<< " mbaddr=" << ModbusRTU::addr2str(dev->mbaddr) << " mbaddr=" << ModbusRTU::addr2str(dev->mbaddr)
<< " mbreg=" << ModbusRTU::dat2str(p->mbreg) << " mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " mbfunc=" << p->mbfunc << " mbfunc=" << p->mbfunc
<< " q_count=" << p->q_count << " q_count=" << p->q_count
<< " mb_initOK=" << p->mb_initOK << " mb_initOK=" << p->mb_initOK
<< " sm_initOK=" << p->sm_initOK << " sm_initOK=" << p->sm_initOK
<< " mbval=" << p->mbval << " mbval=" << p->mbval
<< endl; << endl;
if( p->q_count > ModbusRTU::MAXDATALEN ) if( p->q_count > ModbusRTU::MAXDATALEN )
{ {
dlog3 << myname << "(pollRTU): count(" << p->q_count mblog3 << myname << "(pollRTU): count(" << p->q_count
<< ") > MAXDATALEN(" << ModbusRTU::MAXDATALEN << ") > MAXDATALEN(" << ModbusRTU::MAXDATALEN
<< " ..ignore..." << " ..ignore..."
<< endl; << endl;
} }
} }
...@@ -910,8 +932,8 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -910,8 +932,8 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
if( p->q_count == 0 ) if( p->q_count == 0 )
{ {
dinfo << myname << "(pollRTU): q_count=0 for mbreg=" << ModbusRTU::dat2str(p->mbreg) mbinfo << myname << "(pollRTU): q_count=0 for mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " IGNORE register..." << endl; << " IGNORE register..." << endl;
return false; return false;
} }
...@@ -989,16 +1011,16 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -989,16 +1011,16 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
{ {
if( p->q_count != 1 ) if( p->q_count != 1 )
{ {
dcrit << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg) mbcrit << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " IGNORE WRITE SINGLE REGISTER (0x06) q_count=" << p->q_count << " ..." << endl; << " IGNORE WRITE SINGLE REGISTER (0x06) q_count=" << p->q_count << " ..." << endl;
return false; return false;
} }
if( !p->sm_initOK ) if( !p->sm_initOK )
{ {
dlog3 << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg) mblog3 << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " slist=" << (*p) << " slist=" << (*p)
<< " IGNORE...(sm_initOK=false)" << endl; << " IGNORE...(sm_initOK=false)" << endl;
return true; return true;
} }
...@@ -1020,8 +1042,8 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -1020,8 +1042,8 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
if( p->q_num > 1 ) if( p->q_num > 1 )
return true; return true;
dlog3 << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg) mblog3 << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " IGNORE...(sm_initOK=false)" << endl; << " IGNORE...(sm_initOK=false)" << endl;
return true; return true;
} }
...@@ -1039,15 +1061,15 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -1039,15 +1061,15 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
{ {
if( p->q_count != 1 ) if( p->q_count != 1 )
{ {
dcrit << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg) mbcrit << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " IGNORE FORCE SINGLE COIL (0x05) q_count=" << p->q_count << " ..." << endl; << " IGNORE FORCE SINGLE COIL (0x05) q_count=" << p->q_count << " ..." << endl;
return false; return false;
} }
if( !p->sm_initOK ) if( !p->sm_initOK )
{ {
dlog3 << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg) mblog3 << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " IGNORE...(sm_initOK=false)" << endl; << " IGNORE...(sm_initOK=false)" << endl;
return true; return true;
} }
...@@ -1059,8 +1081,8 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -1059,8 +1081,8 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
{ {
if( !p->sm_initOK ) if( !p->sm_initOK )
{ {
dlog3 << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg) mblog3 << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " IGNORE...(sm_initOK=false)" << endl; << " IGNORE...(sm_initOK=false)" << endl;
return true; return true;
} }
...@@ -1076,8 +1098,8 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -1076,8 +1098,8 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
default: default:
{ {
dwarn << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg) mbwarn << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " IGNORE mfunc=" << (int)p->mbfunc << " ..." << endl; << " IGNORE mfunc=" << (int)p->mbfunc << " ..." << endl;
return false; return false;
} }
break; break;
...@@ -1101,28 +1123,28 @@ void MBExchange::updateSM() ...@@ -1101,28 +1123,28 @@ void MBExchange::updateSM()
} }
catch(IOController_i::NameNotFound& ex) catch(IOController_i::NameNotFound& ex)
{ {
dlog3 << myname << "(updateSM):(NameNotFound) " << ex.err << endl; mblog3 << myname << "(updateSM):(NameNotFound) " << ex.err << endl;
} }
catch(IOController_i::IOBadParam& ex ) catch(IOController_i::IOBadParam& ex )
{ {
dlog3 << myname << "(updateSM):(IOBadParam) " << ex.err << endl; mblog3 << myname << "(updateSM):(IOBadParam) " << ex.err << endl;
} }
catch(IONotifyController_i::BadRange ) catch(IONotifyController_i::BadRange )
{ {
dlog3 << myname << "(updateSM): (BadRange)..." << endl; mblog3 << myname << "(updateSM): (BadRange)..." << endl;
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
dlog3 << myname << "(updateSM): " << ex << endl; mblog3 << myname << "(updateSM): " << ex << endl;
} }
catch( const CORBA::SystemException& ex ) catch( const CORBA::SystemException& ex )
{ {
dlog3 << myname << "(updateSM): CORBA::SystemException: " mblog3 << myname << "(updateSM): CORBA::SystemException: "
<< ex.NP_minorString() << endl; << ex.NP_minorString() << endl;
} }
catch(...) catch(...)
{ {
dlog3 << myname << "(updateSM): check modeSensor..catch ..." << endl; mblog3 << myname << "(updateSM): check modeSensor..catch ..." << endl;
} }
} }
...@@ -1144,28 +1166,28 @@ void MBExchange::updateSM() ...@@ -1144,28 +1166,28 @@ void MBExchange::updateSM()
} }
catch(IOController_i::NameNotFound& ex) catch(IOController_i::NameNotFound& ex)
{ {
dlog3 << myname << "(updateSM):(NameNotFound) " << ex.err << endl; mblog3 << myname << "(updateSM):(NameNotFound) " << ex.err << endl;
} }
catch(IOController_i::IOBadParam& ex ) catch(IOController_i::IOBadParam& ex )
{ {
dlog3 << myname << "(updateSM):(IOBadParam) " << ex.err << endl; mblog3 << myname << "(updateSM):(IOBadParam) " << ex.err << endl;
} }
catch(IONotifyController_i::BadRange ) catch(IONotifyController_i::BadRange )
{ {
dlog3 << myname << "(updateSM): (BadRange)..." << endl; mblog3 << myname << "(updateSM): (BadRange)..." << endl;
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
dlog3 << myname << "(updateSM): " << ex << endl; mblog3 << myname << "(updateSM): " << ex << endl;
} }
catch( const CORBA::SystemException& ex ) catch( const CORBA::SystemException& ex )
{ {
dlog3 << myname << "(updateSM): CORBA::SystemException: " mblog3 << myname << "(updateSM): CORBA::SystemException: "
<< ex.NP_minorString() << endl; << ex.NP_minorString() << endl;
} }
catch( const std::exception& ex ) catch( const std::exception& ex )
{ {
dlog3 << myname << "(updateSM): catch ..." << endl; mblog3 << myname << "(updateSM): catch ..." << endl;
} }
if( it == d->regmap.end() ) if( it == d->regmap.end() )
...@@ -1201,16 +1223,16 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1201,16 +1223,16 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
if( !r->mb_initOK ) if( !r->mb_initOK )
return; return;
dlog3 << myname << "(updateP): sid=" << p->si.id mblog3 << myname << "(updateP): sid=" << p->si.id
<< " mbval=" << r->mbval << " mbval=" << r->mbval
<< " vtype=" << p->vType << " vtype=" << p->vType
<< " rnum=" << p->rnum << " rnum=" << p->rnum
<< " nbit=" << p->nbit << " nbit=" << p->nbit
<< " save=" << save << " save=" << save
<< " ioype=" << p->stype << " ioype=" << p->stype
<< " mb_initOK=" << r->mb_initOK << " mb_initOK=" << r->mb_initOK
<< " sm_initOK=" << r->sm_initOK << " sm_initOK=" << r->sm_initOK
<< endl; << endl;
try try
{ {
...@@ -1270,8 +1292,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1270,8 +1292,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
return; return;
} }
dcrit << myname << "(updateRSProperty): IGNORE item: rnum=" << p->rnum mbcrit << myname << "(updateRSProperty): IGNORE item: rnum=" << p->rnum
<< " > 1 ?!! for id=" << p->si.id << endl; << " > 1 ?!! for id=" << p->si.id << endl;
return; return;
} }
else if( p->vType == VTypes::vtSigned ) else if( p->vType == VTypes::vtSigned )
...@@ -1342,8 +1364,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1342,8 +1364,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
{ {
if( p->nbyte <= 0 || p->nbyte > VTypes::Byte::bsize ) if( p->nbyte <= 0 || p->nbyte > VTypes::Byte::bsize )
{ {
dcrit << myname << "(updateRSProperty): IGNORE item: reg=" << ModbusRTU::dat2str(r->mbreg) mbcrit << myname << "(updateRSProperty): IGNORE item: reg=" << ModbusRTU::dat2str(r->mbreg)
<< " vtype=" << p->vType << " but nbyte=" << p->nbyte << endl; << " vtype=" << p->vType << " but nbyte=" << p->nbyte << endl;
return; return;
} }
...@@ -1558,28 +1580,28 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1558,28 +1580,28 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
} }
catch(IOController_i::NameNotFound& ex) catch(IOController_i::NameNotFound& ex)
{ {
dlog3 << myname << "(updateRSProperty):(NameNotFound) " << ex.err << endl; mblog3 << myname << "(updateRSProperty):(NameNotFound) " << ex.err << endl;
} }
catch(IOController_i::IOBadParam& ex ) catch(IOController_i::IOBadParam& ex )
{ {
dlog3 << myname << "(updateRSProperty):(IOBadParam) " << ex.err << endl; mblog3 << myname << "(updateRSProperty):(IOBadParam) " << ex.err << endl;
} }
catch(IONotifyController_i::BadRange ) catch(IONotifyController_i::BadRange )
{ {
dlog3 << myname << "(updateRSProperty): (BadRange)..." << endl; mblog3 << myname << "(updateRSProperty): (BadRange)..." << endl;
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
dlog3 << myname << "(updateRSProperty): " << ex << endl; mblog3 << myname << "(updateRSProperty): " << ex << endl;
} }
catch( const CORBA::SystemException& ex ) catch( const CORBA::SystemException& ex )
{ {
dlog3 << myname << "(updateRSProperty): CORBA::SystemException: " mblog3 << myname << "(updateRSProperty): CORBA::SystemException: "
<< ex.NP_minorString() << endl; << ex.NP_minorString() << endl;
} }
catch(...) catch(...)
{ {
dlog3 << myname << "(updateRSProperty): catch ..." << endl; mblog3 << myname << "(updateRSProperty): catch ..." << endl;
} }
// Если SM стала (или была) недоступна // Если SM стала (или была) недоступна
...@@ -1664,7 +1686,7 @@ void MBExchange::updateMTR( RegMap::iterator& rit ) ...@@ -1664,7 +1686,7 @@ void MBExchange::updateMTR( RegMap::iterator& rit )
{ {
if( save ) if( save )
{ {
dwarn << myname << "(updateMTR): write (T4) reg(" << dat2str(r->mbreg) << ") to MTR NOT YET!!!" << endl; mbwarn << myname << "(updateMTR): write (T4) reg(" << dat2str(r->mbreg) << ") to MTR NOT YET!!!" << endl;
} }
else else
{ {
...@@ -1818,28 +1840,28 @@ void MBExchange::updateMTR( RegMap::iterator& rit ) ...@@ -1818,28 +1840,28 @@ void MBExchange::updateMTR( RegMap::iterator& rit )
} }
catch(IOController_i::NameNotFound& ex) catch(IOController_i::NameNotFound& ex)
{ {
dlog3 << myname << "(updateMTR):(NameNotFound) " << ex.err << endl; mblog3 << myname << "(updateMTR):(NameNotFound) " << ex.err << endl;
} }
catch(IOController_i::IOBadParam& ex ) catch(IOController_i::IOBadParam& ex )
{ {
dlog3 << myname << "(updateMTR):(IOBadParam) " << ex.err << endl; mblog3 << myname << "(updateMTR):(IOBadParam) " << ex.err << endl;
} }
catch(IONotifyController_i::BadRange ) catch(IONotifyController_i::BadRange )
{ {
dlog3 << myname << "(updateMTR): (BadRange)..." << endl; mblog3 << myname << "(updateMTR): (BadRange)..." << endl;
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
dlog3 << myname << "(updateMTR): " << ex << endl; mblog3 << myname << "(updateMTR): " << ex << endl;
} }
catch( const CORBA::SystemException& ex ) catch( const CORBA::SystemException& ex )
{ {
dlog3 << myname << "(updateMTR): CORBA::SystemException: " mblog3 << myname << "(updateMTR): CORBA::SystemException: "
<< ex.NP_minorString() << endl; << ex.NP_minorString() << endl;
} }
catch(...) catch(...)
{ {
dlog3 << myname << "(updateMTR): catch ..." << endl; mblog3 << myname << "(updateMTR): catch ..." << endl;
} }
} }
} }
...@@ -1860,35 +1882,35 @@ void MBExchange::updateRTU188( RegMap::iterator& rit ) ...@@ -1860,35 +1882,35 @@ void MBExchange::updateRTU188( RegMap::iterator& rit )
// не реализованы // не реализованы
if( isWriteFunction(r->mbfunc) ) if( isWriteFunction(r->mbfunc) )
{ {
dlog3 << myname << "(updateRTU188): write reg(" << dat2str(r->mbreg) << ") to RTU188 NOT YET!!!" << endl; mblog3 << myname << "(updateRTU188): write reg(" << dat2str(r->mbreg) << ") to RTU188 NOT YET!!!" << endl;
return; return;
} }
if( exchangeMode == emSkipExchange || r->dev->mode == emSkipExchange ) if( exchangeMode == emSkipExchange || r->dev->mode == emSkipExchange )
{ {
dlog3 << myname << "(updateRTU188):" mblog3 << myname << "(updateRTU188):"
<< " skip... mode=emSkipExchange " << endl; << " skip... mode=emSkipExchange " << endl;
return; return;
} }
if( save && (exchangeMode == emReadOnly || r->dev->mode == emReadOnly) ) if( save && (exchangeMode == emReadOnly || r->dev->mode == emReadOnly) )
{ {
dlog3 << myname << "(updateRTU188):" mblog3 << myname << "(updateRTU188):"
<< " skip... mode=emReadOnly " << endl; << " skip... mode=emReadOnly " << endl;
return; return;
} }
if( !save && ( exchangeMode == emWriteOnly || r->dev->mode == emWriteOnly) ) if( !save && ( exchangeMode == emWriteOnly || r->dev->mode == emWriteOnly) )
{ {
dlog3 << myname << "(updateRTU188):" mblog3 << myname << "(updateRTU188):"
<< " skip... mode=emWriteOnly " << endl; << " skip... mode=emWriteOnly " << endl;
return; return;
} }
if( save && ( exchangeMode == emSkipSaveToSM || r->dev->mode == emSkipSaveToSM) ) if( save && ( exchangeMode == emSkipSaveToSM || r->dev->mode == emSkipSaveToSM) )
{ {
dlog3 << myname << "(updateRT188):" mblog3 << myname << "(updateRT188):"
<< " skip... mode=emSkipSaveToSM " << endl; << " skip... mode=emSkipSaveToSM " << endl;
return; return;
} }
...@@ -1909,28 +1931,28 @@ void MBExchange::updateRTU188( RegMap::iterator& rit ) ...@@ -1909,28 +1931,28 @@ void MBExchange::updateRTU188( RegMap::iterator& rit )
} }
catch(IOController_i::NameNotFound& ex) catch(IOController_i::NameNotFound& ex)
{ {
dlog3 << myname << "(updateRTU188):(NameNotFound) " << ex.err << endl; mblog3 << myname << "(updateRTU188):(NameNotFound) " << ex.err << endl;
} }
catch(IOController_i::IOBadParam& ex ) catch(IOController_i::IOBadParam& ex )
{ {
dlog3 << myname << "(updateRTU188):(IOBadParam) " << ex.err << endl; mblog3 << myname << "(updateRTU188):(IOBadParam) " << ex.err << endl;
} }
catch(IONotifyController_i::BadRange ) catch(IONotifyController_i::BadRange )
{ {
dlog3 << myname << "(updateRTU188): (BadRange)..." << endl; mblog3 << myname << "(updateRTU188): (BadRange)..." << endl;
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
dlog3 << myname << "(updateRTU188): " << ex << endl; mblog3 << myname << "(updateRTU188): " << ex << endl;
} }
catch( const CORBA::SystemException& ex ) catch( const CORBA::SystemException& ex )
{ {
dlog3 << myname << "(updateRTU188): CORBA::SystemException: " mblog3 << myname << "(updateRTU188): CORBA::SystemException: "
<< ex.NP_minorString() << endl; << ex.NP_minorString() << endl;
} }
catch(...) catch(...)
{ {
dlog3 << myname << "(updateRTU188): catch ..." << endl; mblog3 << myname << "(updateRTU188): catch ..." << endl;
} }
} }
} }
...@@ -1951,15 +1973,15 @@ MBExchange::RTUDevice* MBExchange::addDev( RTUDeviceMap& mp, ModbusRTU::ModbusAd ...@@ -1951,15 +1973,15 @@ MBExchange::RTUDevice* MBExchange::addDev( RTUDeviceMap& mp, ModbusRTU::ModbusAd
if( it->second->dtype != dtype ) if( it->second->dtype != dtype )
{ {
dcrit << myname << "(addDev): OTHER mbtype=" << dtype << " for " << xmlit.getProp("name") mbcrit << myname << "(addDev): OTHER mbtype=" << dtype << " for " << xmlit.getProp("name")
<< ". Already used devtype=" << it->second->dtype << ". Already used devtype=" << it->second->dtype
<< " for mbaddr=" << ModbusRTU::addr2str(it->second->mbaddr) << " for mbaddr=" << ModbusRTU::addr2str(it->second->mbaddr)
<< endl; << endl;
return 0; return 0;
} }
dinfo << myname << "(addDev): device for addr=" << ModbusRTU::addr2str(a) mbinfo << myname << "(addDev): device for addr=" << ModbusRTU::addr2str(a)
<< " already added. Ignore device params for " << xmlit.getProp("name") << " ..." << endl; << " already added. Ignore device params for " << xmlit.getProp("name") << " ..." << endl;
return it->second; return it->second;
} }
...@@ -1985,22 +2007,22 @@ MBExchange::RegInfo* MBExchange::addReg( RegMap& mp, ModbusRTU::RegID id, Modbus ...@@ -1985,22 +2007,22 @@ MBExchange::RegInfo* MBExchange::addReg( RegMap& mp, ModbusRTU::RegID id, Modbus
{ {
if( !it->second->dev ) if( !it->second->dev )
{ {
dcrit << myname << "(addReg): for " << xmlit.getProp("name") mbcrit << myname << "(addReg): for " << xmlit.getProp("name")
<< " dev=0!!!! " << endl; << " dev=0!!!! " << endl;
return 0; return 0;
} }
if( it->second->dev->dtype != dev->dtype ) if( it->second->dev->dtype != dev->dtype )
{ {
dcrit << myname << "(addReg): OTHER mbtype=" << dev->dtype << " for " << xmlit.getProp("name") mbcrit << myname << "(addReg): OTHER mbtype=" << dev->dtype << " for " << xmlit.getProp("name")
<< ". Already used devtype=" << it->second->dev->dtype << " for " << it->second->dev << endl; << ". Already used devtype=" << it->second->dev->dtype << " for " << it->second->dev << endl;
return 0; return 0;
} }
dinfo << myname << "(addReg): reg=" << ModbusRTU::dat2str(r) mbinfo << myname << "(addReg): reg=" << ModbusRTU::dat2str(r)
<< "(id=" << id << ")" << "(id=" << id << ")"
<< " already added for " << (*it->second) << " already added for " << (*it->second)
<< " Ignore register params for " << xmlit.getProp("name") << " ..." << endl; << " Ignore register params for " << xmlit.getProp("name") << " ..." << endl;
it->second->rit = it; it->second->rit = it;
return it->second; return it->second;
...@@ -2039,7 +2061,7 @@ MBExchange::RSProperty* MBExchange::addProp( PList& plist, RSProperty&& p ) ...@@ -2039,7 +2061,7 @@ MBExchange::RSProperty* MBExchange::addProp( PList& plist, RSProperty&& p )
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
bool MBExchange::initRSProperty( RSProperty& p, UniXML::iterator& it ) bool MBExchange::initRSProperty( RSProperty& p, UniXML::iterator& it )
{ {
if( !IOBase::initItem(&p, it, shm, prop_prefix, false, dlog(), myname) ) if( !IOBase::initItem(&p, it, shm, prop_prefix, false, mblog, myname) )
return false; return false;
// проверяем не пороговый ли это датчик (т.е. не связанный с обменом) // проверяем не пороговый ли это датчик (т.е. не связанный с обменом)
...@@ -2060,8 +2082,8 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML::iterator& it ) ...@@ -2060,8 +2082,8 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML::iterator& it )
if( p.nbit < 0 || p.nbit >= ModbusRTU::BitsPerData ) if( p.nbit < 0 || p.nbit >= ModbusRTU::BitsPerData )
{ {
dcrit << myname << "(initRSProperty): BAD nbit=" << p.nbit mbcrit << myname << "(initRSProperty): BAD nbit=" << p.nbit
<< ". (0 >= nbit < " << ModbusRTU::BitsPerData << ")." << endl; << ". (0 >= nbit < " << ModbusRTU::BitsPerData << ")." << endl;
return false; return false;
} }
} }
...@@ -2070,8 +2092,8 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML::iterator& it ) ...@@ -2070,8 +2092,8 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML::iterator& it )
( p.stype == UniversalIO::AI || ( p.stype == UniversalIO::AI ||
p.stype == UniversalIO::AO ) ) p.stype == UniversalIO::AO ) )
{ {
dwarn << "(initRSProperty): (ignore) uncorrect param`s nbit>1 (" << p.nbit << ")" mbwarn << "(initRSProperty): (ignore) uncorrect param`s nbit>1 (" << p.nbit << ")"
<< " but iotype=" << p.stype << " for " << it.getProp("name") << endl; << " but iotype=" << p.stype << " for " << it.getProp("name") << endl;
} }
string sbyte(IOBase::initProp(it, "nbyte", prop_prefix, false) ); string sbyte(IOBase::initProp(it, "nbyte", prop_prefix, false) );
...@@ -2082,8 +2104,8 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML::iterator& it ) ...@@ -2082,8 +2104,8 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML::iterator& it )
if( p.nbyte < 0 || p.nbyte > VTypes::Byte::bsize ) if( p.nbyte < 0 || p.nbyte > VTypes::Byte::bsize )
{ {
dwarn << myname << "(initRSProperty): BAD nbyte=" << p.nbyte mbwarn << myname << "(initRSProperty): BAD nbyte=" << p.nbyte
<< ". (0 >= nbyte < " << VTypes::Byte::bsize << ")." << endl; << ". (0 >= nbyte < " << VTypes::Byte::bsize << ")." << endl;
return false; return false;
} }
} }
...@@ -2101,9 +2123,9 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML::iterator& it ) ...@@ -2101,9 +2123,9 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML::iterator& it )
if( v == VTypes::vtUnknown ) if( v == VTypes::vtUnknown )
{ {
dcrit << myname << "(initRSProperty): Unknown tcp_vtype='" << vt << "' for " mbcrit << myname << "(initRSProperty): Unknown tcp_vtype='" << vt << "' for "
<< it.getProp("name") << it.getProp("name")
<< endl; << endl;
return false; return false;
} }
...@@ -2122,7 +2144,7 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML::iterator& it, MBExchange::RTU ...@@ -2122,7 +2144,7 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML::iterator& it, MBExchange::RTU
if( dev->dtype == MBExchange::dtRTU ) if( dev->dtype == MBExchange::dtRTU )
{ {
// dlog.info() << myname << "(initRegInfo): init RTU.." // mblog.info() << myname << "(initRegInfo): init RTU.."
} }
else if( dev->dtype == MBExchange::dtMTR ) else if( dev->dtype == MBExchange::dtMTR )
{ {
...@@ -2147,8 +2169,8 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML::iterator& it, MBExchange::RTU ...@@ -2147,8 +2169,8 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML::iterator& it, MBExchange::RTU
} }
else else
{ {
dcrit << myname << "(initRegInfo): Unknown mbtype='" << dev->dtype mbcrit << myname << "(initRegInfo): Unknown mbtype='" << dev->dtype
<< "' for " << it.getProp("name") << endl; << "' for " << it.getProp("name") << endl;
return false; return false;
} }
...@@ -2165,7 +2187,7 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML::iterator& it, MBExchange::RTU ...@@ -2165,7 +2187,7 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML::iterator& it, MBExchange::RTU
if( sr.empty() ) if( sr.empty() )
{ {
dcrit << myname << "(initItem): Unknown 'mbreg' for " << it.getProp("name") << endl; mbcrit << myname << "(initItem): Unknown 'mbreg' for " << it.getProp("name") << endl;
return false; return false;
} }
...@@ -2181,8 +2203,8 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML::iterator& it, MBExchange::RTU ...@@ -2181,8 +2203,8 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML::iterator& it, MBExchange::RTU
if( r->mbfunc == ModbusRTU::fnUnknown ) if( r->mbfunc == ModbusRTU::fnUnknown )
{ {
dcrit << myname << "(initRegInfo): Unknown mbfunc ='" << f mbcrit << myname << "(initRegInfo): Unknown mbfunc ='" << f
<< "' for " << it.getProp("name") << endl; << "' for " << it.getProp("name") << endl;
return false; return false;
} }
} }
...@@ -2201,9 +2223,9 @@ bool MBExchange::initRTUDevice( RTUDevice* d, UniXML::iterator& it ) ...@@ -2201,9 +2223,9 @@ bool MBExchange::initRTUDevice( RTUDevice* d, UniXML::iterator& it )
if( d->dtype == dtUnknown ) if( d->dtype == dtUnknown )
{ {
dcrit << myname << "(initRTUDevice): Unknown tcp_mbtype='" << mbtype << "'" mbcrit << myname << "(initRTUDevice): Unknown tcp_mbtype='" << mbtype << "'"
<< ". Use: rtu " << ". Use: rtu "
<< " for " << it.getProp("name") << endl; << " for " << it.getProp("name") << endl;
return false; return false;
} }
...@@ -2214,7 +2236,7 @@ bool MBExchange::initRTUDevice( RTUDevice* d, UniXML::iterator& it ) ...@@ -2214,7 +2236,7 @@ bool MBExchange::initRTUDevice( RTUDevice* d, UniXML::iterator& it )
if( addr.empty() ) if( addr.empty() )
{ {
dcrit << myname << "(initRTUDevice): Unknown mbaddr for " << it.getProp("name") << endl; mbcrit << myname << "(initRTUDevice): Unknown mbaddr for " << it.getProp("name") << endl;
return false; return false;
} }
...@@ -2246,7 +2268,7 @@ bool MBExchange::initItem( UniXML::iterator& it ) ...@@ -2246,7 +2268,7 @@ bool MBExchange::initItem( UniXML::iterator& it )
if( addr.empty() ) if( addr.empty() )
{ {
dcrit << myname << "(initItem): Unknown mbaddr(" << IOBase::initProp(it, "mbaddr", prop_prefix, false) << ")='" << addr << "' for " << it.getProp("name") << endl; mbcrit << myname << "(initItem): Unknown mbaddr(" << IOBase::initProp(it, "mbaddr", prop_prefix, false) << ")='" << addr << "' for " << it.getProp("name") << endl;
return false; return false;
} }
...@@ -2256,7 +2278,7 @@ bool MBExchange::initItem( UniXML::iterator& it ) ...@@ -2256,7 +2278,7 @@ bool MBExchange::initItem( UniXML::iterator& it )
if( !dev ) if( !dev )
{ {
dcrit << myname << "(initItem): " << it.getProp("name") << " CAN`T ADD for polling!" << endl; mbcrit << myname << "(initItem): " << it.getProp("name") << " CAN`T ADD for polling!" << endl;
return false; return false;
} }
...@@ -2269,7 +2291,7 @@ bool MBExchange::initItem( UniXML::iterator& it ) ...@@ -2269,7 +2291,7 @@ bool MBExchange::initItem( UniXML::iterator& it )
if( !initRTU188item(it, &r_tmp) ) if( !initRTU188item(it, &r_tmp) )
{ {
dcrit << myname << "(initItem): init RTU188 failed for " << it.getProp("name") << endl; mbcrit << myname << "(initItem): init RTU188 failed for " << it.getProp("name") << endl;
return false; return false;
} }
...@@ -2286,7 +2308,7 @@ bool MBExchange::initItem( UniXML::iterator& it ) ...@@ -2286,7 +2308,7 @@ bool MBExchange::initItem( UniXML::iterator& it )
if( reg.empty() ) if( reg.empty() )
{ {
dcrit << myname << "(initItem): unknown mbreg(" << prop_prefix << ") for " << it.getProp("name") << endl; mbcrit << myname << "(initItem): unknown mbreg(" << prop_prefix << ") for " << it.getProp("name") << endl;
return false; return false;
} }
...@@ -2297,8 +2319,8 @@ bool MBExchange::initItem( UniXML::iterator& it ) ...@@ -2297,8 +2319,8 @@ bool MBExchange::initItem( UniXML::iterator& it )
{ {
if( fn == ModbusRTU::fnReadCoilStatus || fn == ModbusRTU::fnReadInputStatus ) if( fn == ModbusRTU::fnReadCoilStatus || fn == ModbusRTU::fnReadInputStatus )
{ {
dcrit << myname << "(initItem): MISMATCHED CONFIGURATION! nbit=" << p.nbit << " func=" << fn mbcrit << myname << "(initItem): MISMATCHED CONFIGURATION! nbit=" << p.nbit << " func=" << fn
<< " for " << it.getProp("name") << endl; << " for " << it.getProp("name") << endl;
return false; return false;
} }
} }
...@@ -2318,7 +2340,7 @@ bool MBExchange::initItem( UniXML::iterator& it ) ...@@ -2318,7 +2340,7 @@ bool MBExchange::initItem( UniXML::iterator& it )
if( p.rnum <= 0 ) if( p.rnum <= 0 )
{ {
dcrit << myname << "(initItem): unknown word size for " << it.getProp("name") << endl; mbcrit << myname << "(initItem): unknown word size for " << it.getProp("name") << endl;
return false; return false;
} }
} }
...@@ -2351,9 +2373,9 @@ bool MBExchange::initItem( UniXML::iterator& it ) ...@@ -2351,9 +2373,9 @@ bool MBExchange::initItem( UniXML::iterator& it )
sl << "]"; sl << "]";
dcrit << myname << "(initItem): FAILED! Sharing SAVE (not bit saving) to " mbcrit << myname << "(initItem): FAILED! Sharing SAVE (not bit saving) to "
<< " tcp_mbreg=" << ModbusRTU::dat2str(ri->mbreg) << "(" << (int)ri->mbreg << ")" << " tcp_mbreg=" << ModbusRTU::dat2str(ri->mbreg) << "(" << (int)ri->mbreg << ")"
<< " conflict with sensors " << sl.str() << endl; << " conflict with sensors " << sl.str() << endl;
abort(); // ABORT PROGRAM!!!! abort(); // ABORT PROGRAM!!!!
return false; return false;
...@@ -2365,9 +2387,9 @@ bool MBExchange::initItem( UniXML::iterator& it ) ...@@ -2365,9 +2387,9 @@ bool MBExchange::initItem( UniXML::iterator& it )
if( it2->nbit < 0 ) if( it2->nbit < 0 )
{ {
dcrit << myname << "(initItem): FAILED! Sharing SAVE (mbreg=" mbcrit << myname << "(initItem): FAILED! Sharing SAVE (mbreg="
<< ModbusRTU::dat2str(ri->mbreg) << "(" << (int)ri->mbreg << ") already used)!" << ModbusRTU::dat2str(ri->mbreg) << "(" << (int)ri->mbreg << ") already used)!"
<< " IGNORE --> " << it.getProp("name") << endl; << " IGNORE --> " << it.getProp("name") << endl;
abort(); // ABORT PROGRAM!!!! abort(); // ABORT PROGRAM!!!!
return false; return false;
} }
...@@ -2415,10 +2437,10 @@ bool MBExchange::initItem( UniXML::iterator& it ) ...@@ -2415,10 +2437,10 @@ bool MBExchange::initItem( UniXML::iterator& it )
if( ri->mbfunc != ModbusRTU::fnWriteOutputRegisters && if( ri->mbfunc != ModbusRTU::fnWriteOutputRegisters &&
ri->mbfunc != ModbusRTU::fnForceMultipleCoils ) ri->mbfunc != ModbusRTU::fnForceMultipleCoils )
{ {
dcrit << myname << "(initItem): Bad write function ='" << ModbusRTU::fnWriteOutputSingleRegister mbcrit << myname << "(initItem): Bad write function ='" << ModbusRTU::fnWriteOutputSingleRegister
<< "' for vtype='" << p1->vType << "'" << "' for vtype='" << p1->vType << "'"
<< " tcp_mbreg=" << ModbusRTU::dat2str(ri->mbreg) << " tcp_mbreg=" << ModbusRTU::dat2str(ri->mbreg)
<< " for " << it.getProp("name") << endl; << " for " << it.getProp("name") << endl;
abort(); // ABORT PROGRAM!!!! abort(); // ABORT PROGRAM!!!!
return false; return false;
...@@ -2452,8 +2474,8 @@ bool MBExchange::initItem( UniXML::iterator& it ) ...@@ -2452,8 +2474,8 @@ bool MBExchange::initItem( UniXML::iterator& it )
if( ii.mbfunc == ModbusRTU::fnUnknown ) if( ii.mbfunc == ModbusRTU::fnUnknown )
{ {
dcrit << myname << "(initItem): Unknown tcp_init_mbfunc ='" << s_mbfunc mbcrit << myname << "(initItem): Unknown tcp_init_mbfunc ='" << s_mbfunc
<< "' for " << it.getProp("name") << endl; << "' for " << it.getProp("name") << endl;
return false; return false;
} }
} }
...@@ -2497,9 +2519,9 @@ bool MBExchange::initMTRitem( UniXML::iterator& it, RegInfo* p ) ...@@ -2497,9 +2519,9 @@ bool MBExchange::initMTRitem( UniXML::iterator& it, RegInfo* p )
if( p->mtrType == MTR::mtUnknown ) if( p->mtrType == MTR::mtUnknown )
{ {
dcrit << myname << "(readMTRItem): Unknown mtrtype '" mbcrit << myname << "(readMTRItem): Unknown mtrtype '"
<< it.getProp(prop_prefix + "mtrtype") << it.getProp(prop_prefix + "mtrtype")
<< "' for " << it.getProp("name") << endl; << "' for " << it.getProp("name") << endl;
return false; return false;
} }
...@@ -2514,8 +2536,8 @@ bool MBExchange::initRTU188item( UniXML::iterator& it, RegInfo* p ) ...@@ -2514,8 +2536,8 @@ bool MBExchange::initRTU188item( UniXML::iterator& it, RegInfo* p )
if( jack.empty() ) if( jack.empty() )
{ {
dcrit << myname << "(readRTU188Item): Unknown " << prop_prefix << "jack='' " mbcrit << myname << "(readRTU188Item): Unknown " << prop_prefix << "jack='' "
<< " for " << it.getProp("name") << endl; << " for " << it.getProp("name") << endl;
return false; return false;
} }
...@@ -2523,22 +2545,22 @@ bool MBExchange::initRTU188item( UniXML::iterator& it, RegInfo* p ) ...@@ -2523,22 +2545,22 @@ bool MBExchange::initRTU188item( UniXML::iterator& it, RegInfo* p )
if( p->rtuJack == RTUStorage::nUnknown ) if( p->rtuJack == RTUStorage::nUnknown )
{ {
dcrit << myname << "(readRTU188Item): Unknown " << prop_prefix << "jack=" << jack mbcrit << myname << "(readRTU188Item): Unknown " << prop_prefix << "jack=" << jack
<< " for " << it.getProp("name") << endl; << " for " << it.getProp("name") << endl;
return false; return false;
} }
if( chan.empty() ) if( chan.empty() )
{ {
dcrit << myname << "(readRTU188Item): Unknown channel='' " mbcrit << myname << "(readRTU188Item): Unknown channel='' "
<< " for " << it.getProp("name") << endl; << " for " << it.getProp("name") << endl;
return false; return false;
} }
p->rtuChan = UniSetTypes::uni_atoi(chan); p->rtuChan = UniSetTypes::uni_atoi(chan);
dlog2 << myname << "(readRTU188Item): add jack='" << jack << "'" mblog2 << myname << "(readRTU188Item): add jack='" << jack << "'"
<< " channel='" << p->rtuChan << "'" << endl; << " channel='" << p->rtuChan << "'" << endl;
return true; return true;
} }
...@@ -2609,10 +2631,10 @@ void MBExchange::initDeviceList() ...@@ -2609,10 +2631,10 @@ void MBExchange::initDeviceList()
} }
} }
else else
dwarn << myname << "(init): <DeviceList> empty section..." << endl; mbwarn << myname << "(init): <DeviceList> empty section..." << endl;
} }
else else
dwarn << myname << "(init): <DeviceList> not found..." << endl; mbwarn << myname << "(init): <DeviceList> not found..." << endl;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXML::iterator& it ) bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXML::iterator& it )
...@@ -2621,14 +2643,14 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM ...@@ -2621,14 +2643,14 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM
if( d == m.end() ) if( d == m.end() )
{ {
dwarn << myname << "(initDeviceInfo): not found device for addr=" << ModbusRTU::addr2str(a) << endl; mbwarn << myname << "(initDeviceInfo): not found device for addr=" << ModbusRTU::addr2str(a) << endl;
return false; return false;
} }
d->second->ask_every_reg = it.getIntProp("ask_every_reg"); d->second->ask_every_reg = it.getIntProp("ask_every_reg");
dinfo << myname << "(initDeviceInfo): add addr=" << ModbusRTU::addr2str(a) mbinfo << myname << "(initDeviceInfo): add addr=" << ModbusRTU::addr2str(a)
<< " ask_every_reg=" << d->second->ask_every_reg << endl; << " ask_every_reg=" << d->second->ask_every_reg << endl;
string s(it.getProp("respondSensor")); string s(it.getProp("respondSensor"));
...@@ -2638,7 +2660,7 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM ...@@ -2638,7 +2660,7 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM
if( d->second->resp_id == DefaultObjectId ) if( d->second->resp_id == DefaultObjectId )
{ {
dinfo << myname << "(initDeviceInfo): not found ID for respondSensor=" << s << endl; mbinfo << myname << "(initDeviceInfo): not found ID for respondSensor=" << s << endl;
return false; return false;
} }
} }
...@@ -2653,7 +2675,7 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM ...@@ -2653,7 +2675,7 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM
if( d->second->mode_id == DefaultObjectId ) if( d->second->mode_id == DefaultObjectId )
{ {
dcrit << myname << "(initDeviceInfo): not found ID for modeSensor=" << mod << endl; mbcrit << myname << "(initDeviceInfo): not found ID for modeSensor=" << mod << endl;
return false; return false;
} }
...@@ -2661,12 +2683,12 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM ...@@ -2661,12 +2683,12 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM
if( m_iotype != UniversalIO::AI ) if( m_iotype != UniversalIO::AI )
{ {
dcrit << myname << "(initDeviceInfo): modeSensor='" << mod << "' must be 'AI'" << endl; mbcrit << myname << "(initDeviceInfo): modeSensor='" << mod << "' must be 'AI'" << endl;
return false; return false;
} }
} }
dinfo << myname << "(initDeviceInfo): add addr=" << ModbusRTU::addr2str(a) << endl; mbinfo << myname << "(initDeviceInfo): add addr=" << ModbusRTU::addr2str(a) << endl;
int tout = it.getPIntProp("timeout", default_timeout ); int tout = it.getPIntProp("timeout", default_timeout );
d->second->resp_Delay.set(tout, false); d->second->resp_Delay.set(tout, false);
...@@ -2704,14 +2726,20 @@ void MBExchange::sysCommand( const UniSetTypes::SystemMessage* sm ) ...@@ -2704,14 +2726,20 @@ void MBExchange::sysCommand( const UniSetTypes::SystemMessage* sm )
{ {
case SystemMessage::StartUp: case SystemMessage::StartUp:
{ {
if( !logserv_host.empty() && logserv_port != 0 && !logserv->isRunning() )
{
mbinfo << myname << "(init): run log server " << logserv_host << ":" << logserv_port << endl;
logserv->run(logserv_host, logserv_port, true);
}
if( rmap.empty() ) if( rmap.empty() )
{ {
dcrit << myname << "(sysCommand): ************* ITEM MAP EMPTY! terminated... *************" << endl; mbcrit << myname << "(sysCommand): ************* ITEM MAP EMPTY! terminated... *************" << endl;
raise(SIGTERM); raise(SIGTERM);
return; return;
} }
dinfo << myname << "(sysCommand): device map size= " << rmap.size() << endl; mbinfo << myname << "(sysCommand): device map size= " << rmap.size() << endl;
if( !shm->isLocalwork() ) if( !shm->isLocalwork() )
initDeviceList(); initDeviceList();
...@@ -2733,7 +2761,7 @@ void MBExchange::sysCommand( const UniSetTypes::SystemMessage* sm ) ...@@ -2733,7 +2761,7 @@ void MBExchange::sysCommand( const UniSetTypes::SystemMessage* sm )
} }
if( !checkProcActive() ) if( !checkProcActive() )
dcrit << myname << "(sysCommand): ************* don`t activate?! ************" << endl; mbcrit << myname << "(sysCommand): ************* don`t activate?! ************" << endl;
{ {
UniSetTypes::uniset_rwmutex_rlock l(mutex_start); UniSetTypes::uniset_rwmutex_rlock l(mutex_start);
...@@ -2777,23 +2805,13 @@ void MBExchange::sysCommand( const UniSetTypes::SystemMessage* sm ) ...@@ -2777,23 +2805,13 @@ void MBExchange::sysCommand( const UniSetTypes::SystemMessage* sm )
case SystemMessage::LogRotate: case SystemMessage::LogRotate:
{ {
// переоткрываем логи mblogany << myname << "(sysCommand): logRotate" << std::endl;
ulogany << myname << "(sysCommand): logRotate" << std::endl; string fname = mblog->getLogFile();
string fname(ulog()->getLogFile());
if( !fname.empty() )
{
ulog()->logFile(fname, true);
ulogany << myname << "(sysCommand): ***************** ulog LOG ROTATE *****************" << std::endl;
}
dlogany << myname << "(sysCommand): logRotate" << std::endl;
fname = dlog()->getLogFile();
if( !fname.empty() ) if( !fname.empty() )
{ {
dlog()->logFile(fname, true); mblog->logFile(fname, true);
dlogany << myname << "(sysCommand): ***************** dlog LOG ROTATE *****************" << std::endl; mblogany << myname << "(sysCommand): ***************** mblog LOG ROTATE *****************" << std::endl;
} }
} }
break; break;
...@@ -2816,7 +2834,7 @@ void MBExchange::askSensors( UniversalIO::UIOCommand cmd ) ...@@ -2816,7 +2834,7 @@ void MBExchange::askSensors( UniversalIO::UIOCommand cmd )
<< "(askSensors): Не дождались готовности(work) SharedMemory к работе в течение " << "(askSensors): Не дождались готовности(work) SharedMemory к работе в течение "
<< activateTimeout << " мсек"; << activateTimeout << " мсек";
dcrit << err.str() << endl; mbcrit << err.str() << endl;
kill(SIGTERM, getpid()); // прерываем (перезапускаем) процесс... kill(SIGTERM, getpid()); // прерываем (перезапускаем) процесс...
// throw SystemError(err.str()); // throw SystemError(err.str());
return; return;
...@@ -2829,11 +2847,11 @@ void MBExchange::askSensors( UniversalIO::UIOCommand cmd ) ...@@ -2829,11 +2847,11 @@ void MBExchange::askSensors( UniversalIO::UIOCommand cmd )
} }
catch( UniSetTypes::Exception& ex ) catch( UniSetTypes::Exception& ex )
{ {
dwarn << myname << "(askSensors): " << ex << std::endl; mbwarn << myname << "(askSensors): " << ex << std::endl;
} }
catch(...) catch(...)
{ {
dwarn << myname << "(askSensors): 'sidExchangeMode' catch..." << std::endl; mbwarn << myname << "(askSensors): 'sidExchangeMode' catch..." << std::endl;
} }
for( auto it1 = rmap.begin(); it1 != rmap.end(); ++it1 ) for( auto it1 = rmap.begin(); it1 != rmap.end(); ++it1 )
...@@ -2847,11 +2865,11 @@ void MBExchange::askSensors( UniversalIO::UIOCommand cmd ) ...@@ -2847,11 +2865,11 @@ void MBExchange::askSensors( UniversalIO::UIOCommand cmd )
} }
catch( UniSetTypes::Exception& ex ) catch( UniSetTypes::Exception& ex )
{ {
dwarn << myname << "(askSensors): " << ex << std::endl; mbwarn << myname << "(askSensors): " << ex << std::endl;
} }
catch(...) catch(...)
{ {
dwarn << myname << "(askSensors): (mode_id=" << d->mode_id << ").. catch..." << std::endl; mbwarn << myname << "(askSensors): (mode_id=" << d->mode_id << ").. catch..." << std::endl;
} }
if( force_out ) if( force_out )
...@@ -2870,11 +2888,11 @@ void MBExchange::askSensors( UniversalIO::UIOCommand cmd ) ...@@ -2870,11 +2888,11 @@ void MBExchange::askSensors( UniversalIO::UIOCommand cmd )
} }
catch( UniSetTypes::Exception& ex ) catch( UniSetTypes::Exception& ex )
{ {
dwarn << myname << "(askSensors): " << ex << std::endl; mbwarn << myname << "(askSensors): " << ex << std::endl;
} }
catch(...) catch(...)
{ {
dwarn << myname << "(askSensors): id=" << i->si.id << " catch..." << std::endl; mbwarn << myname << "(askSensors): id=" << i->si.id << " catch..." << std::endl;
} }
} }
} }
...@@ -2886,7 +2904,7 @@ void MBExchange::sensorInfo( const UniSetTypes::SensorMessage* sm ) ...@@ -2886,7 +2904,7 @@ void MBExchange::sensorInfo( const UniSetTypes::SensorMessage* sm )
if( sm->id == sidExchangeMode ) if( sm->id == sidExchangeMode )
{ {
exchangeMode = sm->value; exchangeMode = sm->value;
dlog3 << myname << "(sensorInfo): exchange MODE=" << sm->value << std::endl; mblog3 << myname << "(sensorInfo): exchange MODE=" << sm->value << std::endl;
//return; // этот датчик может встречаться и в списке обмена.. поэтому делать return нельзя. //return; // этот датчик может встречаться и в списке обмена.. поэтому делать return нельзя.
} }
...@@ -2909,10 +2927,10 @@ void MBExchange::sensorInfo( const UniSetTypes::SensorMessage* sm ) ...@@ -2909,10 +2927,10 @@ void MBExchange::sensorInfo( const UniSetTypes::SensorMessage* sm )
{ {
if( sm->id == i.si.id && sm->node == i.si.node ) if( sm->id == i.si.id && sm->node == i.si.node )
{ {
dinfo << myname << "(sensorInfo): si.id=" << sm->id mbinfo << myname << "(sensorInfo): si.id=" << sm->id
<< " reg=" << ModbusRTU::dat2str(i.reg->mbreg) << " reg=" << ModbusRTU::dat2str(i.reg->mbreg)
<< " val=" << sm->value << " val=" << sm->value
<< " mb_initOK=" << i.reg->mb_initOK << endl; << " mb_initOK=" << i.reg->mb_initOK << endl;
if( !i.reg->mb_initOK ) if( !i.reg->mb_initOK )
continue; continue;
...@@ -2966,8 +2984,8 @@ bool MBExchange::poll() ...@@ -2966,8 +2984,8 @@ bool MBExchange::poll()
if( d->mode_id != DefaultObjectId && d->mode == emSkipExchange ) if( d->mode_id != DefaultObjectId && d->mode == emSkipExchange )
continue; continue;
dlog3 << myname << "(poll): ask addr=" << ModbusRTU::addr2str(d->mbaddr) mblog3 << myname << "(poll): ask addr=" << ModbusRTU::addr2str(d->mbaddr)
<< " regs=" << d->regmap.size() << endl; << " regs=" << d->regmap.size() << endl;
d->prev_numreply.store(d->numreply); d->prev_numreply.store(d->numreply);
...@@ -2992,10 +3010,10 @@ bool MBExchange::poll() ...@@ -2992,10 +3010,10 @@ bool MBExchange::poll()
} }
catch( ModbusRTU::mbException& ex ) catch( ModbusRTU::mbException& ex )
{ {
dlog3 << myname << "(poll): FAILED ask addr=" << ModbusRTU::addr2str(d->mbaddr) mblog3 << myname << "(poll): FAILED ask addr=" << ModbusRTU::addr2str(d->mbaddr)
<< " reg=" << ModbusRTU::dat2str(it->second->mbreg) << " reg=" << ModbusRTU::dat2str(it->second->mbreg)
<< " for sensors: "; << " for sensors: ";
print_plist(dlog()->level3(), it->second->slst) print_plist(mblog->level3(), it->second->slst)
<< endl << " err: " << ex << endl; << endl << " err: " << ex << endl;
if( ex.err == ModbusRTU::erTimeOut && !d->ask_every_reg ) if( ex.err == ModbusRTU::erTimeOut && !d->ask_every_reg )
...@@ -3015,7 +3033,7 @@ bool MBExchange::poll() ...@@ -3015,7 +3033,7 @@ bool MBExchange::poll()
if( stat_time > 0 && ptStatistic.checkTime() ) if( stat_time > 0 && ptStatistic.checkTime() )
{ {
dlog9 << endl << "(poll statistic): number of calls is " << poll_count << " (poll time: " << stat_time << " sec)" << endl << endl; mblog9 << endl << "(poll statistic): number of calls is " << poll_count << " (poll time: " << stat_time << " sec)" << endl << endl;
ptStatistic.reset(); ptStatistic.reset();
poll_count = 0; poll_count = 0;
} }
...@@ -3040,7 +3058,7 @@ bool MBExchange::poll() ...@@ -3040,7 +3058,7 @@ bool MBExchange::poll()
if( allNotRespond && exchangeMode != emSkipExchange && ptReopen.checkTime() ) if( allNotRespond && exchangeMode != emSkipExchange && ptReopen.checkTime() )
{ {
dwarn << myname << ": REOPEN timeout..(" << ptReopen.getInterval() << ")" << endl; mbwarn << myname << ": REOPEN timeout..(" << ptReopen.getInterval() << ")" << endl;
mb = initMB(true); mb = initMB(true);
ptReopen.reset(); ptReopen.reset();
...@@ -3051,20 +3069,20 @@ bool MBExchange::poll() ...@@ -3051,20 +3069,20 @@ bool MBExchange::poll()
return !allNotRespond; return !allNotRespond;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
bool MBExchange::RTUDevice::checkRespond() bool MBExchange::RTUDevice::checkRespond( std::shared_ptr<DebugStream>& mblog )
{ {
bool prev = resp_state; bool prev = resp_state;
resp_state = !resp_Delay.check( prev_numreply == numreply ) && numreply != 0; resp_state = !resp_Delay.check( prev_numreply == numreply ) && numreply != 0;
dlog4 << "(checkRespond): addr=" << ModbusRTU::addr2str(mbaddr) mblog4 << "(checkRespond): addr=" << ModbusRTU::addr2str(mbaddr)
<< " respond_id=" << resp_id << " respond_id=" << resp_id
<< " state=" << resp_state << " state=" << resp_state
<< " current=" << resp_Delay.getCurrent() << " current=" << resp_Delay.getCurrent()
<< " [ timeout=" << resp_Delay.getOnDelay() << " [ timeout=" << resp_Delay.getOnDelay()
<< " numreply=" << numreply << " numreply=" << numreply
<< " prev_numreply=" << prev_numreply << " prev_numreply=" << prev_numreply
<< " ]" << " ]"
<< endl; << endl;
return (prev != resp_state); return (prev != resp_state);
} }
...@@ -3075,22 +3093,22 @@ void MBExchange::updateRespondSensors() ...@@ -3075,22 +3093,22 @@ void MBExchange::updateRespondSensors()
{ {
RTUDevice* d(it1.second); RTUDevice* d(it1.second);
if( d->resp_id != DefaultObjectId && (d->checkRespond() || d->resp_ptInit.checkTime()) ) if( d->resp_id != DefaultObjectId && (d->checkRespond(mblog) || d->resp_ptInit.checkTime()) )
{ {
try try
{ {
bool set = d->resp_invert ? !d->resp_state : d->resp_state; bool set = d->resp_invert ? !d->resp_state : d->resp_state;
dlog4 << myname << ": SAVE NEW respond state=" << set mblog4 << myname << ": SAVE NEW respond state=" << set
<< " for addr=" << ModbusRTU::addr2str(d->mbaddr) << " for addr=" << ModbusRTU::addr2str(d->mbaddr)
<< " respond_id=" << d->resp_id << " respond_id=" << d->resp_id
<< " state=" << d->resp_state << " state=" << d->resp_state
<< " [ invert=" << d->resp_invert << " [ invert=" << d->resp_invert
<< " timeout=" << d->resp_Delay.getOnDelay() << " timeout=" << d->resp_Delay.getOnDelay()
<< " numreply=" << d->numreply << " numreply=" << d->numreply
<< " prev_numreply=" << d->prev_numreply << " prev_numreply=" << d->prev_numreply
<< " ]" << " ]"
<< endl; << endl;
shm->localSetValue(d->resp_it, d->resp_id, ( set ? 1 : 0 ), getId()); shm->localSetValue(d->resp_it, d->resp_id, ( set ? 1 : 0 ), getId());
...@@ -3100,7 +3118,7 @@ void MBExchange::updateRespondSensors() ...@@ -3100,7 +3118,7 @@ void MBExchange::updateRespondSensors()
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
dcrit << myname << "(step): (respond) " << ex << std::endl; mbcrit << myname << "(step): (respond) " << ex << std::endl;
} }
} }
} }
...@@ -3128,11 +3146,11 @@ void MBExchange::execute() ...@@ -3128,11 +3146,11 @@ void MBExchange::execute()
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
dcrit << myname << "(execute): " << ex << std::endl; mbcrit << myname << "(execute): " << ex << std::endl;
} }
catch( const std::exception& ex ) catch( const std::exception& ex )
{ {
dcrit << myname << "(execute): catch: " << ex.what() << endl; mbcrit << myname << "(execute): catch: " << ex.what() << endl;
} }
msleep(polltime); msleep(polltime);
......
...@@ -21,6 +21,9 @@ ...@@ -21,6 +21,9 @@
#include "MTR.h" #include "MTR.h"
#include "RTUStorage.h" #include "RTUStorage.h"
#include "modbus/ModbusClient.h" #include "modbus/ModbusClient.h"
#include "modbus/MBLogSugar.h"
#include "LogAgregator.h"
#include "LogServer.h"
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
/*! /*!
\par Базовый класс для реализация обмена по протоколу Modbus [RTU|TCP]. \par Базовый класс для реализация обмена по протоколу Modbus [RTU|TCP].
...@@ -192,7 +195,7 @@ class MBExchange: ...@@ -192,7 +195,7 @@ class MBExchange:
long mode; // режим работы с устройством (см. ExchangeMode) long mode; // режим работы с устройством (см. ExchangeMode)
// return TRUE if state changed // return TRUE if state changed
bool checkRespond(); bool checkRespond( std::shared_ptr<DebugStream>& log );
// специфические поля для RS // специфические поля для RS
ComPort::Speed speed; ComPort::Speed speed;
...@@ -349,6 +352,11 @@ class MBExchange: ...@@ -349,6 +352,11 @@ class MBExchange:
std::string defaultMBaddr; std::string defaultMBaddr;
bool defaultMBinitOK; // флаг определяющий нужно ли ждать "первого обмена" или при запуске сохранять в SM значение default. bool defaultMBinitOK; // флаг определяющий нужно ли ждать "первого обмена" или при запуске сохранять в SM значение default.
std::shared_ptr<DebugStream> mblog;
std::shared_ptr<LogServer> logserv;
std::string logserv_host = {""};
int logserv_port = {0};
private: private:
MBExchange(); MBExchange();
......
...@@ -22,7 +22,7 @@ MBTCPMaster::MBTCPMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shm ...@@ -22,7 +22,7 @@ MBTCPMaster::MBTCPMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shm
// префикс для "свойств" - по умолчанию "tcp_"; // префикс для "свойств" - по умолчанию "tcp_";
prop_prefix = initPropPrefix("tcp_"); prop_prefix = initPropPrefix("tcp_");
dinfo << myname << "(init): prop_prefix=" << prop_prefix << endl; mbinfo << myname << "(init): prop_prefix=" << prop_prefix << endl;
UniXML::iterator it(cnode); UniXML::iterator it(cnode);
...@@ -39,10 +39,10 @@ MBTCPMaster::MBTCPMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shm ...@@ -39,10 +39,10 @@ MBTCPMaster::MBTCPMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shm
if( port <= 0 ) if( port <= 0 )
throw UniSetTypes::SystemError(myname + "(MBMaster): Unknown inet port...(Use: " + tmp + ")" ); throw UniSetTypes::SystemError(myname + "(MBMaster): Unknown inet port...(Use: " + tmp + ")" );
dinfo << myname << "(init): gateway " << iaddr << ":" << port << endl; mbinfo << myname << "(init): gateway " << iaddr << ":" << port << endl;
force_disconnect = conf->getArgInt("--" + prefix + "-persistent-connection", it.getProp("persistent_connection")) ? false : true; force_disconnect = conf->getArgInt("--" + prefix + "-persistent-connection", it.getProp("persistent_connection")) ? false : true;
dinfo << myname << "(init): persisten-connection=" << (!force_disconnect) << endl; mbinfo << myname << "(init): persisten-connection=" << (!force_disconnect) << endl;
if( shm->isLocalwork() ) if( shm->isLocalwork() )
{ {
...@@ -56,7 +56,7 @@ MBTCPMaster::MBTCPMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shm ...@@ -56,7 +56,7 @@ MBTCPMaster::MBTCPMaster( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shm
pollThread = make_shared<ThreadCreator<MBTCPMaster>>(this, &MBTCPMaster::poll_thread); pollThread = make_shared<ThreadCreator<MBTCPMaster>>(this, &MBTCPMaster::poll_thread);
pollThread->setFinalAction(this, &MBTCPMaster::final_thread); pollThread->setFinalAction(this, &MBTCPMaster::final_thread);
if( dlog()->is_info() ) if( mblog->is_info() )
printMap(rmap); printMap(rmap);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -97,20 +97,20 @@ std::shared_ptr<ModbusClient> MBTCPMaster::initMB( bool reopen ) ...@@ -97,20 +97,20 @@ std::shared_ptr<ModbusClient> MBTCPMaster::initMB( bool reopen )
mbtcp->setSleepPause(sleepPause_usec); mbtcp->setSleepPause(sleepPause_usec);
mbtcp->setAfterSendPause(aftersend_pause); mbtcp->setAfterSendPause(aftersend_pause);
dinfo << myname << "(init): ipaddr=" << iaddr << " port=" << port << endl; mbinfo << myname << "(init): ipaddr=" << iaddr << " port=" << port << endl;
if( dlog()->is_level9() ) if( mblog->is_level9() )
mbtcp->setLog(dlog()); mbtcp->setLog(mblog);
} }
catch( ModbusRTU::mbException& ex ) catch( ModbusRTU::mbException& ex )
{ {
dwarn << "(init): " << ex << endl; mbwarn << "(init): " << ex << endl;
mb = nullptr; mb = nullptr;
mbtcp = nullptr; mbtcp = nullptr;
} }
catch( const ost::Exception& e ) catch( const ost::Exception& e )
{ {
dwarn << myname << "(init): Can`t create socket " << iaddr << ":" << port << " err: " << e.getString() << endl; mbwarn << myname << "(init): Can`t create socket " << iaddr << ":" << port << " err: " << e.getString() << endl;
mb = nullptr; mb = nullptr;
mbtcp = nullptr; mbtcp = nullptr;
} }
......
...@@ -23,7 +23,7 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob ...@@ -23,7 +23,7 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob
auto conf = uniset_conf(); auto conf = uniset_conf();
prop_prefix = initPropPrefix("tcp_"); prop_prefix = initPropPrefix("tcp_");
dinfo << myname << "(init): prop_prefix=" << prop_prefix << endl; mbinfo << myname << "(init): prop_prefix=" << prop_prefix << endl;
UniXML::iterator it(cnode); UniXML::iterator it(cnode);
...@@ -38,7 +38,7 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob ...@@ -38,7 +38,7 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob
{ {
ostringstream err; ostringstream err;
err << myname << "(init): not found <GateList>"; err << myname << "(init): not found <GateList>";
dcrit << err.str() << endl; mbcrit << err.str() << endl;
throw UniSetTypes::SystemError(err.str()); throw UniSetTypes::SystemError(err.str());
} }
...@@ -46,7 +46,7 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob ...@@ -46,7 +46,7 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob
{ {
ostringstream err; ostringstream err;
err << myname << "(init): empty <GateList> ?!"; err << myname << "(init): empty <GateList> ?!";
dcrit << err.str() << endl; mbcrit << err.str() << endl;
throw UniSetTypes::SystemError(err.str()); throw UniSetTypes::SystemError(err.str());
} }
...@@ -59,7 +59,7 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob ...@@ -59,7 +59,7 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob
{ {
ostringstream err; ostringstream err;
err << myname << "(init): ip='' in <GateList>"; err << myname << "(init): ip='' in <GateList>";
dcrit << err.str() << endl; mbcrit << err.str() << endl;
throw UniSetTypes::SystemError(err.str()); throw UniSetTypes::SystemError(err.str());
} }
...@@ -69,7 +69,7 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob ...@@ -69,7 +69,7 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob
{ {
ostringstream err; ostringstream err;
err << myname << "(init): ERROR: port=''" << sinf.port << " for ip='" << sinf.ip << "' in <GateList>"; err << myname << "(init): ERROR: port=''" << sinf.port << " for ip='" << sinf.ip << "' in <GateList>";
dcrit << err.str() << endl; mbcrit << err.str() << endl;
throw UniSetTypes::SystemError(err.str()); throw UniSetTypes::SystemError(err.str());
} }
...@@ -81,7 +81,7 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob ...@@ -81,7 +81,7 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob
{ {
ostringstream err; ostringstream err;
err << myname << "(init): ERROR: Unknown SensorID for '" << it1.getProp("respond") << "' in <GateList>"; err << myname << "(init): ERROR: Unknown SensorID for '" << it1.getProp("respond") << "' in <GateList>";
dcrit << err.str() << endl; mbcrit << err.str() << endl;
throw UniSetTypes::SystemError(err.str()); throw UniSetTypes::SystemError(err.str());
} }
} }
...@@ -101,19 +101,19 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob ...@@ -101,19 +101,19 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob
n << sinf.ip << ":" << sinf.port; n << sinf.ip << ":" << sinf.port;
sinf.myname = n.str(); sinf.myname = n.str();
if( dlog()->is_level9() ) if( mblog->is_level9() )
sinf.mbtcp->setLog(dlog()); sinf.mbtcp->setLog(mblog);
mblist.push_back(sinf); mblist.push_back(sinf);
dinfo << myname << "(init): add slave channel " << sinf.myname << endl; mbinfo << myname << "(init): add slave channel " << sinf.myname << endl;
} }
if( mblist.empty() ) if( mblist.empty() )
{ {
ostringstream err; ostringstream err;
err << myname << "(init): empty <GateList>!"; err << myname << "(init): empty <GateList>!";
dcrit << err.str() << endl; mbcrit << err.str() << endl;
throw UniSetTypes::SystemError(err.str()); throw UniSetTypes::SystemError(err.str());
} }
...@@ -139,7 +139,7 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob ...@@ -139,7 +139,7 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob
// неудачной попытки запросов по одному из каналов, то ПЕРЕОПРЕДЕЛЯЕМ reopen, на timeout.. // неудачной попытки запросов по одному из каналов, то ПЕРЕОПРЕДЕЛЯЕМ reopen, на timeout..
ptReopen.setTiming(default_timeout); ptReopen.setTiming(default_timeout);
if( dlog()->is_info() ) if( mblog->is_info() )
printMap(rmap); printMap(rmap);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -175,7 +175,7 @@ std::shared_ptr<ModbusClient> MBTCPMultiMaster::initMB( bool reopen ) ...@@ -175,7 +175,7 @@ std::shared_ptr<ModbusClient> MBTCPMultiMaster::initMB( bool reopen )
if( mbi == mblist.rend() ) if( mbi == mblist.rend() )
mbi = mblist.rbegin(); mbi = mblist.rbegin();
mbi->init(); mbi->init(mblog);
mb = mbi->mbtcp; mb = mbi->mbtcp;
return mbi->mbtcp; return mbi->mbtcp;
} }
...@@ -189,13 +189,13 @@ std::shared_ptr<ModbusClient> MBTCPMultiMaster::initMB( bool reopen ) ...@@ -189,13 +189,13 @@ std::shared_ptr<ModbusClient> MBTCPMultiMaster::initMB( bool reopen )
{ {
mbi->ignore = true; mbi->ignore = true;
mbi->ptIgnoreTimeout.reset(); mbi->ptIgnoreTimeout.reset();
dwarn << myname << "(initMB): set ignore=true for " << mbi->ip << ":" << mbi->port << endl; mbwarn << myname << "(initMB): set ignore=true for " << mbi->ip << ":" << mbi->port << endl;
} }
// Если по текущему каналу связь есть, то возвращаем его // Если по текущему каналу связь есть, то возвращаем его
if( mbi != mblist.rend() && !mbi->ignore && mbi->respond ) if( mbi != mblist.rend() && !mbi->ignore && mbi->respond )
{ {
if( mbi->mbtcp->isConnection() || ( !mbi->mbtcp->isConnection() && mbi->init()) ) if( mbi->mbtcp->isConnection() || ( !mbi->mbtcp->isConnection() && mbi->init(mblog)) )
{ {
if( !mbi->ignore ) if( !mbi->ignore )
{ {
...@@ -221,7 +221,7 @@ std::shared_ptr<ModbusClient> MBTCPMultiMaster::initMB( bool reopen ) ...@@ -221,7 +221,7 @@ std::shared_ptr<ModbusClient> MBTCPMultiMaster::initMB( bool reopen )
{ {
uniset_rwmutex_wrlock l(tcpMutex); uniset_rwmutex_wrlock l(tcpMutex);
if( it->respond && it->init() ) if( it->respond && it->init(mblog) )
{ {
if( it->ignore ) if( it->ignore )
{ {
...@@ -257,13 +257,13 @@ bool MBTCPMultiMaster::MBSlaveInfo::check() ...@@ -257,13 +257,13 @@ bool MBTCPMultiMaster::MBSlaveInfo::check()
return mbtcp->checkConnection(ip, port); return mbtcp->checkConnection(ip, port);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
bool MBTCPMultiMaster::MBSlaveInfo::init() bool MBTCPMultiMaster::MBSlaveInfo::init( std::shared_ptr<DebugStream>& mblog )
{ {
try try
{ {
ost::Thread::setException(ost::Thread::throwException); ost::Thread::setException(ost::Thread::throwException);
dinfo << myname << "(init): connect..." << endl; mbinfo << myname << "(init): connect..." << endl;
mbtcp->connect(ip, port); mbtcp->connect(ip, port);
mbtcp->setForceDisconnect(force_disconnect); mbtcp->setForceDisconnect(force_disconnect);
...@@ -277,7 +277,7 @@ bool MBTCPMultiMaster::MBSlaveInfo::init() ...@@ -277,7 +277,7 @@ bool MBTCPMultiMaster::MBSlaveInfo::init()
mbtcp->setAfterSendPause(aftersend_pause); mbtcp->setAfterSendPause(aftersend_pause);
if( mbtcp->isConnection() ) if( mbtcp->isConnection() )
dinfo << "(init): " << myname << " connect OK" << endl; mbinfo << "(init): " << myname << " connect OK" << endl;
initOK = true; initOK = true;
} }
...@@ -285,15 +285,15 @@ bool MBTCPMultiMaster::MBSlaveInfo::init() ...@@ -285,15 +285,15 @@ bool MBTCPMultiMaster::MBSlaveInfo::init()
} }
catch( ModbusRTU::mbException& ex ) catch( ModbusRTU::mbException& ex )
{ {
dwarn << "(init): " << ex << endl; mbwarn << "(init): " << ex << endl;
} }
catch( const ost::Exception& e ) catch( const ost::Exception& e )
{ {
dwarn << myname << "(init): Can`t create socket " << ip << ":" << port << " err: " << e.getString() << endl; mbwarn << myname << "(init): Can`t create socket " << ip << ":" << port << " err: " << e.getString() << endl;
} }
catch(...) catch(...)
{ {
dwarn << "(init): " << myname << " catch ..." << endl; mbwarn << "(init): " << myname << " catch ..." << endl;
} }
initOK = false; initOK = false;
...@@ -353,7 +353,7 @@ void MBTCPMultiMaster::check_thread() ...@@ -353,7 +353,7 @@ void MBTCPMultiMaster::check_thread()
try try
{ {
bool r = it->check(); bool r = it->check();
dinfo << myname << "(check): " << it->myname << " " << ( r ? "OK" : "FAIL" ) << endl; mbinfo << myname << "(check): " << it->myname << " " << ( r ? "OK" : "FAIL" ) << endl;
try try
{ {
...@@ -365,11 +365,11 @@ void MBTCPMultiMaster::check_thread() ...@@ -365,11 +365,11 @@ void MBTCPMultiMaster::check_thread()
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
dcrit << myname << "(check): (respond) " << ex << std::endl; mbcrit << myname << "(check): (respond) " << ex << std::endl;
} }
catch( const std::exception& ex ) catch( const std::exception& ex )
{ {
dcrit << myname << "(check): (respond) " << ex.what() << std::endl; mbcrit << myname << "(check): (respond) " << ex.what() << std::endl;
} }
...@@ -380,7 +380,7 @@ void MBTCPMultiMaster::check_thread() ...@@ -380,7 +380,7 @@ void MBTCPMultiMaster::check_thread()
} }
catch( const std::exception& ex ) catch( const std::exception& ex )
{ {
dcrit << myname << "(check): (respond) " << ex.what() << std::endl; mbcrit << myname << "(check): (respond) " << ex.what() << std::endl;
} }
if( !checkProcActive() ) if( !checkProcActive() )
......
...@@ -267,7 +267,7 @@ class MBTCPMultiMaster: ...@@ -267,7 +267,7 @@ class MBTCPMultiMaster:
return priority < mbs.priority; return priority < mbs.priority;
} }
bool init(); bool init( std::shared_ptr<DebugStream>& mblog );
bool check(); bool check();
int recv_timeout; int recv_timeout;
......
...@@ -17,7 +17,7 @@ int main( int argc, const char** argv ) ...@@ -17,7 +17,7 @@ int main( int argc, const char** argv )
{ {
cout << "--smemory-id objectName - SharedMemory objectID. Default: autodetect" << endl; cout << "--smemory-id objectName - SharedMemory objectID. Default: autodetect" << endl;
cout << "--confile filename - configuration file. Default: configure.xml" << endl; cout << "--confile filename - configuration file. Default: configure.xml" << endl;
cout << "--mbtcp-logfile filename - logfilename. Default: mbtcpmaster.log" << endl; cout << "--mbtcp-logfile filename - logfilename" << endl;
cout << endl; cout << endl;
MBTCPMaster::help_print(argc, argv); MBTCPMaster::help_print(argc, argv);
return 0; return 0;
...@@ -29,14 +29,14 @@ int main( int argc, const char** argv ) ...@@ -29,14 +29,14 @@ int main( int argc, const char** argv )
string logfilename(conf->getArgParam("--mbtcp-logfile")); string logfilename(conf->getArgParam("--mbtcp-logfile"));
if( logfilename.empty() ) if( !logfilename.empty() )
logfilename = "mbtcpmaster.log"; {
std::ostringstream logname;
std::ostringstream logname; string dir(conf->getLogDir());
string dir(conf->getLogDir()); logname << dir << logfilename;
logname << dir << logfilename; ulog()->logFile( logname.str() );
ulog()->logFile( logname.str() ); dlog()->logFile( logname.str() );
dlog()->logFile( logname.str() ); }
ObjectId shmID = DefaultObjectId; ObjectId shmID = DefaultObjectId;
string sID = conf->getArgParam("--smemory-id"); string sID = conf->getArgParam("--smemory-id");
......
...@@ -15,7 +15,7 @@ int main( int argc, const char** argv ) ...@@ -15,7 +15,7 @@ int main( int argc, const char** argv )
{ {
cout << "--smemory-id objectName - SharedMemory objectID. Default: get from configure..." << endl; cout << "--smemory-id objectName - SharedMemory objectID. Default: get from configure..." << endl;
cout << "--confile filename - configuration file. Default: configure.xml" << endl; cout << "--confile filename - configuration file. Default: configure.xml" << endl;
cout << "--mbtcp-logfile filename - logfilename. Default: mbtcpmultimaster.log" << endl; cout << "--mbtcp-logfile filename - logfilename" << endl;
cout << endl; cout << endl;
MBTCPMultiMaster::help_print(argc, argv); MBTCPMultiMaster::help_print(argc, argv);
return 0; return 0;
...@@ -27,14 +27,14 @@ int main( int argc, const char** argv ) ...@@ -27,14 +27,14 @@ int main( int argc, const char** argv )
string logfilename(conf->getArgParam("--mbtcp-logfile")); string logfilename(conf->getArgParam("--mbtcp-logfile"));
if( logfilename.empty() ) if( !logfilename.empty() )
logfilename = "mbtcpmultimaster.log"; {
std::ostringstream logname;
std::ostringstream logname; string dir(conf->getLogDir());
string dir(conf->getLogDir()); logname << dir << logfilename;
logname << dir << logfilename; ulog()->logFile( logname.str() );
ulog()->logFile( logname.str() ); dlog()->logFile( logname.str() );
dlog()->logFile( logname.str() ); }
ObjectId shmID = DefaultObjectId; ObjectId shmID = DefaultObjectId;
string sID = conf->getArgParam("--smemory-id"); string sID = conf->getArgParam("--smemory-id");
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
--confile test.xml \ --confile test.xml \
--mbtcp-name MBMaster1 \ --mbtcp-name MBMaster1 \
--smemory-id SharedMemory \ --smemory-id SharedMemory \
--dlog-add-levels system,info,crit,warn,level4,level3 \ --mbtcp-log-add-levels system,info,crit,warn,level4,level3 \
--mbtcp-set-prop-prefix \ --mbtcp-set-prop-prefix \
--mbtcp-filter-field rs \ --mbtcp-filter-field rs \
--mbtcp-filter-value 5 \ --mbtcp-filter-value 5 \
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
--mbtcp-polltime 3000 \ --mbtcp-polltime 3000 \
--mbtcp-force-out 1 \ --mbtcp-force-out 1 \
--ulog-add-levels system \ --ulog-add-levels system \
--mbtcp-run-logserver \
$* $*
#--mbtcp-exchange-mode-id MB1_Mode_AS \ #--mbtcp-exchange-mode-id MB1_Mode_AS \
......
...@@ -34,6 +34,10 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons ...@@ -34,6 +34,10 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons
auto conf = uniset_conf(); auto conf = uniset_conf();
mutex_start.setName(myname + "_mutex_start"); mutex_start.setName(myname + "_mutex_start");
mblog = make_shared<DebugStream>();
conf->initLogStream(mblog, prefix + "-log");
logserv = make_shared<LogServer>(mblog);
// xmlNode* cnode = conf->getNode(myname); // xmlNode* cnode = conf->getNode(myname);
string conf_name(conf->getArgParam("--" + prefix + "-confnode", myname)); string conf_name(conf->getArgParam("--" + prefix + "-confnode", myname));
...@@ -46,11 +50,17 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons ...@@ -46,11 +50,17 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons
UniXML::iterator it(cnode); UniXML::iterator it(cnode);
if( findArgParam("--" + prefix + "-run-logserver", conf->getArgc(), conf->getArgv()) != -1 )
{
logserv_host = conf->getArg2Param("--" + prefix + "-logserver-host", it.getProp("logserverHost"), "localhost");
logserv_port = conf->getArgPInt("--" + prefix + "-logserver-port", it.getProp("logserverPort"), getId());
}
// определяем фильтр // определяем фильтр
s_field = conf->getArgParam("--" + prefix + "-filter-field"); s_field = conf->getArgParam("--" + prefix + "-filter-field");
s_fvalue = conf->getArgParam("--" + prefix + "-filter-value"); s_fvalue = conf->getArgParam("--" + prefix + "-filter-value");
dinfo << myname << "(init): read s_field='" << s_field mbinfo << myname << "(init): read s_field='" << s_field
<< "' s_fvalue='" << s_fvalue << "'" << endl; << "' s_fvalue='" << s_fvalue << "'" << endl;
// префикс для "свойств" - по умолчанию // префикс для "свойств" - по умолчанию
prop_prefix = ""; prop_prefix = "";
...@@ -73,7 +83,7 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons ...@@ -73,7 +83,7 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons
prop_prefix = ""; prop_prefix = "";
} }
dinfo << myname << "(init): prop_prefix=" << prop_prefix << endl; mbinfo << myname << "(init): prop_prefix=" << prop_prefix << endl;
force = conf->getArgInt("--" + prefix + "-force", it.getProp("force")); force = conf->getArgInt("--" + prefix + "-force", it.getProp("force"));
...@@ -86,11 +96,11 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons ...@@ -86,11 +96,11 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons
mbregFromID = conf->getArgInt("--" + prefix + "-reg-from-id", it.getProp("reg_from_id")); mbregFromID = conf->getArgInt("--" + prefix + "-reg-from-id", it.getProp("reg_from_id"));
checkMBFunc = conf->getArgInt("--" + prefix + "-check-mbfunc", it.getProp("check_mbfunc")); checkMBFunc = conf->getArgInt("--" + prefix + "-check-mbfunc", it.getProp("check_mbfunc"));
noMBFuncOptimize = conf->getArgInt("--" + prefix + "-no-mbfunc-optimization", it.getProp("no_mbfunc_optimization")); noMBFuncOptimize = conf->getArgInt("--" + prefix + "-no-mbfunc-optimization", it.getProp("no_mbfunc_optimization"));
dinfo << myname << "(init): mbregFromID=" << mbregFromID mbinfo << myname << "(init): mbregFromID=" << mbregFromID
<< " checkMBFunc=" << checkMBFunc << " checkMBFunc=" << checkMBFunc
<< " default_mbfunc=" << default_mbfunc << " default_mbfunc=" << default_mbfunc
<< " noMBFuncOptimize=" << noMBFuncOptimize << " noMBFuncOptimize=" << noMBFuncOptimize
<< endl; << endl;
respond_id = conf->getSensorID(conf->getArgParam("--" + prefix + "-respond-id", it.getProp("respond_id"))); respond_id = conf->getSensorID(conf->getArgParam("--" + prefix + "-respond-id", it.getProp("respond_id")));
respond_invert = conf->getArgInt("--" + prefix + "-respond-invert", it.getProp("respond_invert")); respond_invert = conf->getArgInt("--" + prefix + "-respond-invert", it.getProp("respond_invert"));
...@@ -122,13 +132,13 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons ...@@ -122,13 +132,13 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons
rs->setRecvTimeout(2000); rs->setRecvTimeout(2000);
rs->setAfterSendPause(aftersend_pause); rs->setAfterSendPause(aftersend_pause);
rs->setReplyTimeout(reply_tout); rs->setReplyTimeout(reply_tout);
rs->setLog(dlog()); rs->setLog(mblog);
mbslot = std::static_pointer_cast<ModbusServerSlot>(rs); mbslot = std::static_pointer_cast<ModbusServerSlot>(rs);
thr = make_shared< ThreadCreator<MBSlave> >(this, &MBSlave::execute_rtu); thr = make_shared< ThreadCreator<MBSlave> >(this, &MBSlave::execute_rtu);
thr->setFinalAction(this, &MBSlave::finalThread); thr->setFinalAction(this, &MBSlave::finalThread);
dinfo << myname << "(init): type=RTU myaddr=" << ModbusRTU::addr2str(addr) mbinfo << myname << "(init): type=RTU myaddr=" << ModbusRTU::addr2str(addr)
<< " dev=" << dev << " speed=" << speed << endl; << " dev=" << dev << " speed=" << speed << endl;
} }
else if( stype == "TCP" ) else if( stype == "TCP" )
{ {
...@@ -139,8 +149,8 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons ...@@ -139,8 +149,8 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons
int port = conf->getArgPInt("--" + prefix + "-inet-port", it.getProp("iport"), 502); int port = conf->getArgPInt("--" + prefix + "-inet-port", it.getProp("iport"), 502);
dinfo << myname << "(init): type=TCP myaddr=" << ModbusRTU::addr2str(addr) mbinfo << myname << "(init): type=TCP myaddr=" << ModbusRTU::addr2str(addr)
<< " inet=" << iaddr << " port=" << port << endl; << " inet=" << iaddr << " port=" << port << endl;
ost::InetAddress ia(iaddr.c_str()); ost::InetAddress ia(iaddr.c_str());
auto mbtcp = make_shared<ModbusTCPServerSlot>(ia, port); auto mbtcp = make_shared<ModbusTCPServerSlot>(ia, port);
...@@ -151,10 +161,10 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons ...@@ -151,10 +161,10 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons
mbslot = std::static_pointer_cast<ModbusServerSlot>(mbtcp); mbslot = std::static_pointer_cast<ModbusServerSlot>(mbtcp);
thr = make_shared< ThreadCreator<MBSlave> >(this, &MBSlave::execute_tcp); thr = make_shared< ThreadCreator<MBSlave> >(this, &MBSlave::execute_tcp);
thr->setFinalAction(this, &MBSlave::finalThread); thr->setFinalAction(this, &MBSlave::finalThread);
dinfo << myname << "(init): init TCP connection ok. " << " inet=" << iaddr << " port=" << port << endl; mbinfo << myname << "(init): init TCP connection ok. " << " inet=" << iaddr << " port=" << port << endl;
if( dlog()->is_level9() ) if( mblog->is_level9() )
mbtcp->setLog(dlog()); mbtcp->setLog(mblog);
} }
else else
throw UniSetTypes::SystemError(myname + "(MBSlave): Unknown slave type. Use: --" + prefix + "-type [RTU|TCP]"); throw UniSetTypes::SystemError(myname + "(MBSlave): Unknown slave type. Use: --" + prefix + "-type [RTU|TCP]");
...@@ -184,7 +194,7 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons ...@@ -184,7 +194,7 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons
if( shm->isLocalwork() ) if( shm->isLocalwork() )
{ {
readConfiguration(); readConfiguration();
dinfo << myname << "(init): iomap size = " << iomap.size() << endl; mbinfo << myname << "(init): iomap size = " << iomap.size() << endl;
} }
else else
{ {
...@@ -204,7 +214,7 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons ...@@ -204,7 +214,7 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons
{ {
ostringstream err; ostringstream err;
err << myname << ": не найден идентификатор для датчика 'HeartBeat' " << heart; err << myname << ": не найден идентификатор для датчика 'HeartBeat' " << heart;
dcrit << myname << "(init): " << err.str() << endl; mbcrit << myname << "(init): " << err.str() << endl;
throw SystemError(err.str()); throw SystemError(err.str());
} }
...@@ -226,14 +236,14 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons ...@@ -226,14 +236,14 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons
{ {
ostringstream err; ostringstream err;
err << myname << ": test_id unknown. 'TestMode_S' not found..."; err << myname << ": test_id unknown. 'TestMode_S' not found...";
dcrit << myname << "(init): " << err.str() << endl; mbcrit << myname << "(init): " << err.str() << endl;
throw SystemError(err.str()); throw SystemError(err.str());
} }
} }
askcount_id = conf->getSensorID(conf->getArgParam("--" + prefix + "-askcount-id", it.getProp("askcount_id"))); askcount_id = conf->getSensorID(conf->getArgParam("--" + prefix + "-askcount-id", it.getProp("askcount_id")));
dinfo << myname << ": init askcount_id=" << askcount_id << endl; mbinfo << myname << ": init askcount_id=" << askcount_id << endl;
dinfo << myname << ": init test_id=" << test_id << endl; mbinfo << myname << ": init test_id=" << test_id << endl;
wait_msec = conf->getHeartBeatTime() - 100; wait_msec = conf->getHeartBeatTime() - 100;
...@@ -245,7 +255,7 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons ...@@ -245,7 +255,7 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons
timeout_t msec = conf->getArgPInt("--" + prefix + "-timeout", it.getProp("timeout"), 3000); timeout_t msec = conf->getArgPInt("--" + prefix + "-timeout", it.getProp("timeout"), 3000);
ptTimeout.setTiming(msec); ptTimeout.setTiming(msec);
dinfo << myname << "(init): rs-timeout=" << msec << " msec" << endl; mbinfo << myname << "(init): rs-timeout=" << msec << " msec" << endl;
// build file list... // build file list...
xmlNode* fnode = 0; xmlNode* fnode = 0;
...@@ -266,7 +276,7 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons ...@@ -266,7 +276,7 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons
if( nm.empty() ) if( nm.empty() )
{ {
dwarn << myname << "(build file list): ignore empty name... " << endl; mbwarn << myname << "(build file list): ignore empty name... " << endl;
continue; continue;
} }
...@@ -274,7 +284,7 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons ...@@ -274,7 +284,7 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons
if( id == 0 ) if( id == 0 )
{ {
dwarn << myname << "(build file list): FAILED ID for " << nm << "... ignore..." << endl; mbwarn << myname << "(build file list): FAILED ID for " << nm << "... ignore..." << endl;
continue; continue;
} }
...@@ -290,19 +300,19 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons ...@@ -290,19 +300,19 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons
nm = dir + nm; nm = dir + nm;
} }
dinfo << myname << "(init): add to filelist: " mbinfo << myname << "(init): add to filelist: "
<< "id=" << id << "id=" << id
<< " file=" << nm << " file=" << nm
<< endl; << endl;
flist[id] = nm; flist[id] = nm;
} }
} }
else else
dinfo << myname << "(init): <filelist> empty..." << endl; mbinfo << myname << "(init): <filelist> empty..." << endl;
} }
else else
dinfo << myname << "(init): <filelist> not found..." << endl; mbinfo << myname << "(init): <filelist> not found..." << endl;
// Формирование "карты" ответов на запрос 0x2B(43)/0x0E(14) // Формирование "карты" ответов на запрос 0x2B(43)/0x0E(14)
...@@ -336,7 +346,7 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons ...@@ -336,7 +346,7 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons
{ {
if( dit.getProp("id").empty() ) if( dit.getProp("id").empty() )
{ {
dwarn << myname << "(init): read <MEI>. Unknown <device id=''>. Ignore.." << endl; mbwarn << myname << "(init): read <MEI>. Unknown <device id=''>. Ignore.." << endl;
continue; continue;
} }
...@@ -346,7 +356,7 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons ...@@ -346,7 +356,7 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons
if( oit.goChildren() ) if( oit.goChildren() )
{ {
dwarn << myname << "(init): MEI: read dev='" << devID << "'" << endl; mbwarn << myname << "(init): MEI: read dev='" << devID << "'" << endl;
MEIObjIDMap meiomap; MEIObjIDMap meiomap;
// Object ID list.. // Object ID list..
...@@ -354,10 +364,10 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons ...@@ -354,10 +364,10 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons
{ {
if( dit.getProp("id").empty() ) if( dit.getProp("id").empty() )
{ {
dwarn << myname mbwarn << myname
<< "(init): read <MEI>. Unknown <object id='' (for device id='" << "(init): read <MEI>. Unknown <object id='' (for device id='"
<< devID << "'). Ignore.." << devID << "'). Ignore.."
<< endl; << endl;
continue; continue;
} }
...@@ -367,7 +377,7 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons ...@@ -367,7 +377,7 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons
if( sit.goChildren() ) if( sit.goChildren() )
{ {
dinfo << myname << "(init): MEI: read obj='" << objID << "'" << endl; mbinfo << myname << "(init): MEI: read obj='" << objID << "'" << endl;
MEIValMap meivmap; MEIValMap meivmap;
// request (string) list.. // request (string) list..
...@@ -377,11 +387,11 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons ...@@ -377,11 +387,11 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons
if( sit.getProp("id").empty() ) if( sit.getProp("id").empty() )
{ {
dwarn << myname << "(init): MEI: dev='" << devID mbwarn << myname << "(init): MEI: dev='" << devID
<< "' obj='" << objID << "'" << "' obj='" << objID << "'"
<< ". Unknown id='' for value='" << sit.getProp("value") << "'" << ". Unknown id='' for value='" << sit.getProp("value") << "'"
<< ". Set objID='" << objID << "'" << ". Set objID='" << objID << "'"
<< endl; << endl;
} }
else else
vid = sit.getIntProp("id"); vid = sit.getIntProp("id");
...@@ -401,10 +411,10 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons ...@@ -401,10 +411,10 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons
} }
if( !meidev.empty() ) if( !meidev.empty() )
dinfo << myname << "(init): <MEI> init ok." << endl; mbinfo << myname << "(init): <MEI> init ok." << endl;
} }
else else
dinfo << myname << "(init): <MEI> empty..." << endl; mbinfo << myname << "(init): <MEI> empty..." << endl;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -439,7 +449,7 @@ void MBSlave::waitSMReady() ...@@ -439,7 +449,7 @@ void MBSlave::waitSMReady()
{ {
ostringstream err; ostringstream err;
err << myname << "(waitSMReady): Не дождались готовности SharedMemory к работе в течение " << ready_timeout << " мсек"; err << myname << "(waitSMReady): Не дождались готовности SharedMemory к работе в течение " << ready_timeout << " мсек";
dcrit << err.str() << endl; mbcrit << err.str() << endl;
// throw SystemError(err.str()); // throw SystemError(err.str());
raise(SIGTERM); raise(SIGTERM);
terminate(); terminate();
...@@ -475,7 +485,7 @@ void MBSlave::execute_rtu() ...@@ -475,7 +485,7 @@ void MBSlave::execute_rtu()
prev = res; prev = res;
if( res != ModbusRTU::erNoError && res != ModbusRTU::erTimeOut ) if( res != ModbusRTU::erNoError && res != ModbusRTU::erTimeOut )
dwarn << myname << "(execute_rtu): " << ModbusRTU::mbErr2Str(res) << endl; mbwarn << myname << "(execute_rtu): " << ModbusRTU::mbErr2Str(res) << endl;
if( !activated ) if( !activated )
continue; continue;
...@@ -489,8 +499,8 @@ void MBSlave::execute_rtu() ...@@ -489,8 +499,8 @@ void MBSlave::execute_rtu()
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
dcrit << myname mbcrit << myname
<< "(execute_rtu): (hb) " << ex << std::endl; << "(execute_rtu): (hb) " << ex << std::endl;
} }
} }
...@@ -507,7 +517,7 @@ void MBSlave::execute_rtu() ...@@ -507,7 +517,7 @@ void MBSlave::execute_rtu()
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
dcrit << myname << "(execute_rtu): (respond) " << ex << std::endl; mbcrit << myname << "(execute_rtu): (respond) " << ex << std::endl;
} }
} }
...@@ -519,7 +529,7 @@ void MBSlave::execute_rtu() ...@@ -519,7 +529,7 @@ void MBSlave::execute_rtu()
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
dcrit << myname << "(execute_rtu): (askCount) " << ex << std::endl; mbcrit << myname << "(execute_rtu): (askCount) " << ex << std::endl;
} }
} }
...@@ -536,7 +546,7 @@ void MBSlave::execute_tcp() ...@@ -536,7 +546,7 @@ void MBSlave::execute_tcp()
ModbusRTU::mbErrCode prev = erNoError; ModbusRTU::mbErrCode prev = erNoError;
dinfo << myname << "(execute_tcp): thread running.." << endl; mbinfo << myname << "(execute_tcp): thread running.." << endl;
while( !cancelled ) while( !cancelled )
{ {
...@@ -560,7 +570,7 @@ void MBSlave::execute_tcp() ...@@ -560,7 +570,7 @@ void MBSlave::execute_tcp()
prev = res; prev = res;
if( res != ModbusRTU::erNoError && res != ModbusRTU::erTimeOut ) if( res != ModbusRTU::erNoError && res != ModbusRTU::erTimeOut )
dwarn << myname << "(execute_tcp): " << ModbusRTU::mbErr2Str(res) << endl; mbwarn << myname << "(execute_tcp): " << ModbusRTU::mbErr2Str(res) << endl;
if( !activated ) if( !activated )
continue; continue;
...@@ -574,7 +584,7 @@ void MBSlave::execute_tcp() ...@@ -574,7 +584,7 @@ void MBSlave::execute_tcp()
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
dcrit << myname << "(execute_tcp): (hb) " << ex << std::endl; mbcrit << myname << "(execute_tcp): (hb) " << ex << std::endl;
} }
} }
...@@ -591,8 +601,8 @@ void MBSlave::execute_tcp() ...@@ -591,8 +601,8 @@ void MBSlave::execute_tcp()
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
dcrit << myname mbcrit << myname
<< "(execute_rtu): (respond) " << ex << std::endl; << "(execute_rtu): (respond) " << ex << std::endl;
} }
} }
...@@ -604,8 +614,8 @@ void MBSlave::execute_tcp() ...@@ -604,8 +614,8 @@ void MBSlave::execute_tcp()
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
dcrit << myname mbcrit << myname
<< "(execute_tcp): (askCount) " << ex << std::endl; << "(execute_tcp): (askCount) " << ex << std::endl;
} }
} }
...@@ -614,11 +624,11 @@ void MBSlave::execute_tcp() ...@@ -614,11 +624,11 @@ void MBSlave::execute_tcp()
} }
catch( const std::exception& ex ) catch( const std::exception& ex )
{ {
dcrit << myname << "(execute_tcp): " << ex.what() << endl; mbcrit << myname << "(execute_tcp): " << ex.what() << endl;
} }
} }
dinfo << myname << "(execute_tcp): thread stopped.." << endl; mbinfo << myname << "(execute_tcp): thread stopped.." << endl;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void MBSlave::sysCommand( const UniSetTypes::SystemMessage* sm ) void MBSlave::sysCommand( const UniSetTypes::SystemMessage* sm )
...@@ -629,11 +639,17 @@ void MBSlave::sysCommand( const UniSetTypes::SystemMessage* sm ) ...@@ -629,11 +639,17 @@ void MBSlave::sysCommand( const UniSetTypes::SystemMessage* sm )
{ {
if( iomap.empty() ) if( iomap.empty() )
{ {
dcrit << myname << "(sysCommand): iomap EMPTY! terminated..." << endl; mbcrit << myname << "(sysCommand): iomap EMPTY! terminated..." << endl;
raise(SIGTERM); raise(SIGTERM);
return; return;
} }
if( !logserv_host.empty() && logserv_port != 0 && !logserv->isRunning() )
{
mbinfo << myname << "(init): run log server " << logserv_host << ":" << logserv_port << endl;
logserv->run(logserv_host, logserv_port, true);
}
waitSMReady(); waitSMReady();
// подождать пока пройдёт инициализация датчиков // подождать пока пройдёт инициализация датчиков
...@@ -652,7 +668,7 @@ void MBSlave::sysCommand( const UniSetTypes::SystemMessage* sm ) ...@@ -652,7 +668,7 @@ void MBSlave::sysCommand( const UniSetTypes::SystemMessage* sm )
if( !activated ) if( !activated )
{ {
dcrit << myname << "(sysCommand): ************* don`t activate?! ************" << endl; mbcrit << myname << "(sysCommand): ************* don`t activate?! ************" << endl;
} }
else else
{ {
...@@ -684,23 +700,13 @@ void MBSlave::sysCommand( const UniSetTypes::SystemMessage* sm ) ...@@ -684,23 +700,13 @@ void MBSlave::sysCommand( const UniSetTypes::SystemMessage* sm )
case SystemMessage::LogRotate: case SystemMessage::LogRotate:
{ {
// переоткрываем логи mblogany << myname << "(sysCommand): logRotate" << std::endl;
ulogany << myname << "(sysCommand): logRotate" << std::endl; string fname = mblog->getLogFile();
string fname(ulog()->getLogFile());
if( !fname.empty() ) if( !fname.empty() )
{ {
ulog()->logFile(fname, true); mblog->logFile(fname, true);
ulogany << myname << "(sysCommand): ***************** ulog LOG ROTATE *****************" << std::endl; mblogany << myname << "(sysCommand): ***************** mblog LOG ROTATE *****************" << std::endl;
}
dlogany << myname << "(sysCommand): logRotate" << std::endl;
fname = dlog()->getLogFile();
if( !fname.empty() )
{
dlog()->logFile(fname, true);
dlogany << myname << "(sysCommand): ***************** dlog LOG ROTATE *****************" << std::endl;
} }
} }
break; break;
...@@ -719,7 +725,7 @@ void MBSlave::askSensors( UniversalIO::UIOCommand cmd ) ...@@ -719,7 +725,7 @@ void MBSlave::askSensors( UniversalIO::UIOCommand cmd )
<< "(askSensors): Не дождались готовности(work) SharedMemory к работе в течение " << "(askSensors): Не дождались готовности(work) SharedMemory к работе в течение "
<< activateTimeout << " мсек"; << activateTimeout << " мсек";
dcrit << err.str() << endl; mbcrit << err.str() << endl;
kill(SIGTERM, getpid()); // прерываем (перезапускаем) процесс... kill(SIGTERM, getpid()); // прерываем (перезапускаем) процесс...
throw SystemError(err.str()); throw SystemError(err.str());
} }
...@@ -737,7 +743,7 @@ void MBSlave::askSensors( UniversalIO::UIOCommand cmd ) ...@@ -737,7 +743,7 @@ void MBSlave::askSensors( UniversalIO::UIOCommand cmd )
} }
catch( const UniSetTypes::Exception& ex ) catch( const UniSetTypes::Exception& ex )
{ {
dwarn << myname << "(askSensors): " << ex << std::endl; mbwarn << myname << "(askSensors): " << ex << std::endl;
} }
catch(...) {} catch(...) {}
} }
...@@ -785,8 +791,8 @@ void MBSlave::sensorInfo( const UniSetTypes::SensorMessage* sm ) ...@@ -785,8 +791,8 @@ void MBSlave::sensorInfo( const UniSetTypes::SensorMessage* sm )
// вообще этого не может случиться // вообще этого не может случиться
// потому-что корректность проверяется при загрузке // потому-что корректность проверяется при загрузке
if( i != sz ) if( i != sz )
dcrit << myname << "(sensorInfo): update failed for sid=" << sm->id mbcrit << myname << "(sensorInfo): update failed for sid=" << sm->id
<< " (i=" << i << " sz=" << sz << ")" << endl; << " (i=" << i << " sz=" << sz << ")" << endl;
return; return;
} }
...@@ -811,7 +817,7 @@ bool MBSlave::activateObject() ...@@ -811,7 +817,7 @@ bool MBSlave::activateObject()
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
bool MBSlave::deactivateObject() bool MBSlave::deactivateObject()
{ {
dinfo << myname << "(deactivateObject): ..." << endl; mbinfo << myname << "(deactivateObject): ..." << endl;
activated = false; activated = false;
cancelled = true; cancelled = true;
...@@ -828,7 +834,7 @@ bool MBSlave::deactivateObject() ...@@ -828,7 +834,7 @@ bool MBSlave::deactivateObject()
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void MBSlave::sigterm( int signo ) void MBSlave::sigterm( int signo )
{ {
dinfo << myname << ": ********* SIGTERM(" << signo << ") ********" << endl; mbinfo << myname << ": ********* SIGTERM(" << signo << ") ********" << endl;
activated = false; activated = false;
cancelled = true; cancelled = true;
...@@ -858,7 +864,7 @@ void MBSlave::readConfiguration() ...@@ -858,7 +864,7 @@ void MBSlave::readConfiguration()
if( !it.goChildren() ) if( !it.goChildren() )
{ {
dcrit << myname << "(readConfiguration): раздел <sensors> не содержит секций ?!!\n"; mbcrit << myname << "(readConfiguration): раздел <sensors> не содержит секций ?!!\n";
return; return;
} }
...@@ -884,7 +890,7 @@ bool MBSlave::initItem( UniXML::iterator& it ) ...@@ -884,7 +890,7 @@ bool MBSlave::initItem( UniXML::iterator& it )
{ {
IOProperty p; IOProperty p;
if( !IOBase::initItem( static_cast<IOBase*>(&p), it, shm, prop_prefix, false, dlog(), myname) ) if( !IOBase::initItem( static_cast<IOBase*>(&p), it, shm, prop_prefix, false, mblog, myname) )
return false; return false;
if( mbregFromID ) if( mbregFromID )
...@@ -895,7 +901,7 @@ bool MBSlave::initItem( UniXML::iterator& it ) ...@@ -895,7 +901,7 @@ bool MBSlave::initItem( UniXML::iterator& it )
if( r.empty() ) if( r.empty() )
{ {
dcrit << myname << "(initItem): Unknown '" << prop_prefix << "mbreg' for " << it.getProp("name") << endl; mbcrit << myname << "(initItem): Unknown '" << prop_prefix << "mbreg' for " << it.getProp("name") << endl;
return false; return false;
} }
...@@ -927,10 +933,10 @@ bool MBSlave::initItem( UniXML::iterator& it ) ...@@ -927,10 +933,10 @@ bool MBSlave::initItem( UniXML::iterator& it )
{ {
if( nbit < 0 || nbit >= ModbusRTU::BitsPerData ) if( nbit < 0 || nbit >= ModbusRTU::BitsPerData )
{ {
dcrit << myname << "(initItem): BAD " << prop_prefix << "nbit=" << nbit << ". Must be 0 <= nbit < " << ModbusRTU::BitsPerData mbcrit << myname << "(initItem): BAD " << prop_prefix << "nbit=" << nbit << ". Must be 0 <= nbit < " << ModbusRTU::BitsPerData
<< " for '" << " for '"
<< it.getProp("name") << it.getProp("name")
<< "'" << endl; << "'" << endl;
return false; return false;
} }
...@@ -940,28 +946,28 @@ bool MBSlave::initItem( UniXML::iterator& it ) ...@@ -940,28 +946,28 @@ bool MBSlave::initItem( UniXML::iterator& it )
{ {
if( !i->second.bitreg ) if( !i->second.bitreg )
{ {
dcrit << myname << "(initItem): BAD USE " << prop_prefix << "nbit=" << nbit mbcrit << myname << "(initItem): BAD USE " << prop_prefix << "nbit=" << nbit
<< " (for '" << " (for '"
<< it.getProp("name") << it.getProp("name")
<< "') SENSOR ALREADY ADDED sid='" << i->second.si.id << "'" << "') SENSOR ALREADY ADDED sid='" << i->second.si.id << "'"
<< "(" << uniset_conf()->oind->getMapName(i->second.si.id) << ")" << "(" << uniset_conf()->oind->getMapName(i->second.si.id) << ")"
<< endl; << endl;
return false; return false;
} }
if( i->second.bitreg->check(p.si) ) if( i->second.bitreg->check(p.si) )
{ {
dcrit << myname << "(initItem): BIT " << prop_prefix << "nbit=" << nbit mbcrit << myname << "(initItem): BIT " << prop_prefix << "nbit=" << nbit
<< " (for " << " (for "
<< it.getProp("name") << it.getProp("name")
<< ") ALREADY IN USE for sid='" << i->second.bitreg->bvec[nbit].si.id << "'" << ") ALREADY IN USE for sid='" << i->second.bitreg->bvec[nbit].si.id << "'"
<< "(" << uniset_conf()->oind->getMapName(i->second.bitreg->bvec[nbit].si.id) << ")" << "(" << uniset_conf()->oind->getMapName(i->second.bitreg->bvec[nbit].si.id) << ")"
<< endl; << endl;
return false; return false;
} }
i->second.bitreg->bvec[nbit] = std::move(p); i->second.bitreg->bvec[nbit] = std::move(p);
dinfo << myname << "(initItem): add new bit: " << i->second.bitreg.get() << endl; mbinfo << myname << "(initItem): add new bit: " << i->second.bitreg.get() << endl;
return true; return true;
} }
else else
...@@ -976,7 +982,7 @@ bool MBSlave::initItem( UniXML::iterator& it ) ...@@ -976,7 +982,7 @@ bool MBSlave::initItem( UniXML::iterator& it )
p_dummy.bitreg->bvec[nbit] = std::move(p); // после этого p использовать нельзя! p_dummy.bitreg->bvec[nbit] = std::move(p); // после этого p использовать нельзя!
dinfo << myname << "(initItem): add bit register: " << p_dummy.bitreg.get() << endl; mbinfo << myname << "(initItem): add bit register: " << p_dummy.bitreg.get() << endl;
iomap[p_dummy.regID] = std::move(p_dummy); iomap[p_dummy.regID] = std::move(p_dummy);
} }
...@@ -996,7 +1002,7 @@ bool MBSlave::initItem( UniXML::iterator& it ) ...@@ -996,7 +1002,7 @@ bool MBSlave::initItem( UniXML::iterator& it )
<< " reg='" << ModbusRTU::dat2str(i->second.mbreg) << "(" << (int)i->second.mbreg << ")" << " reg='" << ModbusRTU::dat2str(i->second.mbreg) << "(" << (int)i->second.mbreg << ")"
<< " wnum=" << i->second.wnum; << " wnum=" << i->second.wnum;
dcrit << err.str() << endl; mbcrit << err.str() << endl;
//throw SystemError( err.str() ); //throw SystemError( err.str() );
abort(); abort();
} }
...@@ -1007,7 +1013,7 @@ bool MBSlave::initItem( UniXML::iterator& it ) ...@@ -1007,7 +1013,7 @@ bool MBSlave::initItem( UniXML::iterator& it )
{ {
p.vtype = VTypes::vtUnknown; p.vtype = VTypes::vtUnknown;
p.wnum = 0; p.wnum = 0;
dinfo << myname << "(initItem): add " << p << endl; mbinfo << myname << "(initItem): add " << p << endl;
iomap[p.regID] = std::move(p); iomap[p.regID] = std::move(p);
} }
else else
...@@ -1016,9 +1022,9 @@ bool MBSlave::initItem( UniXML::iterator& it ) ...@@ -1016,9 +1022,9 @@ bool MBSlave::initItem( UniXML::iterator& it )
if( v == VTypes::vtUnknown ) if( v == VTypes::vtUnknown )
{ {
dcrit << myname << "(initItem): Unknown rtuVType=" << vt << " for " mbcrit << myname << "(initItem): Unknown rtuVType=" << vt << " for "
<< it.getProp("name") << it.getProp("name")
<< endl; << endl;
return false; return false;
} }
...@@ -1028,17 +1034,17 @@ bool MBSlave::initItem( UniXML::iterator& it ) ...@@ -1028,17 +1034,17 @@ bool MBSlave::initItem( UniXML::iterator& it )
if( p.nbyte <= 0 ) if( p.nbyte <= 0 )
{ {
dcrit << myname << "(initItem): Unknown " << prop_prefix << "nbyte='' for " mbcrit << myname << "(initItem): Unknown " << prop_prefix << "nbyte='' for "
<< it.getProp("name") << it.getProp("name")
<< endl; << endl;
return false; return false;
} }
else if( p.nbyte > 2 ) else if( p.nbyte > 2 )
{ {
dcrit << myname << "(initItem): BAD " << prop_prefix << "nbyte='" << p.nbyte << "' for " mbcrit << myname << "(initItem): BAD " << prop_prefix << "nbyte='" << p.nbyte << "' for "
<< it.getProp("name") << it.getProp("name")
<< ". Must be [1,2]." << ". Must be [1,2]."
<< endl; << endl;
return false; return false;
} }
} }
...@@ -1057,7 +1063,7 @@ bool MBSlave::initItem( UniXML::iterator& it ) ...@@ -1057,7 +1063,7 @@ bool MBSlave::initItem( UniXML::iterator& it )
int p_regID = p.regID; int p_regID = p.regID;
// после std::move p - использовать нельзя! // после std::move p - использовать нельзя!
dinfo << myname << "(initItem): add " << p << endl; mbinfo << myname << "(initItem): add " << p << endl;
iomap[p_regID] = std::move(p); iomap[p_regID] = std::move(p);
...@@ -1074,7 +1080,7 @@ bool MBSlave::initItem( UniXML::iterator& it ) ...@@ -1074,7 +1080,7 @@ bool MBSlave::initItem( UniXML::iterator& it )
p_regID = genRegID(p_dummy.mbreg, mbfunc); p_regID = genRegID(p_dummy.mbreg, mbfunc);
p_dummy.regID = p_regID; p_dummy.regID = p_regID;
dinfo << myname << "(initItem): add " << p_dummy << endl; mbinfo << myname << "(initItem): add " << p_dummy << endl;
iomap[p_regID] = std::move(p_dummy); iomap[p_regID] = std::move(p_dummy);
} }
} }
...@@ -1169,6 +1175,18 @@ void MBSlave::help_print( int argc, const char* const* argv ) ...@@ -1169,6 +1175,18 @@ void MBSlave::help_print( int argc, const char* const* argv )
cout << " Настройки протокола TCP: " << endl; cout << " Настройки протокола TCP: " << endl;
cout << "--prefix-inet-addr [xxx.xxx.xxx.xxx | hostname ] - this modbus server address" << endl; cout << "--prefix-inet-addr [xxx.xxx.xxx.xxx | hostname ] - this modbus server address" << endl;
cout << "--prefix-inet-port num - this modbus server port. Default: 502" << endl; cout << "--prefix-inet-port num - this modbus server port. Default: 502" << endl;
cout << endl;
cout << " Logs: " << endl;
cout << "--prefix-log-... - log control" << endl;
cout << " add-levels ... " << endl;
cout << " del-levels ... " << endl;
cout << " set-levels ... " << endl;
cout << " logfile filanme " << endl;
cout << " no-debug " << endl;
cout << " LogServer: " << endl;
cout << "--prefix-run-logserver - run logserver. Default: localhost:id" << endl;
cout << "--prefix-logserver-host ip - listen ip. Default: localhost" << endl;
cout << "--prefix-logserver-port num - listen port. Default: ID" << endl;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
std::shared_ptr<MBSlave> MBSlave::init_mbslave( int argc, const char* const* argv, UniSetTypes::ObjectId icID, std::shared_ptr<MBSlave> MBSlave::init_mbslave( int argc, const char* const* argv, UniSetTypes::ObjectId icID,
...@@ -1237,7 +1255,7 @@ std::ostream& operator<<( std::ostream& os, MBSlave::IOProperty& p ) ...@@ -1237,7 +1255,7 @@ std::ostream& operator<<( std::ostream& os, MBSlave::IOProperty& p )
ModbusRTU::mbErrCode MBSlave::readOutputRegisters( ModbusRTU::ReadOutputMessage& query, ModbusRTU::mbErrCode MBSlave::readOutputRegisters( ModbusRTU::ReadOutputMessage& query,
ModbusRTU::ReadOutputRetMessage& reply ) ModbusRTU::ReadOutputRetMessage& reply )
{ {
dinfo << myname << "(readOutputRegisters): " << query << endl; mbinfo << myname << "(readOutputRegisters): " << query << endl;
if( query.count <= 1 ) if( query.count <= 1 )
{ {
...@@ -1268,7 +1286,7 @@ ModbusRTU::mbErrCode MBSlave::readOutputRegisters( ModbusRTU::ReadOutputMessage& ...@@ -1268,7 +1286,7 @@ ModbusRTU::mbErrCode MBSlave::readOutputRegisters( ModbusRTU::ReadOutputMessage&
ModbusRTU::mbErrCode MBSlave::writeOutputRegisters( ModbusRTU::WriteOutputMessage& query, ModbusRTU::mbErrCode MBSlave::writeOutputRegisters( ModbusRTU::WriteOutputMessage& query,
ModbusRTU::WriteOutputRetMessage& reply ) ModbusRTU::WriteOutputRetMessage& reply )
{ {
dinfo << myname << "(writeOutputRegisters): " << query << endl; mbinfo << myname << "(writeOutputRegisters): " << query << endl;
// Формирование ответа: // Формирование ответа:
int fn = getOptimizeWriteFunction(query.func); int fn = getOptimizeWriteFunction(query.func);
...@@ -1283,7 +1301,7 @@ ModbusRTU::mbErrCode MBSlave::writeOutputRegisters( ModbusRTU::WriteOutputMessag ...@@ -1283,7 +1301,7 @@ ModbusRTU::mbErrCode MBSlave::writeOutputRegisters( ModbusRTU::WriteOutputMessag
ModbusRTU::mbErrCode MBSlave::writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query, ModbusRTU::mbErrCode MBSlave::writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query,
ModbusRTU::WriteSingleOutputRetMessage& reply ) ModbusRTU::WriteSingleOutputRetMessage& reply )
{ {
dinfo << myname << "(writeOutputSingleRegisters): " << query << endl; mbinfo << myname << "(writeOutputSingleRegisters): " << query << endl;
int fn = getOptimizeWriteFunction(query.func); int fn = getOptimizeWriteFunction(query.func);
ModbusRTU::mbErrCode ret = real_write(query.start, query.data, fn); ModbusRTU::mbErrCode ret = real_write(query.start, query.data, fn);
...@@ -1297,8 +1315,8 @@ ModbusRTU::mbErrCode MBSlave::writeOutputSingleRegister( ModbusRTU::WriteSingleO ...@@ -1297,8 +1315,8 @@ ModbusRTU::mbErrCode MBSlave::writeOutputSingleRegister( ModbusRTU::WriteSingleO
ModbusRTU::mbErrCode MBSlave::much_real_write( const ModbusRTU::ModbusData reg, ModbusRTU::ModbusData* dat, ModbusRTU::mbErrCode MBSlave::much_real_write( const ModbusRTU::ModbusData reg, ModbusRTU::ModbusData* dat,
int count, const int fn ) int count, const int fn )
{ {
dinfo << myname << "(much_real_write): write mbID=" mbinfo << myname << "(much_real_write): write mbID="
<< ModbusRTU::dat2str(reg) << "(" << (int)reg << ")" << " count=" << count << " fn=" << fn << endl; << ModbusRTU::dat2str(reg) << "(" << (int)reg << ")" << " count=" << count << " fn=" << fn << endl;
int i = 0; int i = 0;
auto it = iomap.end(); auto it = iomap.end();
...@@ -1367,10 +1385,10 @@ ModbusRTU::mbErrCode MBSlave::real_write( const ModbusRTU::ModbusData reg, Modbu ...@@ -1367,10 +1385,10 @@ ModbusRTU::mbErrCode MBSlave::real_write( const ModbusRTU::ModbusData reg, Modbu
{ {
ModbusRTU::ModbusData mbval = dat[i]; ModbusRTU::ModbusData mbval = dat[i];
dinfo << myname << "(write): save mbID=" mbinfo << myname << "(write): save mbID="
<< ModbusRTU::dat2str(reg) << ModbusRTU::dat2str(reg)
<< " data=" << ModbusRTU::dat2str(mbval) << " data=" << ModbusRTU::dat2str(mbval)
<< "(" << (int)mbval << ")" << endl; << "(" << (int)mbval << ")" << endl;
ModbusRTU::RegID regID = checkMBFunc ? genRegID(reg, fn) : genRegID(reg, default_mbfunc); ModbusRTU::RegID regID = checkMBFunc ? genRegID(reg, fn) : genRegID(reg, default_mbfunc);
...@@ -1393,8 +1411,8 @@ ModbusRTU::mbErrCode MBSlave::real_write_it( IOMap::iterator& it, ModbusRTU::Mod ...@@ -1393,8 +1411,8 @@ ModbusRTU::mbErrCode MBSlave::real_write_it( IOMap::iterator& it, ModbusRTU::Mod
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusRTU::mbErrCode MBSlave::real_bitreg_write_it( std::shared_ptr<BitRegProperty>& bp, const ModbusRTU::ModbusData val ) ModbusRTU::mbErrCode MBSlave::real_bitreg_write_it( std::shared_ptr<BitRegProperty>& bp, const ModbusRTU::ModbusData val )
{ {
dinfo << myname << "(real_bitreg_write_it): write mbID=" mbinfo << myname << "(real_bitreg_write_it): write mbID="
<< ModbusRTU::dat2str(bp->mbreg) << "(" << (int)bp->mbreg << ") val=" << val << endl; << ModbusRTU::dat2str(bp->mbreg) << "(" << (int)bp->mbreg << ") val=" << val << endl;
ModbusRTU::DataBits16 d(val); ModbusRTU::DataBits16 d(val);
...@@ -1407,8 +1425,8 @@ ModbusRTU::mbErrCode MBSlave::real_bitreg_write_it( std::shared_ptr<BitRegProper ...@@ -1407,8 +1425,8 @@ ModbusRTU::mbErrCode MBSlave::real_bitreg_write_it( std::shared_ptr<BitRegProper
ModbusRTU::ModbusData dat[] = {d[i]}; ModbusRTU::ModbusData dat[] = {d[i]};
dinfo << myname << "(real_bitreg_write_it): set " << ModbusRTU::dat2str(bp->mbreg) << "(" << (int)bp->mbreg << ")" mbinfo << myname << "(real_bitreg_write_it): set " << ModbusRTU::dat2str(bp->mbreg) << "(" << (int)bp->mbreg << ")"
<< " bit[" << i << "]=" << (int)dat[0] << " sid=" << p->si.id << endl; << " bit[" << i << "]=" << (int)dat[0] << " sid=" << p->si.id << endl;
int k = 0; int k = 0;
real_write_prop(p, dat, k, 1); real_write_prop(p, dat, k, 1);
...@@ -1421,7 +1439,7 @@ ModbusRTU::mbErrCode MBSlave::real_write_prop( IOProperty* p, ModbusRTU::ModbusD ...@@ -1421,7 +1439,7 @@ ModbusRTU::mbErrCode MBSlave::real_write_prop( IOProperty* p, ModbusRTU::ModbusD
{ {
ModbusRTU::ModbusData mbval = dat[i]; ModbusRTU::ModbusData mbval = dat[i];
dinfo << myname << "(real_write_prop): val=" << mbval << " " << (*p) << endl; mbinfo << myname << "(real_write_prop): val=" << mbval << " " << (*p) << endl;
try try
{ {
...@@ -1598,29 +1616,29 @@ ModbusRTU::mbErrCode MBSlave::real_write_prop( IOProperty* p, ModbusRTU::ModbusD ...@@ -1598,29 +1616,29 @@ ModbusRTU::mbErrCode MBSlave::real_write_prop( IOProperty* p, ModbusRTU::ModbusD
} }
catch( UniSetTypes::NameNotFound& ex ) catch( UniSetTypes::NameNotFound& ex )
{ {
dwarn << myname << "(write): " << ex << endl; mbwarn << myname << "(write): " << ex << endl;
return ModbusRTU::erBadDataAddress; return ModbusRTU::erBadDataAddress;
} }
catch( UniSetTypes::OutOfRange& ex ) catch( UniSetTypes::OutOfRange& ex )
{ {
dwarn << myname << "(write): " << ex << endl; mbwarn << myname << "(write): " << ex << endl;
return ModbusRTU::erBadDataValue; return ModbusRTU::erBadDataValue;
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
if( pingOK ) if( pingOK )
dcrit << myname << "(write): " << ex << endl; mbcrit << myname << "(write): " << ex << endl;
} }
catch( const CORBA::SystemException& ex ) catch( const CORBA::SystemException& ex )
{ {
if( pingOK ) if( pingOK )
dcrit << myname << "(write): СORBA::SystemException: " mbcrit << myname << "(write): СORBA::SystemException: "
<< ex.NP_minorString() << endl; << ex.NP_minorString() << endl;
} }
catch(...) catch(...)
{ {
if( pingOK ) if( pingOK )
dcrit << myname << "(write) catch ..." << endl; mbcrit << myname << "(write) catch ..." << endl;
} }
pingOK = false; pingOK = false;
...@@ -1630,9 +1648,9 @@ ModbusRTU::mbErrCode MBSlave::real_write_prop( IOProperty* p, ModbusRTU::ModbusD ...@@ -1630,9 +1648,9 @@ ModbusRTU::mbErrCode MBSlave::real_write_prop( IOProperty* p, ModbusRTU::ModbusD
ModbusRTU::mbErrCode MBSlave::much_real_read( const ModbusRTU::ModbusData reg, ModbusRTU::ModbusData* dat, ModbusRTU::mbErrCode MBSlave::much_real_read( const ModbusRTU::ModbusData reg, ModbusRTU::ModbusData* dat,
int count, const int fn ) int count, const int fn )
{ {
dinfo << myname << "(much_real_read): read mbID=" mbinfo << myname << "(much_real_read): read mbID="
<< ModbusRTU::dat2str(reg) << "(" << (int)reg << ") " << " count=" << count << ModbusRTU::dat2str(reg) << "(" << (int)reg << ") " << " count=" << count
<< " mbfunc=" << fn << endl; << " mbfunc=" << fn << endl;
auto it = iomap.end(); auto it = iomap.end();
int i = 0; int i = 0;
...@@ -1689,12 +1707,12 @@ ModbusRTU::mbErrCode MBSlave::real_read( const ModbusRTU::ModbusData reg, Modbus ...@@ -1689,12 +1707,12 @@ ModbusRTU::mbErrCode MBSlave::real_read( const ModbusRTU::ModbusData reg, Modbus
{ {
ModbusRTU::RegID regID = checkMBFunc ? genRegID(reg, fn) : genRegID(reg, default_mbfunc); ModbusRTU::RegID regID = checkMBFunc ? genRegID(reg, fn) : genRegID(reg, default_mbfunc);
dinfo << myname << "(real_read): read mbID=" mbinfo << myname << "(real_read): read mbID="
<< ModbusRTU::dat2str(reg) << "(" << (int)reg << ")" << " fn=" << fn << ModbusRTU::dat2str(reg) << "(" << (int)reg << ")" << " fn=" << fn
<< " regID=" << regID << " regID=" << regID
<< " default_mbfunc=" << default_mbfunc << " default_mbfunc=" << default_mbfunc
<< " checkMBFunc=" << checkMBFunc << " checkMBFunc=" << checkMBFunc
<< endl; << endl;
auto it = iomap.find(regID); auto it = iomap.find(regID);
...@@ -1708,8 +1726,8 @@ ModbusRTU::mbErrCode MBSlave::real_read_it( IOMap::iterator& it, ModbusRTU::Modb ...@@ -1708,8 +1726,8 @@ ModbusRTU::mbErrCode MBSlave::real_read_it( IOMap::iterator& it, ModbusRTU::Modb
IOProperty* p(&it->second); IOProperty* p(&it->second);
dinfo << myname << "(real_read_it): read mbID=" mbinfo << myname << "(real_read_it): read mbID="
<< ModbusRTU::dat2str(p->mbreg) << "(" << (int)(p->mbreg) << ")" << endl; << ModbusRTU::dat2str(p->mbreg) << "(" << (int)(p->mbreg) << ")" << endl;
if( p->bitreg ) if( p->bitreg )
return real_bitreg_read_it(p->bitreg, val); return real_bitreg_read_it(p->bitreg, val);
...@@ -1719,8 +1737,8 @@ ModbusRTU::mbErrCode MBSlave::real_read_it( IOMap::iterator& it, ModbusRTU::Modb ...@@ -1719,8 +1737,8 @@ ModbusRTU::mbErrCode MBSlave::real_read_it( IOMap::iterator& it, ModbusRTU::Modb
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusRTU::mbErrCode MBSlave::real_bitreg_read_it( std::shared_ptr<BitRegProperty>& bp, ModbusRTU::ModbusData& val ) ModbusRTU::mbErrCode MBSlave::real_bitreg_read_it( std::shared_ptr<BitRegProperty>& bp, ModbusRTU::ModbusData& val )
{ {
dinfo << myname << "(real_bitreg_read_it): read mbID=" mbinfo << myname << "(real_bitreg_read_it): read mbID="
<< ModbusRTU::dat2str(bp->mbreg) << "(" << (int)bp->mbreg << ")" << endl; << ModbusRTU::dat2str(bp->mbreg) << "(" << (int)bp->mbreg << ")" << endl;
ModbusRTU::DataBits16 d; ModbusRTU::DataBits16 d;
...@@ -1849,29 +1867,29 @@ ModbusRTU::mbErrCode MBSlave::real_read_prop( IOProperty* p, ModbusRTU::ModbusDa ...@@ -1849,29 +1867,29 @@ ModbusRTU::mbErrCode MBSlave::real_read_prop( IOProperty* p, ModbusRTU::ModbusDa
} }
catch( UniSetTypes::NameNotFound& ex ) catch( UniSetTypes::NameNotFound& ex )
{ {
dwarn << myname << "(real_read_it): " << ex << endl; mbwarn << myname << "(real_read_it): " << ex << endl;
return ModbusRTU::erBadDataAddress; return ModbusRTU::erBadDataAddress;
} }
catch( UniSetTypes::OutOfRange& ex ) catch( UniSetTypes::OutOfRange& ex )
{ {
dwarn << myname << "(real_read_it): " << ex << endl; mbwarn << myname << "(real_read_it): " << ex << endl;
return ModbusRTU::erBadDataValue; return ModbusRTU::erBadDataValue;
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
if( pingOK ) if( pingOK )
dcrit << myname << "(real_read_it): " << ex << endl; mbcrit << myname << "(real_read_it): " << ex << endl;
} }
catch( const CORBA::SystemException& ex ) catch( const CORBA::SystemException& ex )
{ {
if( pingOK ) if( pingOK )
dcrit << myname << "(real_read_it): CORBA::SystemException: " mbcrit << myname << "(real_read_it): CORBA::SystemException: "
<< ex.NP_minorString() << endl; << ex.NP_minorString() << endl;
} }
catch(...) catch(...)
{ {
if( pingOK ) if( pingOK )
dcrit << myname << "(real_read_it) catch ..." << endl; mbcrit << myname << "(real_read_it) catch ..." << endl;
} }
pingOK = false; pingOK = false;
...@@ -1881,7 +1899,7 @@ ModbusRTU::mbErrCode MBSlave::real_read_prop( IOProperty* p, ModbusRTU::ModbusDa ...@@ -1881,7 +1899,7 @@ ModbusRTU::mbErrCode MBSlave::real_read_prop( IOProperty* p, ModbusRTU::ModbusDa
mbErrCode MBSlave::readInputRegisters( ReadInputMessage& query, ReadInputRetMessage& reply ) mbErrCode MBSlave::readInputRegisters( ReadInputMessage& query, ReadInputRetMessage& reply )
{ {
dinfo << myname << "(readInputRegisters): " << query << endl; mbinfo << myname << "(readInputRegisters): " << query << endl;
if( query.count <= 1 ) if( query.count <= 1 )
{ {
...@@ -1911,7 +1929,7 @@ mbErrCode MBSlave::readInputRegisters( ReadInputMessage& query, ReadInputRetMess ...@@ -1911,7 +1929,7 @@ mbErrCode MBSlave::readInputRegisters( ReadInputMessage& query, ReadInputRetMess
ModbusRTU::mbErrCode MBSlave::setDateTime( ModbusRTU::SetDateTimeMessage& query, ModbusRTU::mbErrCode MBSlave::setDateTime( ModbusRTU::SetDateTimeMessage& query,
ModbusRTU::SetDateTimeRetMessage& reply ) ModbusRTU::SetDateTimeRetMessage& reply )
{ {
return ModbusServer::replySetDateTime(query, reply, dlog()); return ModbusServer::replySetDateTime(query, reply, mblog);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusRTU::mbErrCode MBSlave::remoteService( ModbusRTU::RemoteServiceMessage& query, ModbusRTU::mbErrCode MBSlave::remoteService( ModbusRTU::RemoteServiceMessage& query,
...@@ -1924,7 +1942,7 @@ ModbusRTU::mbErrCode MBSlave::remoteService( ModbusRTU::RemoteServiceMessage& qu ...@@ -1924,7 +1942,7 @@ ModbusRTU::mbErrCode MBSlave::remoteService( ModbusRTU::RemoteServiceMessage& qu
ModbusRTU::mbErrCode MBSlave::fileTransfer( ModbusRTU::FileTransferMessage& query, ModbusRTU::mbErrCode MBSlave::fileTransfer( ModbusRTU::FileTransferMessage& query,
ModbusRTU::FileTransferRetMessage& reply ) ModbusRTU::FileTransferRetMessage& reply )
{ {
dinfo << myname << "(fileTransfer): " << query << endl; mbinfo << myname << "(fileTransfer): " << query << endl;
auto it = flist.find(query.numfile); auto it = flist.find(query.numfile);
...@@ -1932,13 +1950,13 @@ ModbusRTU::mbErrCode MBSlave::fileTransfer( ModbusRTU::FileTransferMessage& quer ...@@ -1932,13 +1950,13 @@ ModbusRTU::mbErrCode MBSlave::fileTransfer( ModbusRTU::FileTransferMessage& quer
return ModbusRTU::erBadDataValue; return ModbusRTU::erBadDataValue;
std::string fname(it->second); std::string fname(it->second);
return ModbusServer::replyFileTransfer( fname, query, reply, dlog() ); return ModbusServer::replyFileTransfer( fname, query, reply, mblog );
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusRTU::mbErrCode MBSlave::readCoilStatus( ReadCoilMessage& query, ModbusRTU::mbErrCode MBSlave::readCoilStatus( ReadCoilMessage& query,
ReadCoilRetMessage& reply ) ReadCoilRetMessage& reply )
{ {
dinfo << myname << "(readCoilStatus): " << query << endl; mbinfo << myname << "(readCoilStatus): " << query << endl;
try try
{ {
...@@ -1976,24 +1994,24 @@ ModbusRTU::mbErrCode MBSlave::readCoilStatus( ReadCoilMessage& query, ...@@ -1976,24 +1994,24 @@ ModbusRTU::mbErrCode MBSlave::readCoilStatus( ReadCoilMessage& query,
} }
catch( UniSetTypes::NameNotFound& ex ) catch( UniSetTypes::NameNotFound& ex )
{ {
dwarn << myname << "(readCoilStatus): " << ex << endl; mbwarn << myname << "(readCoilStatus): " << ex << endl;
return ModbusRTU::erBadDataAddress; return ModbusRTU::erBadDataAddress;
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
if( pingOK ) if( pingOK )
dcrit << myname << "(readCoilStatus): " << ex << endl; mbcrit << myname << "(readCoilStatus): " << ex << endl;
} }
catch( const CORBA::SystemException& ex ) catch( const CORBA::SystemException& ex )
{ {
if( pingOK ) if( pingOK )
dcrit << myname << "(readCoilStatus): СORBA::SystemException: " mbcrit << myname << "(readCoilStatus): СORBA::SystemException: "
<< ex.NP_minorString() << endl; << ex.NP_minorString() << endl;
} }
catch(...) catch(...)
{ {
if( pingOK ) if( pingOK )
dcrit << myname << "(readCoilStatus): catch ..." << endl; mbcrit << myname << "(readCoilStatus): catch ..." << endl;
} }
pingOK = false; pingOK = false;
...@@ -2003,7 +2021,7 @@ ModbusRTU::mbErrCode MBSlave::readCoilStatus( ReadCoilMessage& query, ...@@ -2003,7 +2021,7 @@ ModbusRTU::mbErrCode MBSlave::readCoilStatus( ReadCoilMessage& query,
ModbusRTU::mbErrCode MBSlave::readInputStatus( ReadInputStatusMessage& query, ModbusRTU::mbErrCode MBSlave::readInputStatus( ReadInputStatusMessage& query,
ReadInputStatusRetMessage& reply ) ReadInputStatusRetMessage& reply )
{ {
dinfo << myname << "(readInputStatus): " << query << endl; mbinfo << myname << "(readInputStatus): " << query << endl;
try try
{ {
...@@ -2041,24 +2059,24 @@ ModbusRTU::mbErrCode MBSlave::readInputStatus( ReadInputStatusMessage& query, ...@@ -2041,24 +2059,24 @@ ModbusRTU::mbErrCode MBSlave::readInputStatus( ReadInputStatusMessage& query,
} }
catch( UniSetTypes::NameNotFound& ex ) catch( UniSetTypes::NameNotFound& ex )
{ {
dwarn << myname << "(readInputStatus): " << ex << endl; mbwarn << myname << "(readInputStatus): " << ex << endl;
return ModbusRTU::erBadDataAddress; return ModbusRTU::erBadDataAddress;
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
if( pingOK ) if( pingOK )
dcrit << myname << "(readInputStatus): " << ex << endl; mbcrit << myname << "(readInputStatus): " << ex << endl;
} }
catch( const CORBA::SystemException& ex ) catch( const CORBA::SystemException& ex )
{ {
if( pingOK ) if( pingOK )
dcrit << myname << "(readInputStatus): СORBA::SystemException: " mbcrit << myname << "(readInputStatus): СORBA::SystemException: "
<< ex.NP_minorString() << endl; << ex.NP_minorString() << endl;
} }
catch(...) catch(...)
{ {
if( pingOK ) if( pingOK )
dcrit << myname << "(readInputStatus): catch ..." << endl; mbcrit << myname << "(readInputStatus): catch ..." << endl;
} }
pingOK = false; pingOK = false;
...@@ -2068,7 +2086,7 @@ ModbusRTU::mbErrCode MBSlave::readInputStatus( ReadInputStatusMessage& query, ...@@ -2068,7 +2086,7 @@ ModbusRTU::mbErrCode MBSlave::readInputStatus( ReadInputStatusMessage& query,
ModbusRTU::mbErrCode MBSlave::forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query, ModbusRTU::mbErrCode MBSlave::forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query,
ModbusRTU::ForceCoilsRetMessage& reply ) ModbusRTU::ForceCoilsRetMessage& reply )
{ {
dinfo << myname << "(forceMultipleCoils): " << query << endl; mbinfo << myname << "(forceMultipleCoils): " << query << endl;
ModbusRTU::mbErrCode ret = ModbusRTU::erNoError; ModbusRTU::mbErrCode ret = ModbusRTU::erNoError;
int nbit = 0; int nbit = 0;
...@@ -2097,7 +2115,7 @@ ModbusRTU::mbErrCode MBSlave::forceMultipleCoils( ModbusRTU::ForceCoilsMessage& ...@@ -2097,7 +2115,7 @@ ModbusRTU::mbErrCode MBSlave::forceMultipleCoils( ModbusRTU::ForceCoilsMessage&
ModbusRTU::mbErrCode MBSlave::forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query, ModbusRTU::mbErrCode MBSlave::forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query,
ModbusRTU::ForceSingleCoilRetMessage& reply ) ModbusRTU::ForceSingleCoilRetMessage& reply )
{ {
dinfo << myname << "(forceSingleCoil): " << query << endl; mbinfo << myname << "(forceSingleCoil): " << query << endl;
int fn = getOptimizeWriteFunction(query.func); int fn = getOptimizeWriteFunction(query.func);
ModbusRTU::mbErrCode ret = real_write(query.start, (query.cmd() ? 1 : 0), fn ); ModbusRTU::mbErrCode ret = real_write(query.start, (query.cmd() ? 1 : 0), fn );
...@@ -2154,7 +2172,7 @@ ModbusRTU::mbErrCode MBSlave::diagnostics( ModbusRTU::DiagnosticMessage& query, ...@@ -2154,7 +2172,7 @@ ModbusRTU::mbErrCode MBSlave::diagnostics( ModbusRTU::DiagnosticMessage& query,
ModbusRTU::mbErrCode MBSlave::read4314( ModbusRTU::MEIMessageRDI& query, ModbusRTU::mbErrCode MBSlave::read4314( ModbusRTU::MEIMessageRDI& query,
ModbusRTU::MEIMessageRetRDI& reply ) ModbusRTU::MEIMessageRetRDI& reply )
{ {
dinfo << "(read4314): " << query << endl; mbinfo << "(read4314): " << query << endl;
// if( query.devID <= rdevMinNum || query.devID >= rdevMaxNum ) // if( query.devID <= rdevMinNum || query.devID >= rdevMaxNum )
// return erOperationFailed; // return erOperationFailed;
......
...@@ -19,6 +19,9 @@ ...@@ -19,6 +19,9 @@
#include "IOBase.h" #include "IOBase.h"
#include "VTypes.h" #include "VTypes.h"
#include "ThreadCreator.h" #include "ThreadCreator.h"
#include "LogAgregator.h"
#include "LogServer.h"
#include "modbus/MBLogSugar.h"
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
/*! /*!
\page page_ModbusSlave Реализация Modbus slave \page page_ModbusSlave Реализация Modbus slave
...@@ -511,6 +514,11 @@ class MBSlave: ...@@ -511,6 +514,11 @@ class MBSlave:
typedef std::unordered_map<int, MEIObjIDMap> MEIDevIDMap; typedef std::unordered_map<int, MEIObjIDMap> MEIDevIDMap;
MEIDevIDMap meidev; MEIDevIDMap meidev;
std::shared_ptr<DebugStream> mblog;
std::shared_ptr<LogServer> logserv;
std::string logserv_host = {""};
int logserv_port = {0};
}; };
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#endif // _MBSlave_H_ #endif // _MBSlave_H_
......
...@@ -55,7 +55,7 @@ MBTCPMultiSlave::MBTCPMultiSlave( UniSetTypes::ObjectId objId, UniSetTypes::Obje ...@@ -55,7 +55,7 @@ MBTCPMultiSlave::MBTCPMultiSlave( UniSetTypes::ObjectId objId, UniSetTypes::Obje
{ {
ostringstream err; ostringstream err;
err << myname << "(init): Unknown ip=''"; err << myname << "(init): Unknown ip=''";
dcrit << err.str() << endl; mbcrit << err.str() << endl;
throw SystemError(err.str()); throw SystemError(err.str());
} }
...@@ -71,7 +71,7 @@ MBTCPMultiSlave::MBTCPMultiSlave( UniSetTypes::ObjectId objId, UniSetTypes::Obje ...@@ -71,7 +71,7 @@ MBTCPMultiSlave::MBTCPMultiSlave( UniSetTypes::ObjectId objId, UniSetTypes::Obje
{ {
ostringstream err; ostringstream err;
err << myname << "(init): Not found sensor ID for " << cit.getProp("respond"); err << myname << "(init): Not found sensor ID for " << cit.getProp("respond");
dcrit << err.str() << endl; mbcrit << err.str() << endl;
throw SystemError(err.str()); throw SystemError(err.str());
} }
} }
...@@ -84,7 +84,7 @@ MBTCPMultiSlave::MBTCPMultiSlave( UniSetTypes::ObjectId objId, UniSetTypes::Obje ...@@ -84,7 +84,7 @@ MBTCPMultiSlave::MBTCPMultiSlave( UniSetTypes::ObjectId objId, UniSetTypes::Obje
{ {
ostringstream err; ostringstream err;
err << myname << "(init): Not found sensor ID for " << cit.getProp("askcount"); err << myname << "(init): Not found sensor ID for " << cit.getProp("askcount");
dcrit << err.str() << endl; mbcrit << err.str() << endl;
throw SystemError(err.str()); throw SystemError(err.str());
} }
} }
...@@ -98,7 +98,7 @@ MBTCPMultiSlave::MBTCPMultiSlave( UniSetTypes::ObjectId objId, UniSetTypes::Obje ...@@ -98,7 +98,7 @@ MBTCPMultiSlave::MBTCPMultiSlave( UniSetTypes::ObjectId objId, UniSetTypes::Obje
} }
cmap[c.iaddr] = c; cmap[c.iaddr] = c;
dinfo << myname << "(init): add client: " << c.iaddr << " respond=" << c.respond_s << " askcount=" << c.askcount_s << endl; mbinfo << myname << "(init): add client: " << c.iaddr << " respond=" << c.respond_s << " askcount=" << c.askcount_s << endl;
} }
} }
} }
...@@ -150,20 +150,20 @@ void MBTCPMultiSlave::execute_tcp() ...@@ -150,20 +150,20 @@ void MBTCPMultiSlave::execute_tcp()
if( !sslot ) if( !sslot )
{ {
dcrit << myname << "(execute_tcp): DYNAMIC CAST ERROR (mbslot --> ModbusTCPServerSlot)" << std::endl; mbcrit << myname << "(execute_tcp): DYNAMIC CAST ERROR (mbslot --> ModbusTCPServerSlot)" << std::endl;
raise(SIGTERM); raise(SIGTERM);
return; return;
} }
if( dlog()->is_level9() ) if( mblog->is_level9() )
sslot->setLog(dlog()); sslot->setLog(mblog);
for( auto&& i : cmap ) for( auto && i : cmap )
i.second.ptTimeout.reset(); i.second.ptTimeout.reset();
sslot->setMaxSessions( sessMaxNum ); sslot->setMaxSessions( sessMaxNum );
dinfo << myname << "(execute_tcp): thread running.." << endl; mbinfo << myname << "(execute_tcp): thread running.." << endl;
while( !cancelled ) while( !cancelled )
{ {
...@@ -175,7 +175,7 @@ void MBTCPMultiSlave::execute_tcp() ...@@ -175,7 +175,7 @@ void MBTCPMultiSlave::execute_tcp()
sess.clear(); sess.clear();
sslot->getSessions(sess); sslot->getSessions(sess);
for( auto&& s : sess ) for( auto && s : sess )
{ {
auto i = cmap.find( s.iaddr ); auto i = cmap.find( s.iaddr );
...@@ -196,7 +196,7 @@ void MBTCPMultiSlave::execute_tcp() ...@@ -196,7 +196,7 @@ void MBTCPMultiSlave::execute_tcp()
{ {
auto c = it.second; auto c = it.second;
dlog4 << myname << "(work): " << c.iaddr << " resp=" << (c.invert ? c.ptTimeout.checkTime() : !c.ptTimeout.checkTime()) mblog4 << myname << "(work): " << c.iaddr << " resp=" << (c.invert ? c.ptTimeout.checkTime() : !c.ptTimeout.checkTime())
<< " askcount=" << c.askCount << " askcount=" << c.askCount
<< endl; << endl;
...@@ -210,7 +210,7 @@ void MBTCPMultiSlave::execute_tcp() ...@@ -210,7 +210,7 @@ void MBTCPMultiSlave::execute_tcp()
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
dcrit << myname << "(execute_tcp): " << ex << std::endl; mbcrit << myname << "(execute_tcp): " << ex << std::endl;
} }
} }
...@@ -222,7 +222,7 @@ void MBTCPMultiSlave::execute_tcp() ...@@ -222,7 +222,7 @@ void MBTCPMultiSlave::execute_tcp()
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
dcrit << myname << "(execute_tcp): " << ex << std::endl; mbcrit << myname << "(execute_tcp): " << ex << std::endl;
} }
} }
} }
...@@ -245,7 +245,7 @@ void MBTCPMultiSlave::execute_tcp() ...@@ -245,7 +245,7 @@ void MBTCPMultiSlave::execute_tcp()
prev = res; prev = res;
if( res != ModbusRTU::erNoError && res != ModbusRTU::erTimeOut ) if( res != ModbusRTU::erNoError && res != ModbusRTU::erTimeOut )
dlog[Debug::WARN] << myname << "(execute_tcp): " << ModbusRTU::mbErr2Str(res) << endl; mblog[Debug::WARN] << myname << "(execute_tcp): " << ModbusRTU::mbErr2Str(res) << endl;
#endif #endif
...@@ -261,7 +261,7 @@ void MBTCPMultiSlave::execute_tcp() ...@@ -261,7 +261,7 @@ void MBTCPMultiSlave::execute_tcp()
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
dcrit << myname << "(execute_tcp): (hb) " << ex << std::endl; mbcrit << myname << "(execute_tcp): (hb) " << ex << std::endl;
} }
} }
...@@ -278,7 +278,7 @@ void MBTCPMultiSlave::execute_tcp() ...@@ -278,7 +278,7 @@ void MBTCPMultiSlave::execute_tcp()
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
dcrit << myname << "(execute_rtu): (respond) " << ex << std::endl; mbcrit << myname << "(execute_rtu): (respond) " << ex << std::endl;
} }
} }
...@@ -290,7 +290,7 @@ void MBTCPMultiSlave::execute_tcp() ...@@ -290,7 +290,7 @@ void MBTCPMultiSlave::execute_tcp()
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
dcrit << myname << "(execute_rtu): (askCount) " << ex << std::endl; mbcrit << myname << "(execute_rtu): (askCount) " << ex << std::endl;
} }
} }
...@@ -302,14 +302,14 @@ void MBTCPMultiSlave::execute_tcp() ...@@ -302,14 +302,14 @@ void MBTCPMultiSlave::execute_tcp()
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
dcrit << myname << "(execute_rtu): (sessCount) " << ex << std::endl; mbcrit << myname << "(execute_rtu): (sessCount) " << ex << std::endl;
} }
} }
} }
catch(...) {} catch(...) {}
} }
dinfo << myname << "(execute_tcp): thread stopped.." << endl; mbinfo << myname << "(execute_tcp): thread stopped.." << endl;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void MBTCPMultiSlave::initIterators() void MBTCPMultiSlave::initIterators()
...@@ -318,7 +318,7 @@ void MBTCPMultiSlave::initIterators() ...@@ -318,7 +318,7 @@ void MBTCPMultiSlave::initIterators()
shm->initIterator(sesscount_it); shm->initIterator(sesscount_it);
for( auto&& i : cmap ) for( auto && i : cmap )
i.second.initIterators(shm); i.second.initIterators(shm);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
......
...@@ -21,7 +21,7 @@ int main(int argc, const char** argv) ...@@ -21,7 +21,7 @@ int main(int argc, const char** argv)
{ {
cout << "--smemory-id objectName - SharedMemory objectID. Default: autodetect" << endl; cout << "--smemory-id objectName - SharedMemory objectID. Default: autodetect" << endl;
cout << "--confile filename - configuration file. Default: configure.xml" << endl; cout << "--confile filename - configuration file. Default: configure.xml" << endl;
cout << "--mbs-logfile filename - logfilename. Default: mbslave.log" << endl; cout << "--mbs-logfile filename - logfilename" << endl;
cout << endl; cout << endl;
MBSlave::help_print(argc, argv); MBSlave::help_print(argc, argv);
return 0; return 0;
...@@ -33,14 +33,14 @@ int main(int argc, const char** argv) ...@@ -33,14 +33,14 @@ int main(int argc, const char** argv)
string logfilename(conf->getArgParam("--mbs-logfile")); string logfilename(conf->getArgParam("--mbs-logfile"));
if( logfilename.empty() ) if( !logfilename.empty() )
logfilename = "mbslave.log"; {
std::ostringstream logname;
std::ostringstream logname; string dir(conf->getLogDir());
string dir(conf->getLogDir()); logname << dir << logfilename;
logname << dir << logfilename; ulog()->logFile( logname.str() );
ulog()->logFile( logname.str() ); dlog()->logFile( logname.str() );
dlog()->logFile( logname.str() ); }
ObjectId shmID = DefaultObjectId; ObjectId shmID = DefaultObjectId;
string sID = conf->getArgParam("--smemory-id"); string sID = conf->getArgParam("--smemory-id");
......
...@@ -21,7 +21,7 @@ int main(int argc, const char** argv) ...@@ -21,7 +21,7 @@ int main(int argc, const char** argv)
{ {
cout << "--smemory-id objectName - SharedMemory objectID. Default: autodetect" << endl; cout << "--smemory-id objectName - SharedMemory objectID. Default: autodetect" << endl;
cout << "--confile filename - configuration file. Default: configure.xml" << endl; cout << "--confile filename - configuration file. Default: configure.xml" << endl;
cout << "--mbs-logfile filename - logfilename. Default: mbslave.log" << endl; cout << "--mbs-logfile filename - logfilename" << endl;
cout << endl; cout << endl;
MBSlave::help_print(argc, argv); MBSlave::help_print(argc, argv);
return 0; return 0;
...@@ -33,14 +33,14 @@ int main(int argc, const char** argv) ...@@ -33,14 +33,14 @@ int main(int argc, const char** argv)
string logfilename(conf->getArgParam("--mbs-logfile")); string logfilename(conf->getArgParam("--mbs-logfile"));
if( logfilename.empty() ) if( !logfilename.empty() )
logfilename = "mbslave.log"; {
std::ostringstream logname;
std::ostringstream logname; string dir(conf->getLogDir());
string dir(conf->getLogDir()); logname << dir << logfilename;
logname << dir << logfilename; ulog()->logFile( logname.str() );
ulog()->logFile( logname.str() ); dlog()->logFile( logname.str() );
dlog()->logFile( logname.str() ); }
ObjectId shmID = DefaultObjectId; ObjectId shmID = DefaultObjectId;
string sID = conf->getArgParam("--smemory-id"); string sID = conf->getArgParam("--smemory-id");
......
#!/bin/sh #!/bin/sh
uniset2-start.sh -f ./uniset2-mbslave --confile test.xml --dlog-add-levels any \ uniset2-start.sh -f ./uniset2-mbslave --confile test.xml \
--smemory-id SharedMemory \ --smemory-id SharedMemory \
--mbs-name MBSlave1 \ --mbs-name MBSlave1 \
--mbs-type TCP --mbs-inet-addr 127.0.0.1 --mbs-inet-port 2048 --mbs-reg-from-id 1 --mbs-my-addr 0x01 \ --mbs-type TCP --mbs-inet-addr 127.0.0.1 --mbs-inet-port 2048 --mbs-reg-from-id 1 --mbs-my-addr 0x01 \
--mbs-askcount-id SVU_AskCount_AS --mbs-respond-id RespondRTU_S --mbs-respond-invert 1 --ulog-add-levels system $* --mbs-askcount-id SVU_AskCount_AS --mbs-respond-id RespondRTU_S --mbs-respond-invert 1 --ulog-add-levels system \
--mbs-log-add-levels any $*
# --mbs-force 1 # --mbs-force 1
#--mbs-reg-from-id 1 \ #--mbs-reg-from-id 1 \
#--mbs-filter-field CAN2sender --mbs-filter-value SYSTSNode \ #--mbs-filter-field CAN2sender --mbs-filter-value SYSTSNode \
\ No newline at end of file
#ifndef MBLogSugar_H_
#define MBLogSugar_H_
// "синтаксический сахар"..для логов
#ifndef mbinfo
#define mbinfo if( mblog->debugging(Debug::INFO) ) mblog->info()
#endif
#ifndef mbwarn
#define mbwarn if( mblog->debugging(Debug::WARN) ) mblog->warn()
#endif
#ifndef mbcrit
#define mbcrit if( mblog->debugging(Debug::CRIT) ) mblog->crit()
#endif
#ifndef mblog1
#define mblog1 if( mblog->debugging(Debug::LEVEL1) ) mblog->level1()
#endif
#ifndef mblog2
#define mblog2 if( mblog->debugging(Debug::LEVEL2) ) mblog->level2()
#endif
#ifndef mblog3
#define mblog3 if( mblog->debugging(Debug::LEVEL3) ) mblog->level3()
#endif
#ifndef mblog4
#define mblog4 if( mblog->debugging(Debug::LEVEL4) ) mblog->level4()
#endif
#ifndef mblog5
#define mblog5 if( mblog->debugging(Debug::LEVEL5) ) mblog->level5()
#endif
#ifndef mblog6
#define mblog6 if( mblog->debugging(Debug::LEVEL6) ) mblog->level6()
#endif
#ifndef mblog7
#define mblog7 if( mblog->debugging(Debug::LEVEL7) ) mblog->level7()
#endif
#ifndef mblog8
#define mblog8 if( mblog->debugging(Debug::LEVEL8) ) mblog->level8()
#endif
#ifndef mblog9
#define mblog9 if( mblog->debugging(Debug::LEVEL9) ) mblog->level9()
#endif
#ifndef mblogany
#define mblogany mblog->any()
#endif
#endif
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