Commit c5d199b4 authored by Pavel Vainerman's avatar Pavel Vainerman

ModbusMaster: рефакторинг: чистка от лишнего, неиспользуемого кода.

parent 2d4d7dd1
...@@ -28,8 +28,7 @@ MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId ...@@ -28,8 +28,7 @@ MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId
prefix(prefix), prefix(prefix),
poll_count(0), poll_count(0),
prop_prefix(""), prop_prefix(""),
mb(nullptr), mb(nullptr)
pollActivated(false)
{ {
if( objId == DefaultObjectId ) if( objId == DefaultObjectId )
throw UniSetTypes::SystemError("(MBExchange): objId=-1?!! Use --" + prefix + "-name" ); throw UniSetTypes::SystemError("(MBExchange): objId=-1?!! Use --" + prefix + "-name" );
...@@ -63,13 +62,9 @@ MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId ...@@ -63,13 +62,9 @@ MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId
recv_timeout = conf->getArgPInt("--" + prefix + "-recv-timeout", it.getProp("recv_timeout"), 500); recv_timeout = conf->getArgPInt("--" + prefix + "-recv-timeout", it.getProp("recv_timeout"), 500);
int tout = conf->getArgPInt("--" + prefix + "-timeout", it.getProp("timeout"), 5000); default_timeout = conf->getArgPInt("--" + prefix + "-timeout", it.getProp("timeout"), 5000);
// для совместимости со старым RTUExchange
// надо обратывать и all-timeout
tout = conf->getArgPInt("--" + prefix + "-all-timeout", it.getProp("all_timeout"), tout);
ptTimeout.setTiming(tout);
tout = conf->getArgPInt("--" + prefix + "-reopen-timeout", it.getProp("reopen_timeout"), 10000); int tout = conf->getArgPInt("--" + prefix + "-reopen-timeout", it.getProp("reopen_timeout"), default_timeout*2);
ptReopen.setTiming(tout); ptReopen.setTiming(tout);
aftersend_pause = conf->getArgPInt("--" + prefix + "-aftersend-pause", it.getProp("aftersend_pause"), 0); aftersend_pause = conf->getArgPInt("--" + prefix + "-aftersend-pause", it.getProp("aftersend_pause"), 0);
...@@ -2672,7 +2667,7 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM ...@@ -2672,7 +2667,7 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM
} }
dinfo << myname << "(initDeviceInfo): add addr=" << ModbusRTU::addr2str(a) << endl; dinfo << myname << "(initDeviceInfo): add addr=" << ModbusRTU::addr2str(a) << endl;
int tout = it.getPIntProp("timeout", ptTimeout.getInterval() ); int tout = it.getPIntProp("timeout", default_timeout );
d->second->resp_Delay.set(0, tout); // ставим время на отпускание.. см. checkRespond() d->second->resp_Delay.set(0, tout); // ставим время на отпускание.. см. checkRespond()
d->second->resp_invert = it.getIntProp("invert"); d->second->resp_invert = it.getIntProp("invert");
...@@ -2942,11 +2937,7 @@ bool MBExchange::poll() ...@@ -2942,11 +2937,7 @@ bool MBExchange::poll()
{ {
if( !mb ) if( !mb )
{ {
{ mb = initMB(false);
uniset_rwmutex_wrlock l(pollMutex);
pollActivated = false;
mb = initMB(false);
}
if( !checkProcActive() ) if( !checkProcActive() )
return false; return false;
...@@ -2956,12 +2947,6 @@ bool MBExchange::poll() ...@@ -2956,12 +2947,6 @@ bool MBExchange::poll()
return false; return false;
} }
{
uniset_rwmutex_wrlock l(pollMutex);
pollActivated = true;
ptTimeout.reset();
}
if( !allInitOK ) if( !allInitOK )
firstInitRegisters(); firstInitRegisters();
...@@ -2980,7 +2965,7 @@ bool MBExchange::poll() ...@@ -2980,7 +2965,7 @@ bool MBExchange::poll()
dlog3 << myname << "(poll): ask addr=" << ModbusRTU::addr2str(d->mbaddr) dlog3 << myname << "(poll): ask addr=" << ModbusRTU::addr2str(d->mbaddr)
<< " regs=" << d->regmap.size() << endl; << " regs=" << d->regmap.size() << endl;
int prev_numreply = d->numreply.load(); unsigned int prev_numreply = d->numreply.load();
for( auto it = d->regmap.begin(); it != d->regmap.end(); ++it ) for( auto it = d->regmap.begin(); it != d->regmap.end(); ++it )
{ {
...@@ -3031,11 +3016,6 @@ bool MBExchange::poll() ...@@ -3031,11 +3016,6 @@ bool MBExchange::poll()
poll_count = 0; poll_count = 0;
} }
{
uniset_rwmutex_wrlock l(pollMutex);
pollActivated = false;
}
if( !checkProcActive() ) if( !checkProcActive() )
return false; return false;
......
...@@ -331,9 +331,8 @@ class MBExchange: ...@@ -331,9 +331,8 @@ class MBExchange:
std::shared_ptr<ModbusClient> mb; std::shared_ptr<ModbusClient> mb;
// определение timeout для соединения // определение timeout для соединения
PassiveTimer ptTimeout; timeout_t recv_timeout;
bool pollActivated; timeout_t default_timeout;
int recv_timeout;
int aftersend_pause; int aftersend_pause;
......
...@@ -139,11 +139,6 @@ void MBTCPMaster::final_thread() ...@@ -139,11 +139,6 @@ void MBTCPMaster::final_thread()
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void MBTCPMaster::poll_thread() void MBTCPMaster::poll_thread()
{ {
{
uniset_rwmutex_wrlock l(pollMutex);
ptTimeout.reset();
}
// ждём начала работы..(см. MBExchange::activateObject) // ждём начала работы..(см. MBExchange::activateObject)
while( !checkProcActive() ) while( !checkProcActive() )
{ {
......
...@@ -137,7 +137,7 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob ...@@ -137,7 +137,7 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob
// Т.к. при "многоканальном" доступе к slave, смена канала должна происходит сразу после // Т.к. при "многоканальном" доступе к slave, смена канала должна происходит сразу после
// неудачной попытки запросов по одному из каналов, то ПЕРЕОПРЕДЕЛЯЕМ reopen, на timeout.. // неудачной попытки запросов по одному из каналов, то ПЕРЕОПРЕДЕЛЯЕМ reopen, на timeout..
ptReopen.setTiming(ptTimeout.getInterval()); ptReopen.setTiming(default_timeout);
if( dlog()->is_info() ) if( dlog()->is_info() )
printMap(rmap); printMap(rmap);
...@@ -315,11 +315,6 @@ void MBTCPMultiMaster::sysCommand( const UniSetTypes::SystemMessage* sm ) ...@@ -315,11 +315,6 @@ void MBTCPMultiMaster::sysCommand( const UniSetTypes::SystemMessage* sm )
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void MBTCPMultiMaster::poll_thread() void MBTCPMultiMaster::poll_thread()
{ {
{
uniset_rwmutex_wrlock l(pollMutex);
ptTimeout.reset();
}
// ждём начала работы..(см. MBExchange::activateObject) // ждём начала работы..(см. MBExchange::activateObject)
while( !checkProcActive() ) while( !checkProcActive() )
{ {
...@@ -407,6 +402,40 @@ void MBTCPMultiMaster::initIterators() ...@@ -407,6 +402,40 @@ void MBTCPMultiMaster::initIterators()
shm->initIterator(it.respond_it); shm->initIterator(it.respond_it);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void MBTCPMultiMaster::sigterm( int signo )
{
if( pollThread )
{
pollThread->stop();
if( pollThread->isRunning() )
pollThread->join();
}
if( checkThread )
{
checkThread->stop();
if( checkThread->isRunning() )
checkThread->join();
}
try
{
MBExchange::sigterm(signo);
}
catch( const std::exception& ex )
{
cerr << "catch: " << ex.what() << endl;
}
catch( ... )
{
std::exception_ptr p = std::current_exception();
std::clog << (p ? p.__cxa_exception_type()->name() : "null") << std::endl;
}
}
// -----------------------------------------------------------------------------
void MBTCPMultiMaster::help_print( int argc, const char* const* argv ) void MBTCPMultiMaster::help_print( int argc, const char* const* argv )
{ {
cout << "Default: prefix='mbtcp'" << endl; cout << "Default: prefix='mbtcp'" << endl;
......
...@@ -230,10 +230,13 @@ class MBTCPMultiMaster: ...@@ -230,10 +230,13 @@ class MBTCPMultiMaster:
virtual void sysCommand( const UniSetTypes::SystemMessage* sm ) override; virtual void sysCommand( const UniSetTypes::SystemMessage* sm ) override;
virtual void initIterators() override; virtual void initIterators() override;
virtual std::shared_ptr<ModbusClient> initMB( bool reopen = false ) override; virtual std::shared_ptr<ModbusClient> initMB( bool reopen = false ) override;
virtual void sigterm( int signo ) override;
void poll_thread(); void poll_thread();
void check_thread(); void check_thread();
void final_thread(); void final_thread();
UniSetTypes::uniset_rwmutex mbMutex; UniSetTypes::uniset_rwmutex mbMutex;
bool force_disconnect; bool force_disconnect;
int checktime; int checktime;
......
...@@ -180,11 +180,7 @@ bool RTUExchange::poll() ...@@ -180,11 +180,7 @@ bool RTUExchange::poll()
{ {
if( !mb ) if( !mb )
{ {
{ mb = initMB(false);
uniset_rwmutex_wrlock l(pollMutex);
pollActivated = false;
mb = initMB(false);
}
if( !checkProcActive() ) if( !checkProcActive() )
return false; return false;
...@@ -194,12 +190,6 @@ bool RTUExchange::poll() ...@@ -194,12 +190,6 @@ bool RTUExchange::poll()
return false; return false;
} }
{
uniset_rwmutex_wrlock l(pollMutex);
pollActivated = true;
ptTimeout.reset();
}
if( !allInitOK ) if( !allInitOK )
firstInitRegisters(); firstInitRegisters();
...@@ -222,7 +212,7 @@ bool RTUExchange::poll() ...@@ -222,7 +212,7 @@ bool RTUExchange::poll()
mbrtu->setSpeed(d->speed); mbrtu->setSpeed(d->speed);
} }
int prev_numreply = d->numreply; unsigned int prev_numreply = d->numreply;
if( d->dtype == MBExchange::dtRTU188 ) if( d->dtype == MBExchange::dtRTU188 )
{ {
......
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