Commit 5d466f7a authored by Pavel Vainerman's avatar Pavel Vainerman

fixed minor bugs in ModbusTCPMaster

parent 1044b53c
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
Name: libuniset Name: libuniset
Version: 0.97 Version: 0.97
Release: eter30 Release: eter31
Summary: UniSet - library for building distributed industrial control systems Summary: UniSet - library for building distributed industrial control systems
License: GPL License: GPL
Group: Development/C++ Group: Development/C++
...@@ -178,6 +178,9 @@ rm -f %buildroot%_libdir/*.la ...@@ -178,6 +178,9 @@ rm -f %buildroot%_libdir/*.la
%exclude %_pkgconfigdir/libUniSet.pc %exclude %_pkgconfigdir/libUniSet.pc
%changelog %changelog
* Wed Oct 21 2009 Pavel Vainerman <pv@altlinux.ru> 0.97-eter30
- new build
* Sun Oct 18 2009 Pavel Vainerman <pv@altlinux.ru> 0.97-eter29 * Sun Oct 18 2009 Pavel Vainerman <pv@altlinux.ru> 0.97-eter29
- new build - new build
......
...@@ -392,6 +392,8 @@ bool MBTCPMaster::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -392,6 +392,8 @@ bool MBTCPMaster::pollRTU( RTUDevice* dev, RegMap::iterator& it )
<< " IGNORE WRITE SINGLE REGISTER (0x06) q_count=" << p->q_count << " ..." << endl; << " IGNORE WRITE SINGLE REGISTER (0x06) q_count=" << p->q_count << " ..." << endl;
return false; return false;
} }
cerr << "**** mbreg=" << ModbusRTU::dat2str(p->mbreg) << " val=" << ModbusRTU::dat2str(p->mbval) << endl;
ModbusRTU::WriteSingleOutputRetMessage ret = mb->write06(dev->mbaddr,p->mbreg+p->offset,p->mbval); ModbusRTU::WriteSingleOutputRetMessage ret = mb->write06(dev->mbaddr,p->mbreg+p->offset,p->mbval);
} }
break; break;
...@@ -415,6 +417,7 @@ bool MBTCPMaster::pollRTU( RTUDevice* dev, RegMap::iterator& it ) ...@@ -415,6 +417,7 @@ bool MBTCPMaster::pollRTU( RTUDevice* dev, RegMap::iterator& it )
return false; return false;
} }
cerr << "****(coil) mbreg=" << ModbusRTU::dat2str(p->mbreg) << " val=" << ModbusRTU::dat2str(p->mbval) << endl;
ModbusRTU::ForceSingleCoilRetMessage ret = mb->write05(dev->mbaddr,p->mbreg+p->offset,p->mbval); ModbusRTU::ForceSingleCoilRetMessage ret = mb->write05(dev->mbaddr,p->mbreg+p->offset,p->mbval);
} }
break; break;
......
...@@ -54,6 +54,13 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg, ...@@ -54,6 +54,13 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg,
if( !isConnection() ) if( !isConnection() )
{ {
if( dlog.debugging(Debug::INFO) )
dlog[Debug::INFO] << "(ModbusTCPMaster): no connection.. reconnnect..." << endl;
reconnect();
}
if( !isConnection() )
{
dlog[Debug::WARN] << "(query): not connected to server..." << endl; dlog[Debug::WARN] << "(query): not connected to server..." << endl;
return erTimeOut; return erTimeOut;
} }
...@@ -95,7 +102,13 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg, ...@@ -95,7 +102,13 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg,
return res; return res;
if( !tcp->isPending(ost::Socket::pendingOutput,timeout) ) if( !tcp->isPending(ost::Socket::pendingOutput,timeout) )
{
if( dlog.debugging(Debug::INFO) )
dlog[Debug::INFO] << "(ModbusTCPMaster): no write pending.. reconnnect.." << endl;
reconnect();
return erTimeOut; return erTimeOut;
}
if( timeout != UniSetTimer::WaitUpTime ) if( timeout != UniSetTimer::WaitUpTime )
{ {
...@@ -174,21 +187,25 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg, ...@@ -174,21 +187,25 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg,
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void ModbusTCPMaster::reconnect() void ModbusTCPMaster::reconnect()
{ {
if( dlog.debugging(Debug::INFO) )
dlog[Debug::INFO] << "(ModbusTCPMaster): reconnect " << iaddr << endl;
if( tcp ) if( tcp )
{ {
tcp->disconnect(); tcp->disconnect();
delete tcp; delete tcp;
} }
if( dlog.debugging(Debug::INFO) )
dlog[Debug::INFO] << "(ModbusTCPMaster): reconnect " << iaddr << endl;
tcp = new ost::TCPStream(iaddr.c_str()); tcp = new ost::TCPStream(iaddr.c_str());
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void ModbusTCPMaster::connect( ost::InetAddress addr, int port ) void ModbusTCPMaster::connect( ost::InetAddress addr, int port )
{ {
if( !tcp ) if( tcp )
{ disconnect();
// if( !tcp )
// {
ostringstream s; ostringstream s;
s << addr << ":" << port; s << addr << ":" << port;
...@@ -197,17 +214,17 @@ void ModbusTCPMaster::connect( ost::InetAddress addr, int port ) ...@@ -197,17 +214,17 @@ void ModbusTCPMaster::connect( ost::InetAddress addr, int port )
iaddr = s.str(); iaddr = s.str();
tcp = new ost::TCPStream(iaddr.c_str()); tcp = new ost::TCPStream(iaddr.c_str());
} // }
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void ModbusTCPMaster::disconnect() void ModbusTCPMaster::disconnect()
{ {
if( dlog.debugging(Debug::INFO) )
dlog[Debug::INFO] << "(ModbusTCPMaster): disconnect." << endl;
if( !tcp ) if( !tcp )
return; return;
// if( dlog.debugging(Debug::INFO) )
// dlog[Debug::INFO] << "(ModbusTCPMaster): disconnect." << endl;
tcp->disconnect(); tcp->disconnect();
delete tcp; delete tcp;
tcp = 0; tcp = 0;
......
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