Commit 24ad8c8b authored by Pavel Vainerman's avatar Pavel Vainerman

add not-respond-sensor

parent 3586e716
......@@ -55,6 +55,9 @@ activated(false)
int recv_timeout = atoi(conf->getArgParam("--rs-recv-timeout",it.getProp("recv_timeout")).c_str());
sidNotRespond = conf->getSensorID(conf->getArgParam("--rs-notRespondSensor",it.getProp("notRespondSensor")));
// string saddr = conf->getArgParam("--rs-my-addr",it.getProp("addr"));
// ModbusRTU::ModbusAddr myaddr = ModbusRTU::str2mbAddr(saddr);
// if( saddr.empty() )
......@@ -310,6 +313,7 @@ void RTUExchange::step()
// -----------------------------------------------------------------------------
void RTUExchange::poll()
{
bool respond_ok = true;
for( RTUMap::iterator it=rtulist.begin(); it!=rtulist.end(); ++it )
{
if( !activated )
......@@ -330,6 +334,7 @@ void RTUExchange::poll()
catch( ModbusRTU::mbException& ex )
{
cout << " [ FAILED ] (" << ex << ")" << endl;
respond_ok = false;
}
}
......@@ -409,6 +414,8 @@ void RTUExchange::poll()
break;
}
}
continue;
}
catch(ModbusRTU::mbException& ex )
{
......@@ -439,6 +446,21 @@ void RTUExchange::poll()
{
dlog[Debug::LEVEL3] << myname << "(poll): catch ..." << endl;
}
respond_ok = false;
}
if( sidNotRespond!=DefaultObjectId )
{
if( trTimeout.hi( !respond_ok ) )
ptTimeout.reset();
else if( respond_ok )
ptTimeout.reset();
if( !respond_ok && ptTimeout.checkTime() )
shm->localSaveState(ditNotRespond,sidNotRespond,true,getId());
else
shm->localSaveState(ditNotRespond,sidNotRespond,false,getId());
}
}
// -----------------------------------------------------------------------------
......@@ -1095,6 +1117,7 @@ void RTUExchange::initIterators()
}
shm->initAIterator(aitHeartBeat);
shm->initDIterator(ditNotRespond);
}
// -----------------------------------------------------------------------------
void RTUExchange::help_print( int argc, char* argv[] )
......
......@@ -155,6 +155,9 @@ class RTUExchange:
UniSetTypes::uniset_mutex pollMutex;
Trigger trTimeout;
PassiveTimer ptTimeout;
UniSetTypes::ObjectId sidNotRespond;
IOController::DIOStateList::iterator ditNotRespond;
PassiveTimer aiTimer;
int ai_polltime;
......
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