Commit 233cdbe5 authored by Pavel Vainerman's avatar Pavel Vainerman

(ModbusMaster): добавил параметр --prefix-query-max-count позволяющий

задать максимальное количество регистров запрашиваемых в одном запросе.
parent d7edc77c
%def_enable docs %def_enable docs
%def_enable mysql %def_enable mysql
%def_enable sqlite %def_enable sqlite
%def_enable pgsql %def_disable pgsql
%def_enable python %def_enable python
%def_enable rrd %def_enable rrd
%def_enable io %def_enable io
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
Name: libuniset2 Name: libuniset2
Version: 2.1 Version: 2.1
Release: alt10 Release: alt11
Summary: UniSet - library for building distributed industrial control systems Summary: UniSet - library for building distributed industrial control systems
...@@ -456,6 +456,11 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname ...@@ -456,6 +456,11 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
# .. # ..
%changelog %changelog
* Tue Jul 21 2015 Pavel Vainerman <pv@altlinux.ru> 2.1-alt11
- minor fixes in uniset2-codegen
- ModbusMaster: add --prefix-query-max-count val - the maximum
number of requested registers in one query
* Fri Jul 03 2015 Pavel Vainerman <pv@altlinux.ru> 2.1-alt10 * Fri Jul 03 2015 Pavel Vainerman <pv@altlinux.ru> 2.1-alt10
- fixed bug in ModbusMultiMaster (setbug #7596) - fixed bug in ModbusMultiMaster (setbug #7596)
- enable pgsql interface - enable pgsql interface
......
...@@ -125,6 +125,7 @@ MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId ...@@ -125,6 +125,7 @@ MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId
vmonit(defaultMBaddr); vmonit(defaultMBaddr);
defaultMBinitOK = conf->getArgPInt("--" + prefix + "-default-mbinit-ok", it.getProp("default_mbinitOK"), 0); defaultMBinitOK = conf->getArgPInt("--" + prefix + "-default-mbinit-ok", it.getProp("default_mbinitOK"), 0);
maxQueryCount = conf->getArgPInt("--" + prefix + "-query-max-count", it.getProp("queryMaxCount"), ModbusRTU::MAXDATALEN);
vmonit(defaultMBinitOK); vmonit(defaultMBinitOK);
...@@ -241,6 +242,7 @@ void MBExchange::help_print( int argc, const char* const* argv ) ...@@ -241,6 +242,7 @@ void MBExchange::help_print( int argc, const char* const* argv )
cout << "--prefix-default-mbtype [rtu|rtu188|mtr] - У датчиков которых не задан 'mbtype' использовать данный. По умолчанию: 'rtu'" << endl; cout << "--prefix-default-mbtype [rtu|rtu188|mtr] - У датчиков которых не задан 'mbtype' использовать данный. По умолчанию: 'rtu'" << endl;
cout << "--prefix-default-mbadd addr - У датчиков которых не задан 'mbaddr' использовать данный. По умолчанию: ''" << endl; cout << "--prefix-default-mbadd addr - У датчиков которых не задан 'mbaddr' использовать данный. По умолчанию: ''" << endl;
cout << "--prefix-default-mbinit-ok 0,1 - Флаг инициализации. 1 - не ждать первого обмена с устройством, а сохранить при старте в SM значение 'default'" << endl; cout << "--prefix-default-mbinit-ok 0,1 - Флаг инициализации. 1 - не ждать первого обмена с устройством, а сохранить при старте в SM значение 'default'" << endl;
cout << "--prefix-query-max-count max - Максимальное количество запрашиваемых за один раз региистров (При условии no-query-optimization=0). По умолчанию: " << ModbusRTU::MAXDATALEN << "." << endl;
cout << endl; cout << endl;
cout << " Logs: " << endl; cout << " Logs: " << endl;
cout << "--prefix-log-... - log control" << endl; cout << "--prefix-log-... - log control" << endl;
...@@ -613,7 +615,7 @@ void MBExchange::rtuQueryOptimization( RTUDeviceMap& m ) ...@@ -613,7 +615,7 @@ void MBExchange::rtuQueryOptimization( RTUDeviceMap& m )
beg->second->q_count++; beg->second->q_count++;
if( beg->second->q_count >= ModbusRTU::MAXDATALEN ) if( beg->second->q_count >= maxQueryCount )
break; break;
id = it->second->id; id = it->second->id;
...@@ -706,10 +708,10 @@ bool MBExchange::preInitRead( InitList::iterator& p ) ...@@ -706,10 +708,10 @@ bool MBExchange::preInitRead( InitList::iterator& p )
<< " q_count=" << q_count << " q_count=" << q_count
<< endl; << endl;
if( q_count > ModbusRTU::MAXDATALEN ) if( q_count > maxQueryCount /* ModbusRTU::MAXDATALEN */ )
{ {
mblog3 << myname << "(preInitRead): count(" << q_count mblog3 << myname << "(preInitRead): count(" << q_count
<< ") > MAXDATALEN(" << ModbusRTU::MAXDATALEN << ") > MAXDATALEN(" << maxQueryCount /* ModbusRTU::MAXDATALEN */
<< " ..ignore..." << " ..ignore..."
<< endl; << endl;
} }
...@@ -951,10 +953,10 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -951,10 +953,10 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
<< " mbval=" << p->mbval << " mbval=" << p->mbval
<< endl; << endl;
if( p->q_count > ModbusRTU::MAXDATALEN ) if( p->q_count > maxQueryCount /* ModbusRTU::MAXDATALEN */ )
{ {
mblog3 << myname << "(pollRTU): count(" << p->q_count mblog3 << myname << "(pollRTU): count(" << p->q_count
<< ") > MAXDATALEN(" << ModbusRTU::MAXDATALEN << ") > MAXDATALEN(" << maxQueryCount /* ModbusRTU::MAXDATALEN */
<< " ..ignore..." << " ..ignore..."
<< endl; << endl;
} }
......
...@@ -324,6 +324,7 @@ class MBExchange: ...@@ -324,6 +324,7 @@ class MBExchange:
bool mbregFromID; bool mbregFromID;
int polltime; /*!< переодичность обновления данных, [мсек] */ int polltime; /*!< переодичность обновления данных, [мсек] */
timeout_t sleepPause_usec; timeout_t sleepPause_usec;
int maxQueryCount; /*!< максимальное количество регистров для одного запроса */
PassiveTimer ptHeartBeat; PassiveTimer ptHeartBeat;
UniSetTypes::ObjectId sidHeartBeat; UniSetTypes::ObjectId sidHeartBeat;
......
...@@ -123,7 +123,7 @@ namespace ModbusRTU ...@@ -123,7 +123,7 @@ namespace ModbusRTU
/*! максимальное количество данных в пакете (c учётом контрольной суммы) */ /*! максимальное количество данных в пакете (c учётом контрольной суммы) */
MAXLENPACKET = 508, /*!< максимальная длина пакета 512 - header(2) - CRC(2) */ MAXLENPACKET = 508, /*!< максимальная длина пакета 512 - header(2) - CRC(2) */
BroadcastAddr = 255, /*!< адрес для широковещательных сообщений */ BroadcastAddr = 255, /*!< адрес для широковещательных сообщений */
MAXDATALEN = 127 /*!< максимальное число слов, которое можно запросить. MAXDATALEN = 125 /*!< максимальное число слов, которое можно запросить.
Связано с тем, что в ответе есть поле bcnt - количество байт Связано с тем, что в ответе есть поле bcnt - количество байт
Соответственно максимум туда можно записать только 255 Соответственно максимум туда можно записать только 255
*/ */
......
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