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