Commit ff594bc2 authored by Pavel Vainerman's avatar Pavel Vainerman

(MBExchange): немного переделал логику выставление датчика связи

parent e70f60af
...@@ -14,8 +14,7 @@ ...@@ -14,8 +14,7 @@
Name: libuniset2 Name: libuniset2
Version: 2.2 Version: 2.2
Release: alt29.2 Release: alt30
Summary: UniSet - library for building distributed industrial control systems Summary: UniSet - library for building distributed industrial control systems
License: LGPL License: LGPL
...@@ -487,6 +486,9 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname ...@@ -487,6 +486,9 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
# .. # ..
%changelog %changelog
* Tue Mar 22 2016 Pavel Vainerman <pv@altlinux.ru> 2.2-alt30
- minor fixes in DealyTimer and MBExchange (not respond logic)
* Sun Mar 20 2016 Pavel Vainerman <pv@etersoft.ru> 2.2-alt29.2 * Sun Mar 20 2016 Pavel Vainerman <pv@etersoft.ru> 2.2-alt29.2
- rebuild - rebuild
......
...@@ -554,7 +554,7 @@ std::ostream& operator<<( std::ostream& os, MBExchange::RTUDevice& d ) ...@@ -554,7 +554,7 @@ std::ostream& operator<<( std::ostream& os, MBExchange::RTUDevice& d )
os << "addr=" << ModbusRTU::addr2str(d.mbaddr) os << "addr=" << ModbusRTU::addr2str(d.mbaddr)
<< " type=" << d.dtype << " type=" << d.dtype
<< " respond_id=" << d.resp_id << " respond_id=" << d.resp_id
<< " respond_timeout=" << d.resp_Delay.getOnDelay() << " respond_timeout=" << d.resp_Delay.getOffDelay()
<< " respond_state=" << d.resp_state << " respond_state=" << d.resp_state
<< " respond_invert=" << d.resp_invert << " respond_invert=" << d.resp_invert
<< endl; << endl;
...@@ -2768,7 +2768,7 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM ...@@ -2768,7 +2768,7 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM
mbinfo << myname << "(initDeviceInfo): add addr=" << ModbusRTU::addr2str(a) << endl; mbinfo << myname << "(initDeviceInfo): add addr=" << ModbusRTU::addr2str(a) << endl;
int tout = it.getPIntProp("timeout", default_timeout ); int tout = it.getPIntProp("timeout", default_timeout );
d->second->resp_Delay.set(tout, false); d->second->resp_Delay.set(0, tout);
d->second->resp_invert = it.getIntProp("invert"); d->second->resp_invert = it.getIntProp("invert");
d->second->resp_force = it.getIntProp("force"); d->second->resp_force = it.getIntProp("force");
...@@ -3174,13 +3174,14 @@ bool MBExchange::poll() ...@@ -3174,13 +3174,14 @@ bool MBExchange::poll()
bool MBExchange::RTUDevice::checkRespond( std::shared_ptr<DebugStream>& mblog ) bool MBExchange::RTUDevice::checkRespond( std::shared_ptr<DebugStream>& mblog )
{ {
bool prev = resp_state; bool prev = resp_state;
resp_state = !resp_Delay.check( prev_numreply == numreply ) && numreply != 0; resp_state = resp_Delay.check( prev_numreply != numreply ) && numreply != 0;
mblog4 << "(checkRespond): addr=" << ModbusRTU::addr2str(mbaddr) mblog4 << "(checkRespond): addr=" << ModbusRTU::addr2str(mbaddr)
<< " respond_id=" << resp_id << " respond_id=" << resp_id
<< " state=" << resp_state << " state=" << resp_state
<< " current=" << resp_Delay.getCurrent() << " current=" << resp_Delay.getCurrent()
<< " [ timeout=" << resp_Delay.getOnDelay() << " delay_check=" << resp_Delay.get()
<< " [ timeout=" << resp_Delay.getOffDelay()
<< " numreply=" << numreply << " numreply=" << numreply
<< " prev_numreply=" << prev_numreply << " prev_numreply=" << prev_numreply
<< " resp_ptInit=" << resp_ptInit.checkTime() << " resp_ptInit=" << resp_ptInit.checkTime()
...@@ -3309,7 +3310,7 @@ std::string MBExchange::RTUDevice::getShortInfo() const ...@@ -3309,7 +3310,7 @@ std::string MBExchange::RTUDevice::getShortInfo() const
<< " (resp_id=" << resp_id << " resp_force=" << resp_force << " (resp_id=" << resp_id << " resp_force=" << resp_force
<< " resp_invert=" << resp_invert << " resp_invert=" << resp_invert
<< " numreply=" << numreply << " numreply=" << numreply
<< " timeout=" << resp_Delay.getOnDelay() << " timeout=" << resp_Delay.getOffDelay()
<< " type=" << dtype << " type=" << dtype
<< " ask_every_reg=" << ask_every_reg << " ask_every_reg=" << ask_every_reg
<< ")" << endl; << ")" << endl;
......
...@@ -95,23 +95,33 @@ class DelayTimer ...@@ -95,23 +95,33 @@ class DelayTimer
if( state != st ) if( state != st )
{ {
waiting_on = false;
waiting_off = false;
if( st ) if( st )
{ {
if( onDelay <=0 )
{
pt.setTiming(0);
state = st;
return st;
}
pt.setTiming(onDelay); pt.setTiming(onDelay);
waiting_on = true; waiting_on = true;
} }
else else
{ {
if( offDelay <=0 )
{
pt.setTiming(0);
state = st;
return st;
}
pt.setTiming(offDelay); pt.setTiming(offDelay);
waiting_off = true; waiting_off = true;
} }
// на случае если таймеры = 0..
if( pt.checkTime() )
{
state = st;
return st;
}
} }
return state; return state;
......
...@@ -155,6 +155,15 @@ TEST_CASE("[DelayTimer]: zero time", "[DelayTimer]" ) ...@@ -155,6 +155,15 @@ TEST_CASE("[DelayTimer]: zero time", "[DelayTimer]" )
msleep(40); msleep(40);
CHECK_FALSE( dt.check(false) ); CHECK_FALSE( dt.check(false) );
CHECK( dt.check(true) ); CHECK( dt.check(true) );
msleep(40);
CHECK( dt.check(true) );
msleep(40);
CHECK( dt.check(true) );
CHECK( dt.check(false) );
msleep(80);
CHECK( dt.check(false) );
msleep(40);
CHECK_FALSE( dt.check(false) );
} }
SECTION( "offdelay=0" ) SECTION( "offdelay=0" )
...@@ -170,6 +179,13 @@ TEST_CASE("[DelayTimer]: zero time", "[DelayTimer]" ) ...@@ -170,6 +179,13 @@ TEST_CASE("[DelayTimer]: zero time", "[DelayTimer]" )
msleep(40); msleep(40);
CHECK( dt.check(true) ); CHECK( dt.check(true) );
CHECK_FALSE( dt.check(false) ); CHECK_FALSE( dt.check(false) );
msleep(40);
CHECK_FALSE( dt.check(false) );
CHECK_FALSE( dt.check(true) );
msleep(80);
CHECK_FALSE( dt.check(true) );
msleep(40);
CHECK( dt.check(true) );
} }
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
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