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

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

задать максимальное количество регистров запрашиваемых в одном запросе.
parent d7edc77c
%def_enable docs
%def_enable mysql
%def_enable sqlite
%def_enable pgsql
%def_disable pgsql
%def_enable python
%def_enable rrd
%def_enable io
......@@ -13,7 +13,7 @@
Name: libuniset2
Version: 2.1
Release: alt10
Release: alt11
Summary: UniSet - library for building distributed industrial control systems
......@@ -456,6 +456,11 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
# ..
%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
- fixed bug in ModbusMultiMaster (setbug #7596)
- enable pgsql interface
......
......@@ -125,6 +125,7 @@ MBExchange::MBExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId
vmonit(defaultMBaddr);
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);
......@@ -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-mbadd addr - У датчиков которых не задан 'mbaddr' использовать данный. По умолчанию: ''" << 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 << " Logs: " << endl;
cout << "--prefix-log-... - log control" << endl;
......@@ -613,7 +615,7 @@ void MBExchange::rtuQueryOptimization( RTUDeviceMap& m )
beg->second->q_count++;
if( beg->second->q_count >= ModbusRTU::MAXDATALEN )
if( beg->second->q_count >= maxQueryCount )
break;
id = it->second->id;
......@@ -706,10 +708,10 @@ bool MBExchange::preInitRead( InitList::iterator& p )
<< " q_count=" << q_count
<< endl;
if( q_count > ModbusRTU::MAXDATALEN )
if( q_count > maxQueryCount /* ModbusRTU::MAXDATALEN */ )
{
mblog3 << myname << "(preInitRead): count(" << q_count
<< ") > MAXDATALEN(" << ModbusRTU::MAXDATALEN
<< ") > MAXDATALEN(" << maxQueryCount /* ModbusRTU::MAXDATALEN */
<< " ..ignore..."
<< endl;
}
......@@ -951,10 +953,10 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
<< " mbval=" << p->mbval
<< endl;
if( p->q_count > ModbusRTU::MAXDATALEN )
if( p->q_count > maxQueryCount /* ModbusRTU::MAXDATALEN */ )
{
mblog3 << myname << "(pollRTU): count(" << p->q_count
<< ") > MAXDATALEN(" << ModbusRTU::MAXDATALEN
<< ") > MAXDATALEN(" << maxQueryCount /* ModbusRTU::MAXDATALEN */
<< " ..ignore..."
<< endl;
}
......
......@@ -324,6 +324,7 @@ class MBExchange:
bool mbregFromID;
int polltime; /*!< переодичность обновления данных, [мсек] */
timeout_t sleepPause_usec;
int maxQueryCount; /*!< максимальное количество регистров для одного запроса */
PassiveTimer ptHeartBeat;
UniSetTypes::ObjectId sidHeartBeat;
......
......@@ -123,7 +123,7 @@ namespace ModbusRTU
/*! максимальное количество данных в пакете (c учётом контрольной суммы) */
MAXLENPACKET = 508, /*!< максимальная длина пакета 512 - header(2) - CRC(2) */
BroadcastAddr = 255, /*!< адрес для широковещательных сообщений */
MAXDATALEN = 127 /*!< максимальное число слов, которое можно запросить.
MAXDATALEN = 125 /*!< максимальное число слов, которое можно запросить.
Связано с тем, что в ответе есть поле bcnt - количество байт
Соответственно максимум туда можно записать только 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