Commit 6c6012c9 authored by Pavel Vainerman's avatar Pavel Vainerman

(MBSlave): добавил вывод в лог сообщения с ошибкой при неудачном запуске

процесса (не удалось открыть сокет например). setbug #10711
parent 571a1c02
...@@ -180,6 +180,11 @@ MBSlave::MBSlave(UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, const ...@@ -180,6 +180,11 @@ MBSlave::MBSlave(UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, const
ostringstream n; ostringstream n;
n << prefix << "-exchangelog"; n << prefix << "-exchangelog";
auto l = loga->create(n.str()); auto l = loga->create(n.str());
if( mblog->is_crit() )
l->addLevel(Debug::CRIT);
if( mblog->is_warn() )
l->addLevel(Debug::WARN);
rs->setLog(l); rs->setLog(l);
conf->initLogStream(l, prefix + "-exchangelog"); conf->initLogStream(l, prefix + "-exchangelog");
} }
...@@ -196,7 +201,6 @@ MBSlave::MBSlave(UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, const ...@@ -196,7 +201,6 @@ MBSlave::MBSlave(UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, const
ost::InetAddress ia(iaddr.c_str()); ost::InetAddress ia(iaddr.c_str());
tcpserver = make_shared<ModbusTCPServerSlot>(ia, port); tcpserver = make_shared<ModbusTCPServerSlot>(ia, port);
tcpserver->setAfterSendPause(aftersend_pause); tcpserver->setAfterSendPause(aftersend_pause);
tcpserver->setReplyTimeout(reply_tout); tcpserver->setReplyTimeout(reply_tout);
...@@ -208,6 +212,12 @@ MBSlave::MBSlave(UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, const ...@@ -208,6 +212,12 @@ MBSlave::MBSlave(UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, const
ostringstream n; ostringstream n;
n << prefix << "-exchangelog"; n << prefix << "-exchangelog";
auto l = loga->create(n.str()); auto l = loga->create(n.str());
if( mblog->is_crit() )
l->addLevel(Debug::CRIT);
if( mblog->is_warn() )
l->addLevel(Debug::WARN);
tcpserver->setLog(l); tcpserver->setLog(l);
conf->initLogStream(l, prefix + "-exchangelog"); conf->initLogStream(l, prefix + "-exchangelog");
...@@ -619,7 +629,42 @@ void MBSlave::execute_tcp() ...@@ -619,7 +629,42 @@ void MBSlave::execute_tcp()
tcpCancelled = false; tcpCancelled = false;
tcpserver->run( vaddr, true ); ost::Thread::setException(ost::Thread::throwException);
try
{
tcpserver->run( vaddr, true );
}
catch( ModbusRTU::mbException& ex )
{
mbcrit << myname << "(execute_tcp): catch excaption: "
<< tcpserver->getInetAddress()
<< ":" << tcpserver->getInetPort() << " err: " << ex << endl;
throw ex;
}
catch( const ost::Exception& e )
{
mbcrit << myname << "(execute_tcp): Can`t create socket "
<< tcpserver->getInetAddress()
<< ":" << tcpserver->getInetPort()
<< " err: " << e.getString() << endl;
throw e;
}
catch( const std::exception& e )
{
mbcrit << myname << "(execute_tcp): Can`t create socket "
<< tcpserver->getInetAddress()
<< ":" << tcpserver->getInetPort()
<< " err: " << e.what() << endl;
throw e;
}
catch(...)
{
mbcrit << myname << "(execute_tcp): catch exception ... ("
<< tcpserver->getInetAddress()
<< ":" << tcpserver->getInetPort()
<< endl;
throw;
}
// tcpCancelled = true; // tcpCancelled = true;
// mbinfo << myname << "(execute_tcp): tcpserver stopped.." << endl; // mbinfo << myname << "(execute_tcp): tcpserver stopped.." << endl;
...@@ -1948,7 +1993,7 @@ ModbusRTU::mbErrCode MBSlave::much_real_read(RegMap& rmap, const ModbusRTU::Modb ...@@ -1948,7 +1993,7 @@ ModbusRTU::mbErrCode MBSlave::much_real_read(RegMap& rmap, const ModbusRTU::Modb
int mbfunc = checkMBFunc ? fn : default_mbfunc; int mbfunc = checkMBFunc ? fn : default_mbfunc;
ModbusRTU::RegID regID = genRegID(reg, mbfunc); ModbusRTU::RegID regID = genRegID(reg, mbfunc);
// ищем регистр.. "пропуская дырки".. // ищем первый регистр из запроса... пропуская несуществующие..
// ведь запросить могут начиная с "несуществующего регистра" // ведь запросить могут начиная с "несуществующего регистра"
for( ; i < count; i++ ) for( ; i < count; i++ )
{ {
......
...@@ -90,6 +90,7 @@ bool ModbusTCPServer::isActive() const ...@@ -90,6 +90,7 @@ bool ModbusTCPServer::isActive() const
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void ModbusTCPServer::evprepare() void ModbusTCPServer::evprepare()
{ {
ost::Thread::setException(ost::Thread::throwException);
try try
{ {
sock = make_shared<UTCPSocket>(iaddr, port); sock = make_shared<UTCPSocket>(iaddr, port);
...@@ -97,7 +98,14 @@ void ModbusTCPServer::evprepare() ...@@ -97,7 +98,14 @@ void ModbusTCPServer::evprepare()
catch( const ost::SockException& ex ) catch( const ost::SockException& ex )
{ {
ostringstream err; ostringstream err;
err << "(ModbusTCPServer::mainLoop): connect " << iaddr << ":" << port << " err: " << ex.what(); err << "(ModbusTCPServer::evprepare): connect " << iaddr << ":" << port << " err: " << ex.what();
dlog->crit() << err.str() << endl;
throw SystemError(err.str());
}
catch( const std::exception& ex )
{
ostringstream err;
err << "(ModbusTCPServer::evprepare): connect " << iaddr << ":" << port << " err: " << ex.what();
dlog->crit() << err.str() << endl; dlog->crit() << err.str() << endl;
throw SystemError(err.str()); throw SystemError(err.str());
} }
......
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