Commit b9dd1c9a authored by pv's avatar pv

debugging

parent b14d1b5c
...@@ -22,3 +22,10 @@ ...@@ -22,3 +22,10 @@
IOController_i::SensorInfo UniSetTypes IOController_i::SensorInfo UniSetTypes
( ConsumerInfo ..). uniset-codegen, ( ConsumerInfo ..). uniset-codegen,
SensorInfo ObjectId. SensorInfo ObjectId.
RTUExchange
==============
...
udev
...@@ -181,6 +181,9 @@ Libraries needed to develop for uniset extentions ...@@ -181,6 +181,9 @@ Libraries needed to develop for uniset extentions
%_bindir/%name-smviewer %_bindir/%name-smviewer
%changelog %changelog
* Thu Jun 04 2009 Pavel Vainerman <pv@aeu> 0.96-eter23
- new build
* Thu Jun 04 2009 Pavel Vainerman <pv@etersoft.ru> 0.96-eter22 * Thu Jun 04 2009 Pavel Vainerman <pv@etersoft.ru> 0.96-eter22
- new build - new build
......
...@@ -69,6 +69,7 @@ activated(false) ...@@ -69,6 +69,7 @@ activated(false)
{ {
readConfiguration(); readConfiguration();
rtuQueryOptimization(rmap); rtuQueryOptimization(rmap);
initRespondList();
} }
else else
ic->addReadItem( sigc::mem_fun(this,&RTUExchange::readItem) ); ic->addReadItem( sigc::mem_fun(this,&RTUExchange::readItem) );
...@@ -117,20 +118,6 @@ activated(false) ...@@ -117,20 +118,6 @@ activated(false)
initMB(); initMB();
xmlNode* respNode = conf->findNode(cnode,"RespondList");
if( respNode )
{
UniXML_iterator it1(respNode);
if( it1.goChildren() )
{
for(;it1.getCurrent(); it1.goNext() )
{
ModbusRTU::ModbusAddr a = ModbusRTU::str2mbAddr(it1.getProp("addr"));
initRespondInfo(rmap,a,it1);
}
}
}
printMap(rmap); printMap(rmap);
// abort(); // abort();
} }
...@@ -168,6 +155,8 @@ void RTUExchange::initMB() ...@@ -168,6 +155,8 @@ void RTUExchange::initMB()
return; return;
} }
try
{
mb = new ModbusRTUMaster(devname); mb = new ModbusRTUMaster(devname);
if( !speed.empty() ) if( !speed.empty() )
...@@ -179,6 +168,13 @@ void RTUExchange::initMB() ...@@ -179,6 +168,13 @@ void RTUExchange::initMB()
mb->setTimeout(recv_timeout); mb->setTimeout(recv_timeout);
dlog[Debug::INFO] << myname << "(init): dev=" << devname << " speed=" << speed << endl; dlog[Debug::INFO] << myname << "(init): dev=" << devname << " speed=" << speed << endl;
}
catch(...)
{
if( mb )
delete mb;
mb = 0;
}
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void RTUExchange::waitSMReady() void RTUExchange::waitSMReady()
...@@ -236,6 +232,12 @@ void RTUExchange::poll() ...@@ -236,6 +232,12 @@ void RTUExchange::poll()
if( !mb ) if( !mb )
{ {
initMB(); initMB();
if( !mb )
{
for( RTUExchange::RTUDeviceMap::iterator it=rmap.begin(); it!=rmap.end(); ++it )
it->second->resp_real = false;
}
updateSM();
return; return;
} }
...@@ -260,10 +262,10 @@ void RTUExchange::poll() ...@@ -260,10 +262,10 @@ void RTUExchange::poll()
try try
{ {
#warning For Debug //#warning For Debug
// mb->cleanupChannel(); mb->cleanupChannel();
d->resp_real = true;
d->rtu->poll(mb); d->rtu->poll(mb);
d->resp_real = true;
} }
catch( ModbusRTU::mbException& ex ) catch( ModbusRTU::mbException& ex )
{ {
...@@ -279,11 +281,14 @@ void RTUExchange::poll() ...@@ -279,11 +281,14 @@ void RTUExchange::poll()
{ {
for( RTUExchange::RegMap::iterator it=d->regmap.begin(); it!=d->regmap.end(); ++it ) for( RTUExchange::RegMap::iterator it=d->regmap.begin(); it!=d->regmap.end(); ++it )
{ {
d->resp_real = true;
try try
{ {
if( d->dtype==RTUExchange::dtRTU || d->dtype==RTUExchange::dtMTR ) if( d->dtype==RTUExchange::dtRTU || d->dtype==RTUExchange::dtMTR )
pollRTU(d,it); {
mb->cleanupChannel();
if( pollRTU(d,it) )
d->resp_real = true;
}
} }
catch( ModbusRTU::mbException& ex ) catch( ModbusRTU::mbException& ex )
{ {
...@@ -307,7 +312,7 @@ void RTUExchange::poll() ...@@ -307,7 +312,7 @@ void RTUExchange::poll()
// printMap(rmap); // printMap(rmap);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void RTUExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) bool RTUExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
{ {
RegInfo* p(it->second); RegInfo* p(it->second);
...@@ -326,7 +331,7 @@ void RTUExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -326,7 +331,7 @@ void RTUExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
if( dlog.debugging(Debug::INFO) ) if( dlog.debugging(Debug::INFO) )
dlog[Debug::INFO] << myname << "(pollRTU): q_count=0 for mbreg=" << ModbusRTU::dat2str(p->mbreg) dlog[Debug::INFO] << myname << "(pollRTU): q_count=0 for mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " IGNORE register..." << endl; << " IGNORE register..." << endl;
return ; return false;
} }
switch( p->mbfunc ) switch( p->mbfunc )
...@@ -374,9 +379,9 @@ void RTUExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -374,9 +379,9 @@ void RTUExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
{ {
dlog[Debug::CRIT] << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg) dlog[Debug::CRIT] << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " IGNORE WRITE SINGLE REGISTER q_count=" << p->q_count << " ..." << endl; << " IGNORE WRITE SINGLE REGISTER q_count=" << p->q_count << " ..." << endl;
return false;
} }
else
ModbusRTU::WriteSingleOutputRetMessage ret = mb->write06(dev->mbaddr,p->mbreg,p->mbval); ModbusRTU::WriteSingleOutputRetMessage ret = mb->write06(dev->mbaddr,p->mbreg,p->mbval);
} }
break; break;
...@@ -396,9 +401,12 @@ void RTUExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -396,9 +401,12 @@ void RTUExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
if( dlog.debugging(Debug::INFO) ) if( dlog.debugging(Debug::INFO) )
dlog[Debug::INFO] << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg) dlog[Debug::INFO] << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " IGNORE mfunc=" << (int)p->mbfunc << " ..." << endl; << " IGNORE mfunc=" << (int)p->mbfunc << " ..." << endl;
return false;
} }
break; break;
} }
return true;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
bool RTUExchange::RTUDevice::checkRespond() bool RTUExchange::RTUDevice::checkRespond()
...@@ -423,7 +431,13 @@ void RTUExchange::updateSM() ...@@ -423,7 +431,13 @@ void RTUExchange::updateSM()
for( RTUExchange::RTUDeviceMap::iterator it1=rmap.begin(); it1!=rmap.end(); ++it1 ) for( RTUExchange::RTUDeviceMap::iterator it1=rmap.begin(); it1!=rmap.end(); ++it1 )
{ {
RTUDevice* d(it1->second); RTUDevice* d(it1->second);
/*
cout << "check respond addr=" << ModbusRTU::addr2str(d->mbaddr)
<< " respond=" << d->resp_id
<< " real=" << d->resp_real
<< " state=" << d->resp_state
<< endl;
*/
// update respond sensors...... // update respond sensors......
if( d->checkRespond() && d->resp_id != DefaultObjectId ) if( d->checkRespond() && d->resp_id != DefaultObjectId )
{ {
...@@ -562,7 +576,8 @@ void RTUExchange::sysCommand( UniSetTypes::SystemMessage *sm ) ...@@ -562,7 +576,8 @@ void RTUExchange::sysCommand( UniSetTypes::SystemMessage *sm )
if( dlog.debugging(Debug::INFO) ) if( dlog.debugging(Debug::INFO) )
dlog[Debug::INFO] << myname << "(sysCommand): rmap size= " << rmap.size() << endl; dlog[Debug::INFO] << myname << "(sysCommand): rmap size= " << rmap.size() << endl;
if( shm->isLocalwork() )
initRespondList();
waitSMReady(); waitSMReady();
...@@ -1373,6 +1388,27 @@ std::ostream& operator<<( std::ostream& os, const RTUExchange::RSProperty& p ) ...@@ -1373,6 +1388,27 @@ std::ostream& operator<<( std::ostream& os, const RTUExchange::RSProperty& p )
return os; return os;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void RTUExchange::initRespondList()
{
xmlNode* respNode = conf->findNode(cnode,"RespondList");
if( respNode )
{
UniXML_iterator it1(respNode);
if( it1.goChildren() )
{
for(;it1.getCurrent(); it1.goNext() )
{
ModbusRTU::ModbusAddr a = ModbusRTU::str2mbAddr(it1.getProp("addr"));
initRespondInfo(rmap,a,it1);
}
}
else
dlog[Debug::WARN] << myname << "(init): <RespondList> empty section..." << endl;
}
else
dlog[Debug::WARN] << myname << "(init): NO <RespondList> found..." << endl;
}
// -----------------------------------------------------------------------------
bool RTUExchange::initRespondInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXML_iterator& it ) bool RTUExchange::initRespondInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXML_iterator& it )
{ {
RTUDeviceMap::iterator d = m.find(a); RTUDeviceMap::iterator d = m.find(a);
...@@ -1389,6 +1425,7 @@ bool RTUExchange::initRespondInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, Uni ...@@ -1389,6 +1425,7 @@ bool RTUExchange::initRespondInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, Uni
return false; return false;
} }
dlog[Debug::INFO] << myname << "(initRespondList): add addr=" << ModbusRTU::addr2str(a) << endl;
int tout = atoi(it.getProp("timeout").c_str()); int tout = atoi(it.getProp("timeout").c_str());
if( tout > 0 ) if( tout > 0 )
d->second->resp_ptTimeout.setTiming(tout); d->second->resp_ptTimeout.setTiming(tout);
...@@ -1396,6 +1433,9 @@ bool RTUExchange::initRespondInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, Uni ...@@ -1396,6 +1433,9 @@ bool RTUExchange::initRespondInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, Uni
d->second->resp_ptTimeout.setTiming(UniSetTimer::WaitUpTime); d->second->resp_ptTimeout.setTiming(UniSetTimer::WaitUpTime);
d->second->resp_invert = atoi(it.getProp("invert").c_str()); d->second->resp_invert = atoi(it.getProp("invert").c_str());
d->second->resp_state = UniSetTypes::uni_atoi(it.getProp("default").c_str());
d->second->resp_real = UniSetTypes::uni_atoi(it.getProp("default").c_str());
d->second->resp_trTimeout.change(d->second->resp_real);
return true; return true;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
......
...@@ -117,7 +117,7 @@ class RTUExchange: ...@@ -117,7 +117,7 @@ class RTUExchange:
mbaddr(0), mbaddr(0),
dtype(dtUnknown), dtype(dtUnknown),
resp_id(UniSetTypes::DefaultObjectId), resp_id(UniSetTypes::DefaultObjectId),
resp_state(false), resp_state(true),
resp_invert(false), resp_invert(false),
resp_real(false), resp_real(false),
rtu(0) rtu(0)
...@@ -169,7 +169,7 @@ class RTUExchange: ...@@ -169,7 +169,7 @@ class RTUExchange:
void step(); void step();
void poll(); void poll();
void pollRTU( RTUDevice* dev, RegMap::iterator& it ); bool pollRTU( RTUDevice* dev, RegMap::iterator& it );
void updateSM(); void updateSM();
void updateRTU(RegMap::iterator& it); void updateRTU(RegMap::iterator& it);
...@@ -193,6 +193,7 @@ class RTUExchange: ...@@ -193,6 +193,7 @@ class RTUExchange:
void initIterators(); void initIterators();
bool initItem( UniXML_iterator& it ); bool initItem( UniXML_iterator& it );
bool readItem( UniXML& xml, UniXML_iterator& it, xmlNode* sec ); bool readItem( UniXML& xml, UniXML_iterator& it, xmlNode* sec );
void initRespondList();
RTUDevice* addDev( RTUDeviceMap& dmap, ModbusRTU::ModbusAddr a, UniXML_iterator& it ); RTUDevice* addDev( RTUDeviceMap& dmap, ModbusRTU::ModbusAddr a, UniXML_iterator& it );
......
#!/bin/sh #!/bin/sh
ln -s -f /usr/bin/uniset-stop.sh stop.sh ln -s -f /usr/bin/uniset-stop.sh stop.sh
ln -s -f ../../conf/test.xml test.xml #ln -s -f ../../conf/test.xml test.xml
ln -s -f ./configure.xml test.xml
#!/bin/sh #!/bin/sh
uniset-start.sh -f ./uniset-rtuexchange --rs-name RTUExchange --confile test.xml \ uniset-start.sh -f ./uniset-rtuexchange --confile test.xml \
--rs-filter-field rs --rs-filter-value wago \
--rs-dev /dev/ttyUSB0 \ --rs-dev /dev/ttyUSB0 \
--rs-name RSExchange \
--rs-speed 38400 \
--rs-filter-field rs \
--rs-filter-value 1 \
--dlog-add-levels info,crit,warn --dlog-add-levels info,crit,warn
#,level3 #,level3
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