Commit 9242dc0d authored by Pavel Vainerman's avatar Pavel Vainerman

(Modbus): добавил reinit_timeout - тамер на реинициализацию соединения

(для MultiMaster это таймер не переключение на другой канал).
parent a680352b
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
Name: libuniset2 Name: libuniset2
Version: 2.1 Version: 2.1
Release: alt17 Release: alt18
Summary: UniSet - library for building distributed industrial control systems Summary: UniSet - library for building distributed industrial control systems
...@@ -456,6 +456,9 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname ...@@ -456,6 +456,9 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
# .. # ..
%changelog %changelog
* Thu Aug 27 2015 Pavel Vainerman <pv@altlinux.ru> 2.1-alt18
- (ModbusExchange): add reinit_timeout timer..
* Fri Aug 21 2015 Pavel Vainerman <pv@altlinux.ru> 2.1-alt17 * Fri Aug 21 2015 Pavel Vainerman <pv@altlinux.ru> 2.1-alt17
- up build - up build
......
...@@ -96,6 +96,9 @@ MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId ...@@ -96,6 +96,9 @@ MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId
ptReopen.setTiming(tout); ptReopen.setTiming(tout);
vmonit(recv_timeout); vmonit(recv_timeout);
int reinit_tout = conf->getArgPInt("--" + prefix + "-reinit-timeout", it.getProp("reinit_timeout"), default_timeout);
ptInitChannel.setTiming(reinit_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);
vmonit(aftersend_pause); vmonit(aftersend_pause);
...@@ -316,7 +319,8 @@ void MBExchange::step() ...@@ -316,7 +319,8 @@ void MBExchange::step()
if( !checkProcActive() ) if( !checkProcActive() )
return; return;
updateRespondSensors(); if( ptInitChannel.checkTime() )
updateRespondSensors();
if( sidHeartBeat != DefaultObjectId && ptHeartBeat.checkTime() ) if( sidHeartBeat != DefaultObjectId && ptHeartBeat.checkTime() )
{ {
......
...@@ -366,6 +366,8 @@ class MBExchange: ...@@ -366,6 +366,8 @@ class MBExchange:
PassiveTimer ptReopen; /*!< таймер для переоткрытия соединения */ PassiveTimer ptReopen; /*!< таймер для переоткрытия соединения */
Trigger trReopen; Trigger trReopen;
PassiveTimer ptInitChannel; /*!< таймер не реинициализацию канала связи */
// т.к. пороговые датчики не связаны напрямую с обменом, создаём для них отдельный список // т.к. пороговые датчики не связаны напрямую с обменом, создаём для них отдельный список
// и отдельно его проверяем потом // и отдельно его проверяем потом
typedef std::list<IOBase> ThresholdList; typedef std::list<IOBase> ThresholdList;
......
...@@ -81,6 +81,7 @@ std::shared_ptr<ModbusClient> MBTCPMaster::initMB( bool reopen ) ...@@ -81,6 +81,7 @@ std::shared_ptr<ModbusClient> MBTCPMaster::initMB( bool reopen )
mbtcp.reset(); mbtcp.reset();
mb.reset(); mb.reset();
ptInitChannel.reset();
} }
try try
......
...@@ -69,6 +69,9 @@ ...@@ -69,6 +69,9 @@
(после этого идёт попытка реинициализировать соединение) (после этого идёт попытка реинициализировать соединение)
По умолчанию 5000 мсек. По умолчанию 5000 мсек.
\b --xxx-reinit-timeout или \b reinit_timeout msec - таймаут на реинициализацию канала связи (после потери связи)
По умолчанию timeout.
\b --xxx-no-query-optimization или \b no_query_optimization - [1|0] отключить оптимизацию запросов \b --xxx-no-query-optimization или \b no_query_optimization - [1|0] отключить оптимизацию запросов
Оптимизация заключается в том, что регистры идущие подряд автоматически запрашиваются/записываются одним запросом. Оптимизация заключается в том, что регистры идущие подряд автоматически запрашиваются/записываются одним запросом.
......
...@@ -171,6 +171,9 @@ MBTCPMultiMaster::~MBTCPMultiMaster() ...@@ -171,6 +171,9 @@ MBTCPMultiMaster::~MBTCPMultiMaster()
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
std::shared_ptr<ModbusClient> MBTCPMultiMaster::initMB( bool reopen ) std::shared_ptr<ModbusClient> MBTCPMultiMaster::initMB( bool reopen )
{ {
if( mb )
ptInitChannel.reset();
// просто движемся по кругу (т.к. связь не проверяется) // просто движемся по кругу (т.к. связь не проверяется)
// движемся в обратном порядке, т.к. сортировка по возрастанию приоритета // движемся в обратном порядке, т.к. сортировка по возрастанию приоритета
if( checktime <= 0 ) if( checktime <= 0 )
......
...@@ -87,6 +87,9 @@ ...@@ -87,6 +87,9 @@
(после этого идёт попытка реинициализировать соединение) (после этого идёт попытка реинициализировать соединение)
По умолчанию 5000 мсек. По умолчанию 5000 мсек.
\b --xxx-reinit-timeout или \b reinit_timeout msec - таймаут на реинициализацию канала связи (после потери связи)
По умолчанию timeout мсек.
\b --xxx-no-query-optimization или \b no_query_optimization - [1|0] отключить оптимизацию запросов \b --xxx-no-query-optimization или \b no_query_optimization - [1|0] отключить оптимизацию запросов
Оптимизация заключается в том, что регистры идущие подряд автоматически запрашиваются/записываются одним запросом. Оптимизация заключается в том, что регистры идущие подряд автоматически запрашиваются/записываются одним запросом.
......
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