Commit 1473a804 authored by Pavel Vaynerman's avatar Pavel Vaynerman

debuging RTUExchange

parent a3253850
...@@ -80,28 +80,28 @@ ...@@ -80,28 +80,28 @@
<item id="1" name="HC_in" textname="HC_in" <item id="1" name="HC_in" textname="HC_in"
iotype="DI" character="Info" iotype="DI" character="Info"
rs="2" mbtype="rtu" mbaddr="0x02" mbreg="0x3000" mbfunc="0x02"> rs="3" mbtype="rtu" mbaddr="0x02" mbreg="0x3000" mbfunc="0x02">
<consumers> <consumers>
</consumers> </consumers>
</item> </item>
<item id="2" name="HC_out" textname="HC_out" <item id="2" name="HC_out" textname="HC_out"
iotype="DI" character="Info" iotype="DI" character="Info"
rs="2" mbtype="rtu" mbaddr="0x02" mbreg="0x3001" mbfunc="0x02"> rs="3" mbtype="rtu" mbaddr="0x02" mbreg="0x3001" mbfunc="0x02">
<consumers> <consumers>
</consumers> </consumers>
</item> </item>
<item id="3" name="HC_in" textname="HC_in" <item id="3" name="HC_in" textname="HC_in"
iotype="DI" character="Info" iotype="DI" character="Info"
rs="2" mbtype="rtu" mbaddr="0x02" mbreg="0x3000" mbfunc="0x02"> rs="3" mbtype="rtu" mbaddr="0x02" mbreg="0x3002" mbfunc="0x05">
<consumers> <consumers>
</consumers> </consumers>
</item> </item>
<item id="4" name="HC_out" textname="HC_out" <item id="4" name="HC_out" textname="HC_out"
iotype="DO" character="Info" iotype="DO" character="Info"
rs="2" mbtype="rtu" mbaddr="0x02" mbreg="0x301" mbfunc="0x05"> rs="3" mbtype="rtu" mbaddr="0x02" mbreg="0x301" mbfunc="0x05">
<consumers> <consumers>
</consumers> </consumers>
</item> </item>
...@@ -115,7 +115,7 @@ ...@@ -115,7 +115,7 @@
<item id="6" name="HC_out" textname="HC_out" <item id="6" name="HC_out" textname="HC_out"
iotype="DI" character="Info" iotype="DI" character="Info"
rs="2" mbtype="rtu" mbaddr="0x02" mbreg="0x304" mbfunc="0x05"> rs="3" mbtype="rtu" mbaddr="0x02" mbreg="0x3003" mbfunc="0x05">
<consumers> <consumers>
</consumers> </consumers>
</item> </item>
......
...@@ -369,8 +369,7 @@ bool MBMaster::writeReg( MBMap::iterator& p, long val ) ...@@ -369,8 +369,7 @@ bool MBMaster::writeReg( MBMap::iterator& p, long val )
if( p->mbfunc == fnForceMultipleCoils ) if( p->mbfunc == fnForceMultipleCoils )
{ {
ModbusRTU::ForceCoilsMessage msg(p->mbaddr,p->mbreg); ModbusRTU::ForceCoilsMessage msg(p->mbaddr,p->mbreg);
ModbusRTU::DataBits16 b(val); msg.addBit( val ? true : false );
msg.addData(b);
ModbusRTU::ForceCoilsRetMessage ret = mb->write0F(msg); ModbusRTU::ForceCoilsRetMessage ret = mb->write0F(msg);
return true; return true;
} }
......
...@@ -330,7 +330,7 @@ void RTUExchange::poll() ...@@ -330,7 +330,7 @@ void RTUExchange::poll()
if( d->resp_real ) if( d->resp_real )
{ {
dlog[Debug::CRIT] << myname << "(poll): FAILED ask addr=" << ModbusRTU::addr2str(d->mbaddr) dlog[Debug::CRIT] << myname << "(poll): FAILED ask addr=" << ModbusRTU::addr2str(d->mbaddr)
<< "reg=" << ModbusRTU::dat2str(it->second->mbreg) << " reg=" << ModbusRTU::dat2str(it->second->mbreg)
<< " -> " << ex << endl; << " -> " << ex << endl;
// d->resp_real = false; // d->resp_real = false;
} }
...@@ -470,17 +470,18 @@ bool RTUExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -470,17 +470,18 @@ bool RTUExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
{ {
ModbusRTU::ForceCoilsMessage msg(dev->mbaddr,p->mbreg+p->offset); ModbusRTU::ForceCoilsMessage 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.addBit( it->second->mbval ? true : false ); msg.addBit( (it->second->mbval ? true : false) );
it--; it--;
// cerr << "*********** (write multiple): " << msg << endl;
ModbusRTU::ForceCoilsRetMessage ret = mb->write0F(msg); ModbusRTU::ForceCoilsRetMessage ret = mb->write0F(msg);
} }
break; break;
default: default:
{ {
if( dlog.debugging(Debug::INFO) ) if( dlog.debugging(Debug::WARN) )
dlog[Debug::INFO] << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg) dlog[Debug::WARN] << myname << "(pollRTU): mbreg=" << ModbusRTU::dat2str(p->mbreg)
<< " IGNORE mfunc=" << (int)p->mbfunc << " ..." << endl; << " IGNORE mfunc=" << (int)p->mbfunc << " ..." << endl;
return false; return false;
} }
...@@ -764,8 +765,7 @@ void RTUExchange::askSensors( UniversalIO::UIOCommand cmd ) ...@@ -764,8 +765,7 @@ void RTUExchange::askSensors( UniversalIO::UIOCommand cmd )
RTUDevice* d(it1->second); RTUDevice* d(it1->second);
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 )
{ {
if( it->second->mbfunc != ModbusRTU::fnWriteOutputRegisters && if( !isWriteFunction(it->second->mbfunc) )
it->second->mbfunc != ModbusRTU::fnWriteOutputSingleRegister )
continue; continue;
for( PList::iterator i=it->second->slst.begin(); i!=it->second->slst.end(); ++i ) for( PList::iterator i=it->second->slst.begin(); i!=it->second->slst.end(); ++i )
...@@ -797,16 +797,24 @@ void RTUExchange::sensorInfo( UniSetTypes::SensorMessage* sm ) ...@@ -797,16 +797,24 @@ void RTUExchange::sensorInfo( UniSetTypes::SensorMessage* sm )
RTUDevice* d(it1->second); RTUDevice* d(it1->second);
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 )
{ {
if( it->second->mbfunc != ModbusRTU::fnWriteOutputRegisters && if( !isWriteFunction(it->second->mbfunc) )
it->second->mbfunc != ModbusRTU::fnWriteOutputSingleRegister )
continue; continue;
for( PList::iterator i=it->second->slst.begin(); i!=it->second->slst.end(); ++i ) for( PList::iterator i=it->second->slst.begin(); i!=it->second->slst.end(); ++i )
{ {
// cerr << myname << "(sensorInfo): ************ update si.id=" << sm->id if( sm->id == i->si.id && sm->node == i->si.node )
// << " reg=" << ModbusRTU::dat2str(i->reg->mbreg) << endl; {
updateRSProperty( &(*i),true); if( dlog.debugging(Debug::INFO) )
return; {
dlog[Debug::INFO] << myname<< "(sensorInfo): si.id=" << sm->id
<< " reg=" << ModbusRTU::dat2str(i->reg->mbreg)
<< " val=" << sm->value << endl;
}
i->value = sm->value;
updateRSProperty( &(*i),true);
return;
}
} }
} }
} }
...@@ -1290,6 +1298,7 @@ bool RTUExchange::initItem( UniXML_iterator& it ) ...@@ -1290,6 +1298,7 @@ bool RTUExchange::initItem( UniXML_iterator& it )
RSProperty* p1 = addProp(ri->slst,p); RSProperty* p1 = addProp(ri->slst,p);
if( !p1 ) if( !p1 )
return false; return false;
p1->reg = ri; p1->reg = ri;
if( p1->rnum > 1 ) if( p1->rnum > 1 )
...@@ -1441,7 +1450,8 @@ std::ostream& operator<<( std::ostream& os, const RTUExchange::DeviceType& dt ) ...@@ -1441,7 +1450,8 @@ std::ostream& operator<<( std::ostream& os, const RTUExchange::DeviceType& dt )
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
std::ostream& operator<<( std::ostream& os, const RTUExchange::RSProperty& p ) std::ostream& operator<<( std::ostream& os, const RTUExchange::RSProperty& p )
{ {
os << " sid=" << p.si.id os << " (" << ModbusRTU::dat2str(p.reg->mbreg) << ")"
<< " sid=" << p.si.id
<< " stype=" << p.stype << " stype=" << p.stype
<< " nbit=" << p.nbit << " nbit=" << p.nbit
<< " nbyte=" << p.nbyte << " nbyte=" << p.nbyte
...@@ -1655,7 +1665,7 @@ void RTUExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1655,7 +1665,7 @@ void RTUExchange::updateRSProperty( RSProperty* p, bool write_only )
RegInfo* r(p->reg->rit->second); RegInfo* r(p->reg->rit->second);
bool save = isWriteFunction( r->mbfunc ); bool save = isWriteFunction( r->mbfunc );
if( !save && write_only ) if( !save && write_only )
return; return;
......
...@@ -209,7 +209,7 @@ class RTUExchange: ...@@ -209,7 +209,7 @@ class RTUExchange:
RTUDevice* addDev( RTUDeviceMap& dmap, ModbusRTU::ModbusAddr a, UniXML_iterator& it ); RTUDevice* addDev( RTUDeviceMap& dmap, ModbusRTU::ModbusAddr a, UniXML_iterator& it );
RegInfo* addReg( RegMap& rmap, ModbusRTU::ModbusData r, UniXML_iterator& it, RegInfo* addReg( RegMap& rmap, ModbusRTU::ModbusData r, UniXML_iterator& it,
RTUDevice* dev, RegInfo* rcopy=0 ); RTUDevice* dev, RegInfo* rcopy=0 );
RSProperty* addProp(PList& plist, RSProperty& p ); RSProperty* addProp( PList& plist, RSProperty& p );
bool initMTRitem( UniXML_iterator& it, RegInfo* p ); bool initMTRitem( UniXML_iterator& it, RegInfo* p );
bool initRTU188item( UniXML_iterator& it, RegInfo* p ); bool initRTU188item( UniXML_iterator& it, RegInfo* p );
......
...@@ -5,8 +5,8 @@ uniset-start.sh -f ./uniset-rtuexchange --confile test.xml \ ...@@ -5,8 +5,8 @@ uniset-start.sh -f ./uniset-rtuexchange --confile test.xml \
--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 3 \
--dlog-add-levels info,crit,warn \ --dlog-add-levels crit,warn \
--rs-force 0 \ --rs-force 0 \
--rs-force-out 0 \ --rs-force-out 0 \
#,level3 #,level3
......
...@@ -539,7 +539,7 @@ namespace ModbusRTU ...@@ -539,7 +539,7 @@ namespace ModbusRTU
public ModbusHeader public ModbusHeader
{ {
ModbusData start; /*!< */ ModbusData start; /*!< */
ModbusData quant; /*!< */ ModbusData quant; /*!< */
ModbusByte bcnt; /*!< */ ModbusByte bcnt; /*!< */
/*! */ /*! */
ModbusByte data[MAXLENPACKET-sizeof(ModbusData)*2-sizeof(ModbusByte)]; ModbusByte data[MAXLENPACKET-sizeof(ModbusData)*2-sizeof(ModbusByte)];
...@@ -615,7 +615,7 @@ namespace ModbusRTU ...@@ -615,7 +615,7 @@ namespace ModbusRTU
public ModbusHeader public ModbusHeader
{ {
ModbusData start; /*!< */ ModbusData start; /*!< */
ModbusData quant; /*!< */ ModbusData quant; /*!< */
// ------- from slave ------- // ------- from slave -------
ForceCoilsRetMessage( ModbusMessage& m ); ForceCoilsRetMessage( ModbusMessage& m );
......
...@@ -1204,6 +1204,7 @@ ForceCoilsMessage::ForceCoilsMessage( ModbusAddr a, ModbusData s ): ...@@ -1204,6 +1204,7 @@ ForceCoilsMessage::ForceCoilsMessage( ModbusAddr a, ModbusData s ):
{ {
addr = a; addr = a;
func = fnForceMultipleCoils; func = fnForceMultipleCoils;
memset(data,0,sizeof(data));
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
bool ForceCoilsMessage::addData( DataBits d ) bool ForceCoilsMessage::addData( DataBits d )
...@@ -1280,8 +1281,7 @@ ModbusMessage ForceCoilsMessage::transport_msg() ...@@ -1280,8 +1281,7 @@ ModbusMessage ForceCoilsMessage::transport_msg()
// //
memcpy(mm.data,&d,ind); memcpy(mm.data,&d,ind);
// copy bcnt // copy bcnt
bcnt = quant*sizeof(ModbusData);
memcpy(&(mm.data[ind]),&bcnt,sizeof(bcnt)); memcpy(&(mm.data[ind]),&bcnt,sizeof(bcnt));
ind+=sizeof(bcnt); ind+=sizeof(bcnt);
......
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