Commit 8a72fbd2 authored by Pavel Vainerman's avatar Pavel Vainerman

(ModbusMultiMaster): исправил ошибку в названиях настроек для respondSensor

(теперб называются одинаково для ModbusMaster и ModbusMultiMaster)
parent 6156e98e
#!/bin/sh #!/bin/sh
#while true; do #while true; do
./uniset2-start.sh -f ./uniset2-sviewer-text --confile test.xml --ulog-add-levels warn,crit ./uniset2-start.sh -f ./uniset2-sviewer-text --confile test.xml --ulog-add-levels warn,crit $*
#done #done
%def_enable docs %def_enable docs
%def_enable mysql %def_enable mysql
%def_enable sqlite %def_enable sqlite
%def_disable pgsql %def_enable 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: alt9 Release: alt10
Summary: UniSet - library for building distributed industrial control systems Summary: UniSet - library for building distributed industrial control systems
...@@ -456,6 +456,10 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname ...@@ -456,6 +456,10 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
# .. # ..
%changelog %changelog
* Fri Jul 03 2015 Pavel Vainerman <pv@altlinux.ru> 2.1-alt10
- fixed bug in ModbusMultiMaster (setbug #7596)
- enable pgsql interface
* Tue Jun 30 2015 Pavel Vainerman <pv@altlinux.ru> 2.1-alt9 * Tue Jun 30 2015 Pavel Vainerman <pv@altlinux.ru> 2.1-alt9
- temporary disable pgsql interface - temporary disable pgsql interface
......
...@@ -83,8 +83,8 @@ ...@@ -83,8 +83,8 @@
<item addr="0x01" invert="0" respondSensor="RespondRTU_S" timeout="5000" modeSensor="MB1_Mode_AS"/> <item addr="0x01" invert="0" respondSensor="RespondRTU_S" timeout="5000" modeSensor="MB1_Mode_AS"/>
</DeviceList> </DeviceList>
<GateList> <GateList>
<item ip="127.0.0.1" port="2048" recv_timeout="200"/> <item ip="127.0.0.1" port="2048" recv_timeout="200" invert="1" respondSensor="MM1_Not_Respond_S"/>
<item ip="127.0.0.1" port="2049" recv_timeout="200"/> <item ip="127.0.0.1" port="2049" recv_timeout="200" invert="1" respondSensor="MM2_Not_Respond_S"/>
</GateList> </GateList>
</MBMultiMaster1> </MBMultiMaster1>
...@@ -269,6 +269,9 @@ ...@@ -269,6 +269,9 @@
<item id="107" iotype="AI" name="AI107_AS" textname="AI107" default="1"/> <item id="107" iotype="AI" name="AI107_AS" textname="AI107" default="1"/>
<item id="108" iotype="AI" name="AI108_AS" textname="AI108" ag="1" ag_min="30" ag_max="40" ag_invert="1"/> <item id="108" iotype="AI" name="AI108_AS" textname="AI108" ag="1" ag_min="30" ag_max="40" ag_invert="1"/>
<item id="109" iotype="DI" name="MM1_Not_Respond_S" priority="Medium" textname="multimaster test sensor"/>
<item id="110" iotype="DI" name="MM2_Not_Respond_S" priority="Medium" textname="multimaster test sensor"/>
</sensors> </sensors>
<thresholds name="thresholds"> <thresholds name="thresholds">
<sensor iotype="AI" name="AI_AS"> <sensor iotype="AI" name="AI_AS">
......
...@@ -74,14 +74,14 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob ...@@ -74,14 +74,14 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob
throw UniSetTypes::SystemError(err.str()); throw UniSetTypes::SystemError(err.str());
} }
if( !it1.getProp("respond").empty() ) if( !it1.getProp("respondSensor").empty() )
{ {
sinf.respond_id = conf->getSensorID( it1.getProp("respond") ); sinf.respond_id = conf->getSensorID( it1.getProp("respondSensor") );
if( sinf.respond_id == DefaultObjectId ) if( sinf.respond_id == DefaultObjectId )
{ {
ostringstream err; ostringstream err;
err << myname << "(init): ERROR: Unknown SensorID for '" << it1.getProp("respond") << "' in <GateList>"; err << myname << "(init): ERROR: Unknown SensorID for '" << it1.getProp("respondSensor") << "' in <GateList>";
mbcrit << err.str() << endl; mbcrit << err.str() << endl;
throw UniSetTypes::SystemError(err.str()); throw UniSetTypes::SystemError(err.str());
} }
...@@ -94,7 +94,7 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob ...@@ -94,7 +94,7 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob
sinf.recv_timeout = it1.getPIntProp("recv_timeout", recv_timeout); sinf.recv_timeout = it1.getPIntProp("recv_timeout", recv_timeout);
sinf.aftersend_pause = it1.getPIntProp("aftersend_pause", aftersend_pause); sinf.aftersend_pause = it1.getPIntProp("aftersend_pause", aftersend_pause);
sinf.sleepPause_usec = it1.getPIntProp("sleepPause_usec", sleepPause_usec); sinf.sleepPause_usec = it1.getPIntProp("sleepPause_usec", sleepPause_usec);
sinf.respond_invert = it1.getPIntProp("respond_invert", 0); sinf.respond_invert = it1.getPIntProp("invert", 0);
sinf.force_disconnect = it.getPIntProp("persistent_connection", !force_disconnect) ? false : true; sinf.force_disconnect = it.getPIntProp("persistent_connection", !force_disconnect) ? false : true;
...@@ -357,13 +357,15 @@ void MBTCPMultiMaster::check_thread() ...@@ -357,13 +357,15 @@ void MBTCPMultiMaster::check_thread()
{ {
bool r = it->check(); bool r = it->check();
mbinfo << myname << "(check): " << it->myname << " " << ( r ? "OK" : "FAIL" ) << endl; mbinfo << myname << "(check): " << it->myname << " " << ( r ? "OK" : "FAIL" ) << endl;
cerr << "respond_init=" << it->respond_init << endl;
try try
{ {
if( it->respond_id != DefaultObjectId && (force_out || r != it->respond) ) if( it->respond_id != DefaultObjectId && (force_out || !it->respond_init || r != it->respond) )
{ {
bool set = it->respond_invert ? !it->respond : it->respond; bool set = it->respond_invert ? !it->respond : it->respond;
shm->localSetValue(it->respond_it, it->respond_id, (set ? 1 : 0), getId()); shm->localSetValue(it->respond_it, it->respond_id, (set ? 1 : 0), getId());
it->respond_init = true;
} }
} }
catch( const Exception& ex ) catch( const Exception& ex )
......
...@@ -263,6 +263,7 @@ class MBTCPMultiMaster: ...@@ -263,6 +263,7 @@ class MBTCPMultiMaster:
UniSetTypes::ObjectId respond_id; UniSetTypes::ObjectId respond_id;
IOController::IOStateList::iterator respond_it; IOController::IOStateList::iterator respond_it;
bool respond_invert; bool respond_invert;
bool respond_init = { false };
inline bool operator < ( const MBSlaveInfo& mbs ) const inline bool operator < ( const MBSlaveInfo& mbs ) const
{ {
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
--mbtcp-force-disconnect 1 \ --mbtcp-force-disconnect 1 \
--mbtcp-polltime 1000 \ --mbtcp-polltime 1000 \
--mbtcp-force-out 1 \ --mbtcp-force-out 1 \
--mbtcp-log-add-levels any \
$* $*
#--mbtcp-exchange-mode-id MB1_Mode_AS \ #--mbtcp-exchange-mode-id MB1_Mode_AS \
......
...@@ -127,11 +127,16 @@ TEST_CASE("MBTCPMultiMaster: rotate channel", "[modbus][mbmaster][mbtcpmultimast ...@@ -127,11 +127,16 @@ TEST_CASE("MBTCPMultiMaster: rotate channel", "[modbus][mbmaster][mbtcpmultimast
mbs1->disableExchange(true); mbs1->disableExchange(true);
msleep(4000); // --mbtcp-timeout 3000 (см. run_test_mbtcmultipmaster.sh) msleep(4000); // --mbtcp-timeout 3000 (см. run_test_mbtcmultipmaster.sh)
REQUIRE( ui->getValue(1003) == 10 ); REQUIRE( ui->getValue(1003) == 10 );
REQUIRE( ui->getValue(12) == true );
REQUIRE( ui->getValue(13) == false );
mbs1->disableExchange(false); mbs1->disableExchange(false);
mbs2->disableExchange(true); mbs2->disableExchange(true);
msleep(4000); // --mbtcp-timeout 3000 (см. run_test_mbtcmultipmaster.sh) msleep(4000); // --mbtcp-timeout 3000 (см. run_test_mbtcmultipmaster.sh)
REQUIRE( ui->getValue(1003) == 100 ); REQUIRE( ui->getValue(1003) == 100 );
REQUIRE( ui->getValue(12) == false );
mbs2->disableExchange(false); mbs2->disableExchange(false);
REQUIRE( ui->getValue(1003) == 100 ); REQUIRE( ui->getValue(1003) == 100 );
REQUIRE( ui->getValue(13) == true );
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -187,19 +187,21 @@ void SViewer::getInfo( ObjectId id ) ...@@ -187,19 +187,21 @@ void SViewer::getInfo( ObjectId id )
return; return;
} }
IOController_i::SensorInfoSeq_var amap = ioc->getSensorsMap();
IONotifyController_i::ThresholdsListSeq_var tlst = ioc->getThresholdsList();
try try
{ {
IOController_i::SensorInfoSeq_var amap = ioc->getSensorsMap();
updateSensors(amap, id); updateSensors(amap, id);
} }
catch( IOController_i::NameNotFound ){}
catch(...) {} catch(...) {}
try try
{ {
IONotifyController_i::ThresholdsListSeq_var tlst = ioc->getThresholdsList();
updateThresholds(tlst, id); updateThresholds(tlst, id);
} }
catch( IOController_i::NameNotFound ){}
catch(...) {} catch(...) {}
return; return;
......
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