Commit 82d01b3d authored by Pavel Vainerman's avatar Pavel Vainerman

(ModbusSlave): попытка все паузы в ожидании, отдавать eventloop

parent 1f715ac3
......@@ -14,7 +14,7 @@
Name: libuniset2
Version: 2.2
Release: alt31.2
Release: alt31.3
Summary: UniSet - library for building distributed industrial control systems
License: LGPL
......@@ -486,6 +486,9 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
# ..
%changelog
* Sun Apr 03 2016 Pavel Vainerman <pv@altlinux.ru> 2.2-alt31.3
- ModbusSlave: iowait optimization
* Thu Mar 31 2016 Pavel Vainerman <pv@etersoft.ru> 2.2-alt31.2
- test build
......
......@@ -2589,6 +2589,12 @@ UniSetTypes::SimpleInfo* MBSlave::getInfo( CORBA::Long userparam )
for( const auto& m : cmap )
inf << " " << m.second.getShortInfo() << endl;
{
uniset_mutex_lock l(sessMutex);
inf << "TCP sessions[" << sess.size() << "]:" << endl;
for( const auto& m : sess )
inf << " " << m.iaddr << " askCount=" << m.askCount << endl;
}
inf << endl;
}
......
......@@ -89,9 +89,9 @@ class ModbusServer
void setRecvTimeout( timeout_t msec );
/*! установить паузу при ожидании символа */
inline void setSleepPause( timeout_t usec )
inline void setSleepPause( timeout_t msec )
{
sleepPause_usec = usec;
sleepPause_msec = msec;
}
inline void setCRCNoCheckit( bool set )
......@@ -159,6 +159,9 @@ class ModbusServer
protected:
virtual void iowait( timeout_t usec );
/*! реализация получения очередного сообщения */
virtual ModbusRTU::mbErrCode realReceive( const std::unordered_set<ModbusRTU::ModbusAddr>& vaddr, timeout_t msecTimeout ) = 0;
......@@ -315,7 +318,7 @@ class ModbusServer
timeout_t recvTimeOut_ms; /*!< таймаут на приём */
timeout_t replyTimeout_ms; /*!< таймаут на формирование ответа */
timeout_t aftersend_msec; /*!< пауза после посылки ответа */
timeout_t sleepPause_usec; /*!< пауза между попытками чтения символа из канала */
timeout_t sleepPause_msec; /*!< пауза между попытками чтения символа из канала */
bool onBroadcast; /*!< включен режим работы с broadcst-сообщениями */
bool crcNoCheckit;
bool cleanBeforeSend;
......
......@@ -104,10 +104,11 @@ class ModbusTCPServer:
return tmTime;
}
void iowait( timeout_t msec ); // ожидание (при этом время отдаётся eventloop-у)
protected:
// ожидание (при этом время отдаётся eventloop-у)
virtual void iowait( timeout_t msec ) override;
// функция receive пока не поддерживается...
virtual ModbusRTU::mbErrCode realReceive( const std::unordered_set<ModbusRTU::ModbusAddr>& vaddr, timeout_t msecTimeout ) override;
......
......@@ -35,7 +35,7 @@ ModbusServer::ModbusServer():
recvTimeOut_ms(50),
replyTimeout_ms(2000),
aftersend_msec(0),
sleepPause_usec(100),
sleepPause_msec(10),
onBroadcast(false),
crcNoCheckit(false),
cleanBeforeSend(false)
......@@ -606,7 +606,7 @@ mbErrCode ModbusServer::recv( const std::unordered_set<ModbusRTU::ModbusAddr>& v
break;
}
usleep(sleepPause_usec);
iowait(sleepPause_msec);
}
if( !begin )
......@@ -1581,8 +1581,8 @@ void ModbusServer::initLog( UniSetTypes::Configuration* conf,
// -------------------------------------------------------------------------
void ModbusServer::printProcessingTime()
{
if( dlog->is_info() )
dlog->info() << "(processingTime): " << tmProcessing.getCurrent() << " [msec] (lim: " << tmProcessing.getInterval() << ")" << endl;
if( dlog->is_level9() )
dlog->level9() << "(processingTime): " << tmProcessing.getCurrent() << " [msec] (lim: " << tmProcessing.getInterval() << ")" << endl;
}
// -------------------------------------------------------------------------
ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string& fname,
......@@ -1693,6 +1693,11 @@ void ModbusServer::resetAskCounter()
askCount = 0;
}
// -------------------------------------------------------------------------
void ModbusServer::iowait( timeout_t msec )
{
msleep(msec);
}
// -------------------------------------------------------------------------
ModbusRTU::mbErrCode ModbusServer::replySetDateTime( ModbusRTU::SetDateTimeMessage& query,
ModbusRTU::SetDateTimeRetMessage& reply,
std::shared_ptr<DebugStream> dlog )
......@@ -1784,7 +1789,7 @@ mbErrCode ModbusServer::send( ModbusMessage& msg )
}
if( aftersend_msec > 0 )
msleep(aftersend_msec);
iowait(aftersend_msec);
return post_send_request(msg);
}
......
......@@ -255,7 +255,7 @@ void ModbusTCPServer::ioAccept(ev::io& watcher, int revents)
s->setAfterSendPause(aftersend_msec);
s->setReplyTimeout(replyTimeout_ms);
s->setRecvTimeout(recvTimeOut_ms);
s->setSleepPause(sleepPause_usec);
s->setSleepPause(sleepPause_msec);
s->setCleanBeforeSend(cleanBeforeSend);
s->setSessionTimeout( (double)sessTimeout / 1000. );
s->signal_post_receive().connect( sigc::mem_fun(this, &ModbusTCPServer::postReceiveEvent) );
......
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