Commit 03ab8d45 authored by pv's avatar pv

new version

parent b9dd1c9a
#!/bin/sh #!/bin/sh
#
ln -s -f admin.sh start
ln -s -f admin.sh exist
ln -s -f admin.sh finish
ln -s -f admin.sh foldUp
ln -s -f admin.sh info
ln -s -f admin.sh alarm
ln -s -f admin.sh create
#ln -s -f admin.sh setState
#ln -s -f admin.sh dbcreate
#ln -s -f admin.sh statistic
#ln -s -f admin.sh database
ln -s -f admin.sh logrotate
ln -s -f admin.sh omap
ln -s -f admin.sh msgmap
ln -s -f admin.sh anotify
ln -s -f admin.sh dnotify
ln -s -f admin.sh saveValue
ln -s -f admin.sh saveState
ln -s -f admin.sh setValue
ln -s -f admin.sh setState
ln -s -f admin.sh getValue
ln -s -f admin.sh getState
ln -s -f admin.sh getRawValue
ln -s -f admin.sh getCalibrate
ln -s -f admin.sh help
ln -s -f admin.sh oinfo
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
...@@ -54,7 +54,6 @@ activated(false) ...@@ -54,7 +54,6 @@ activated(false)
mbregFromID = atoi(conf->getArgParam("--mbs-reg-from-id",it.getProp("reg_from_id")).c_str()); mbregFromID = atoi(conf->getArgParam("--mbs-reg-from-id",it.getProp("reg_from_id")).c_str());
dlog[Debug::INFO] << myname << "(init): mbregFromID=" << mbregFromID << endl; dlog[Debug::INFO] << myname << "(init): mbregFromID=" << mbregFromID << endl;
polltime = atoi(conf->getArgParam("--rs-polltime",it.getProp("polltime")).c_str()); polltime = atoi(conf->getArgParam("--rs-polltime",it.getProp("polltime")).c_str());
if( !polltime ) if( !polltime )
polltime = 100; polltime = 100;
...@@ -69,7 +68,6 @@ activated(false) ...@@ -69,7 +68,6 @@ 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) );
...@@ -321,6 +319,7 @@ bool RTUExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -321,6 +319,7 @@ bool RTUExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
dlog[Debug::INFO] << myname << "(pollRTU): poll " dlog[Debug::INFO] << myname << "(pollRTU): poll "
<< " mbaddr=" << ModbusRTU::addr2str(dev->mbaddr) << " mbaddr=" << ModbusRTU::addr2str(dev->mbaddr)
<< " mbreg=" << ModbusRTU::dat2str(p->mbreg) << " mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " mboffset=" << p->offset
<< " mbfunc=" << p->mbfunc << " mbfunc=" << p->mbfunc
<< " q_count=" << p->q_count << " q_count=" << p->q_count
<< endl; << endl;
...@@ -338,7 +337,7 @@ bool RTUExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -338,7 +337,7 @@ bool RTUExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
{ {
case ModbusRTU::fnReadInputRegisters: case ModbusRTU::fnReadInputRegisters:
{ {
ModbusRTU::ReadInputRetMessage ret = mb->read04(dev->mbaddr,p->mbreg,p->q_count); ModbusRTU::ReadInputRetMessage ret = mb->read04(dev->mbaddr,p->mbreg+p->offset,p->q_count);
for( int i=0; i<p->q_count; i++,it++ ) for( int i=0; i<p->q_count; i++,it++ )
it->second->mbval = ret.data[i]; it->second->mbval = ret.data[i];
...@@ -348,7 +347,7 @@ bool RTUExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -348,7 +347,7 @@ bool RTUExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
case ModbusRTU::fnReadOutputRegisters: case ModbusRTU::fnReadOutputRegisters:
{ {
ModbusRTU::ReadOutputRetMessage ret = mb->read03(dev->mbaddr, p->mbreg,p->q_count); ModbusRTU::ReadOutputRetMessage ret = mb->read03(dev->mbaddr, p->mbreg+p->offset,p->q_count);
for( int i=0; i<p->q_count; i++,it++ ) for( int i=0; i<p->q_count; i++,it++ )
it->second->mbval = ret.data[i]; it->second->mbval = ret.data[i];
it--; it--;
...@@ -357,7 +356,7 @@ bool RTUExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -357,7 +356,7 @@ bool RTUExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
case ModbusRTU::fnReadInputStatus: case ModbusRTU::fnReadInputStatus:
{ {
ModbusRTU::ReadInputStatusRetMessage ret = mb->read02(dev->mbaddr, p->mbreg,p->q_count); ModbusRTU::ReadInputStatusRetMessage ret = mb->read02(dev->mbaddr,p->mbreg+p->offset,p->q_count);
for( int i=0; i<p->q_count; i++,it++ ) for( int i=0; i<p->q_count; i++,it++ )
it->second->mbval = ret.data[i]; it->second->mbval = ret.data[i];
it--; it--;
...@@ -366,7 +365,7 @@ bool RTUExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -366,7 +365,7 @@ bool RTUExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
case ModbusRTU::fnReadCoilStatus: case ModbusRTU::fnReadCoilStatus:
{ {
ModbusRTU::ReadCoilRetMessage ret = mb->read01(dev->mbaddr,p->mbreg,p->q_count); ModbusRTU::ReadCoilRetMessage ret = mb->read01(dev->mbaddr,p->mbreg+p->offset,p->q_count);
for( int i=0; i<p->q_count; i++,it++ ) for( int i=0; i<p->q_count; i++,it++ )
it->second->mbval = ret.data[i]; it->second->mbval = ret.data[i];
it--; it--;
...@@ -382,13 +381,13 @@ bool RTUExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -382,13 +381,13 @@ bool RTUExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
return false; return false;
} }
ModbusRTU::WriteSingleOutputRetMessage ret = mb->write06(dev->mbaddr,p->mbreg,p->mbval); ModbusRTU::WriteSingleOutputRetMessage ret = mb->write06(dev->mbaddr,p->mbreg+p->offset,p->mbval);
} }
break; break;
case ModbusRTU::fnWriteOutputRegisters: case ModbusRTU::fnWriteOutputRegisters:
{ {
ModbusRTU::WriteOutputMessage msg(dev->mbaddr,p->mbreg); ModbusRTU::WriteOutputMessage msg(dev->mbaddr,p->mbreg+p->offset);
for( int i=0; i<p->q_count; i++,it++ ) for( int i=0; i<p->q_count; i++,it++ )
msg.addData(it->second->mbval); msg.addData(it->second->mbval);
it--; it--;
...@@ -497,22 +496,6 @@ void RTUExchange::updateSM() ...@@ -497,22 +496,6 @@ void RTUExchange::updateSM()
} }
} }
/*
// -----------------------------------------------------------------------------
long RTUExchange::pollRTU188( RSMap::iterator& p )
{
if( !p->rtu )
return 0;
if( p->stype == UniversalIO::DigitalInput )
return p->rtu->getState(p->rtuJack,p->rtuChan,p->stype);
if( p->stype == UniversalIO::AnalogInput )
return p->rtu->getInt(p->rtuJack,p->rtuChan,p->stype);
return 0;
}
*/
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void RTUExchange::processingMessage(UniSetTypes::VoidMessage *msg) void RTUExchange::processingMessage(UniSetTypes::VoidMessage *msg)
{ {
...@@ -576,7 +559,7 @@ void RTUExchange::sysCommand( UniSetTypes::SystemMessage *sm ) ...@@ -576,7 +559,7 @@ 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() ) if( !shm->isLocalwork() )
initRespondList(); initRespondList();
waitSMReady(); waitSMReady();
...@@ -653,7 +636,6 @@ void RTUExchange::sysCommand( UniSetTypes::SystemMessage *sm ) ...@@ -653,7 +636,6 @@ void RTUExchange::sysCommand( UniSetTypes::SystemMessage *sm )
unideb.logFile(fname.c_str()); unideb.logFile(fname.c_str());
unideb << myname << "(sysCommand): ***************** UNIDEB LOG ROTATE *****************" << std::endl; unideb << myname << "(sysCommand): ***************** UNIDEB LOG ROTATE *****************" << std::endl;
} }
dlog << myname << "(sysCommand): logRotate" << std::endl; dlog << myname << "(sysCommand): logRotate" << std::endl;
fname = dlog.getLogFile(); fname = dlog.getLogFile();
if( !fname.empty() ) if( !fname.empty() )
...@@ -989,6 +971,7 @@ bool RTUExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, RTUExchange::RT ...@@ -989,6 +971,7 @@ bool RTUExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, RTUExchange::RT
{ {
r->dev = dev; r->dev = dev;
r->mbval = UniSetTypes::uni_atoi(it.getProp("default").c_str()); r->mbval = UniSetTypes::uni_atoi(it.getProp("default").c_str());
r->offset= UniSetTypes::uni_atoi(it.getProp("mboffset").c_str());
if( dev->dtype == RTUExchange::dtMTR ) if( dev->dtype == RTUExchange::dtMTR )
{ {
...@@ -1021,6 +1004,7 @@ bool RTUExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, RTUExchange::RT ...@@ -1021,6 +1004,7 @@ bool RTUExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, RTUExchange::RT
dlog[Debug::CRIT] << myname << "(initRegInfo): unknown mbreg for " << it.getProp("name") << endl; dlog[Debug::CRIT] << myname << "(initRegInfo): unknown mbreg for " << it.getProp("name") << endl;
return false; return false;
} }
r->mbreg = ModbusRTU::str2mbData(reg); r->mbreg = ModbusRTU::str2mbData(reg);
} }
else // if( dev->dtype == RTUExchange::dtRTU188 ) else // if( dev->dtype == RTUExchange::dtRTU188 )
...@@ -1406,7 +1390,7 @@ void RTUExchange::initRespondList() ...@@ -1406,7 +1390,7 @@ void RTUExchange::initRespondList()
dlog[Debug::WARN] << myname << "(init): <RespondList> empty section..." << endl; dlog[Debug::WARN] << myname << "(init): <RespondList> empty section..." << endl;
} }
else else
dlog[Debug::WARN] << myname << "(init): NO <RespondList> found..." << endl; dlog[Debug::WARN] << myname << "(init): <RespondList> not found..." << endl;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
bool RTUExchange::initRespondInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXML_iterator& it ) bool RTUExchange::initRespondInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXML_iterator& it )
...@@ -1508,21 +1492,21 @@ void RTUExchange::rtuQueryOptimization( RTUDeviceMap& m ) ...@@ -1508,21 +1492,21 @@ void RTUExchange::rtuQueryOptimization( RTUDeviceMap& m )
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 )
{ {
RTUExchange::RegMap::iterator beg = it; RTUExchange::RegMap::iterator beg = it;
ModbusRTU::ModbusData reg = it->second->mbreg; ModbusRTU::ModbusData reg = it->second->mbreg + it->second->offset;
beg->second->q_num = 1; beg->second->q_num = 1;
beg->second->q_count = 1; beg->second->q_count = 1;
it++; it++;
for( ;it!=d->regmap.end(); ++it ) for( ;it!=d->regmap.end(); ++it )
{ {
if( (it->second->mbreg - reg) > 1 ) if( (it->second->mbreg + it->second->offset - reg) > 1 )
break; break;
if( beg->second->mbfunc != it->second->mbfunc ) if( beg->second->mbfunc != it->second->mbfunc )
break; break;
beg->second->q_count++; beg->second->q_count++;
reg = it->second->mbreg; reg = it->second->mbreg + it->second->offset;
it->second->q_num = beg->second->q_count; it->second->q_num = beg->second->q_count;
it->second->q_count = 0; it->second->q_count = 0;
} }
......
...@@ -83,7 +83,7 @@ class RTUExchange: ...@@ -83,7 +83,7 @@ class RTUExchange:
mbval(0),mbreg(0),mbfunc(ModbusRTU::fnUnknown), mbval(0),mbreg(0),mbfunc(ModbusRTU::fnUnknown),
mtrType(MTR::mtUnknown), mtrType(MTR::mtUnknown),
rtuJack(RTUStorage::nUnknown),rtuChan(0), rtuJack(RTUStorage::nUnknown),rtuChan(0),
dev(0), dev(0),offset(0),
q_num(0),q_count(1) q_num(0),q_count(1)
{} {}
...@@ -101,6 +101,8 @@ class RTUExchange: ...@@ -101,6 +101,8 @@ class RTUExchange:
RTUDevice* dev; RTUDevice* dev;
int offset;
// optimization // optimization
int q_num; /*! number in query */ int q_num; /*! number in query */
int q_count; /*! count registers for query */ int q_count; /*! count registers for query */
...@@ -194,6 +196,7 @@ class RTUExchange: ...@@ -194,6 +196,7 @@ class RTUExchange:
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(); void initRespondList();
void initOffsetList();
RTUDevice* addDev( RTUDeviceMap& dmap, ModbusRTU::ModbusAddr a, UniXML_iterator& it ); RTUDevice* addDev( RTUDeviceMap& dmap, ModbusRTU::ModbusAddr a, UniXML_iterator& it );
......
#!/bin/sh #!/bin/sh
uniset-start.sh -f ./uniset-rtuexchange --confile test.xml \ uniset-start.sh -f ./uniset-rtuexchange --confile test.xml \
--rs-dev /dev/ttyUSB0 \ --rs-dev /dev/cbsideA0 \
--rs-name RSExchange \ --rs-name RSExchange \
--rs-speed 38400 \ --rs-speed 38400 \
--rs-filter-field rs \ --rs-filter-field rs \
--rs-filter-value 1 \ --rs-filter-value 1 \
--dlog-add-levels info,crit,warn --dlog-add-levels info,crit,warn,level1
#,level3 #,level3
#!/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
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
ulimit -Sc 1000000000000 ulimit -Sc 1000000000000
uniset-start.sh -f ./uniset-smemory --smemory-id SharedMemory \ uniset-start.sh -f ./uniset-smemory --smemory-id SharedMemory1 \
--confile test.xml \ --confile test.xml \
--unideb-add-levels info,crit,warn,level9,system --unideb-add-levels info,crit,warn,level9,system
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