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

debuging RTUExchange

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