Commit 207347d9 authored by Pavel Vainerman's avatar Pavel Vainerman

(ModbusMaster): добавил возможность задавать mbtype и mbaddr по умолчанию

(--prefix-default-mbtype.. --prefix-default-mbaddr), для оптимизации настройки обмена в configure.xml (ModbusMaster): написал тесты почти всех основных функций, заложил основу для оставшихся.
parent 12f6058d
......@@ -84,6 +84,9 @@ pollActivated(false)
force = conf->getArgInt("--" + prefix + "-force",it.getProp("force"));
force_out = conf->getArgInt("--" + prefix + "-force-out",it.getProp("force_out"));
defaultMBtype = conf->getArg2Param("--" + prefix + "-default-mbtype",it.getProp("default_mbtype"),"rtu");
defaultMBaddr = conf->getArg2Param("--" + prefix + "-default-mbaddr",it.getProp("default_mbaddr"),"");
// ********** HEARTBEAT *************
string heart = conf->getArgParam("--" + prefix + "-heartbeat-id",it.getProp("heartbeat_id"));
if( !heart.empty() )
......@@ -158,6 +161,8 @@ void MBExchange::help_print( int argc, const char* const* argv )
cout << "--prefix-sm-ready-timeout - время на ожидание старта SM" << endl;
cout << "--prefix-exchange-mode-id - Идентификатор (AI) датчика, позволяющего управлять работой процесса" << endl;
cout << "--prefix-set-prop-prefix val - Использовать для свойств указанный или пустой префикс." << endl;
cout << "--prefix-default-mbtype [rtu|rtu188|mtr] - У датчиков которых не задан 'mbtype' использовать данный. По умолчанию: 'rtu'" << endl;
cout << "--prefix-default-mbadd addr - У датчиков которых не задан 'mbaddr' использовать данный. По умолчанию: ''" << endl;
}
// -----------------------------------------------------------------------------
MBExchange::~MBExchange()
......@@ -1783,7 +1788,10 @@ MBExchange::RTUDevice* MBExchange::addDev( RTUDeviceMap& mp, ModbusRTU::ModbusAd
auto it = mp.find(a);
if( it != mp.end() )
{
DeviceType dtype = getDeviceType(xmlit.getProp(prop_prefix + "mbtype"));
string s_dtype(xmlit.getProp(prop_prefix + "mbtype"));
if( s_dtype.empty() )
s_dtype=defaultMBtype;
DeviceType dtype = getDeviceType(s_dtype);
if( it->second->dtype != dtype )
{
dcrit << myname << "(addDev): OTHER mbtype=" << dtype << " for " << xmlit.getProp("name")
......@@ -2016,6 +2024,9 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML::iterator& it, MBExchange::RTU
bool MBExchange::initRTUDevice( RTUDevice* d, UniXML::iterator& it )
{
string mbtype(IOBase::initProp(it,"mbtype",prop_prefix,false));
if(mbtype.empty())
mbtype = defaultMBtype;
d->dtype = getDeviceType(mbtype);
if( d->dtype == dtUnknown )
......@@ -2028,6 +2039,9 @@ bool MBExchange::initRTUDevice( RTUDevice* d, UniXML::iterator& it )
string addr( IOBase::initProp(it,"mbaddr",prop_prefix,false) );
if( addr.empty() )
addr = defaultMBaddr;
if( addr.empty() )
{
dcrit << myname << "(initRTUDevice): Unknown mbaddr for " << it.getProp("name") << endl;
return false;
......@@ -2052,6 +2066,9 @@ bool MBExchange::initItem( UniXML::iterator& it )
string addr( IOBase::initProp(it,"mbaddr",prop_prefix,false) );
if( addr.empty() )
addr = defaultMBaddr;
if( addr.empty() )
{
dcrit << myname << "(initItem): Unknown mbaddr(" << IOBase::initProp(it,"mbaddr",prop_prefix,false) << ")='" << addr << "' for " << it.getProp("name") << endl;
return false;
......
......@@ -342,6 +342,9 @@ class MBExchange:
typedef std::list<IOBase> ThresholdList;
ThresholdList thrlist;
std::string defaultMBtype;
std::string defaultMBaddr;
private:
MBExchange();
......
......@@ -2,7 +2,7 @@ if HAVE_TESTS
noinst_PROGRAMS = tests-with-sm
tests_with_sm_SOURCES = tests_with_sm.cc test_mbtcpmaster.cc test_mbtcpmultimaster.cc
tests_with_sm_SOURCES = tests_with_sm.cc test_mbtcpmaster.cc test_mbtcpmultimaster.cc MBTCPTestServer.cc
tests_with_sm_LDADD = $(top_builddir)/lib/libUniSet2.la $(top_builddir)/extensions/lib/libUniSet2Extensions.la \
$(top_builddir)/extensions/ModbusMaster/libUniSet2MBTCPMaster.la \
$(top_builddir)/extensions/SharedMemory/libUniSet2SharedMemory.la \
......
......@@ -40,15 +40,14 @@ int main(int argc, char* argv[] )
if( !shm )
return 1;
/*
auto mbs = MBSlave::init_mbslave(argc,argv,shm->getId(), (apart ? nullptr : shm ));
if( !mbs )
auto mb = MBTCPMaster::init_mbmaster(argc,argv,shm->getId(), (apart ? nullptr : shm ));
if( !mb )
return 1;
*/
auto act = UniSetActivator::Instance();
act->addObject(shm);
// act->addObject(mbs);
act->addObject(mb);
SystemMessage sm(SystemMessage::StartUp);
act->broadcast( sm.transport_msg() );
......
......@@ -9,7 +9,13 @@ cd ../../../Utilities/Admin/
cd -
./uniset2-start.sh -f ./tests-with-sm $* -- --confile mbmaster-test-configure.xml --e-startup-pause 10 \
--mbs-name MBSlave1 --mbs-type TCP --mbs-inet-addr 127.0.0.1 --mbs-inet-port 20048 --mbs-my-addr 0x01 \
--mbs-askcount-id SVU_AskCount_AS --mbs-respond-id RespondRTU_S --mbs-respond-invert 1 \
--mbs-filter-field mbs --mbs-filter-value 1
# --ulog-add-levels any --dlog-add-levels any
--mbtcp-name MBTCPMaster1 \
--smemory-id SharedMemory \
--mbtcp-filter-field mb \
--mbtcp-filter-value 1 \
--mbtcp-gateway-iaddr localhost \
--mbtcp-gateway-port 20048 \
--mbtcp-polltime 300 --mbtcp-recv-timeout 1000
#--mbtcp-force-out 1
#--dlog-add-levels any
#!/bin/sh
# '--' - нужен для отделения аргументов catch, от наших..
cd ../../../Utilities/Admin/
./uniset2-start.sh -f ./create_links.sh
./uniset2-start.sh -f ./create
./uniset2-start.sh -f ./exist | grep -q UNISET_PLC/Controllers || exit 1
cd -
./uniset2-start.sh -g ./tests-with-sm $* -- --confile mbmaster-test-configure.xml --e-startup-pause 10 \
--mbtcp-name MBTCPMaster1 \
--smemory-id SharedMemory \
--mbtcp-filter-field mb \
--mbtcp-filter-value 1 \
--mbtcp-gateway-iaddr localhost \
--mbtcp-gateway-port 2048 \
--mbtcp-polltime 300
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