Commit 01a03deb authored by Pavel Vainerman's avatar Pavel Vainerman

(Modbus): работы над ModbusMaster умеющим работать с несколькими

каналами связи
parent cf98efd1
......@@ -50,6 +50,16 @@
<item addr="0x01" invert="0" respondSensor="RespondRTU_S" timeout="5000" modeSensor="MB1_Mode_AS"/>
</DeviceList>
</MBMaster1>
<MBMultiMaster1 levels="info,warn,crit" name="MBMaster1" poll_time="200" reply_timeout="60">
<DeviceList>
<item addr="0x01" invert="0" respondSensor="RespondRTU_S" timeout="5000" modeSensor="MB1_Mode_AS"/>
</DeviceList>
<SlaveList>
<item ip="127.0.0.1" port="2049" recv_timeout="200"/>
<item ip="127.0.0.1" port="2048" recv_timeout="200"/>
</SlaveList>
</MBMultiMaster1>
<MBSlave1 addr="0x31" aftersend-pause="0" dev="/dev/ttyS0" levels="info,warn,crit" name="MBSlave1" poll_time="200" reply_timeout="60" speed="9600">
<filelist>
<!-- Список файлов разрешённых для передачи по modbus
......@@ -219,6 +229,7 @@
<item id="6007" name="UDPExchange2"/>
<item id="6008" name="UNetExchange"/>
<item id="6009" name="MBMaster2"/>
<item id="6010" name="MBMultiMaster1"/>
</objects>
</ObjectsMap>
<messages idfromfile="1" name="messages">
......
......@@ -6,7 +6,7 @@ libMBMaster_la_LIBADD = $(top_builddir)/lib/libUniSet.la \
libMBMaster_la_CXXFLAGS = -I$(top_builddir)/extensions/include -I$(top_builddir)/extensions/SharedMemory $(SIGC_CFLAGS)
libMBMaster_la_SOURCES = MBExchange.cc RTUStorage.cc
bin_PROGRAMS = @PACKAGE@-mbtcpmaster @PACKAGE@-rtuexchange @PACKAGE@-mtr-conv @PACKAGE@-rtu188-state @PACKAGE@-vtconv @PACKAGE@-mtr-setup @PACKAGE@-mtr-read
bin_PROGRAMS = @PACKAGE@-mbtcpmaster @PACKAGE@-mbtcpmultimaster @PACKAGE@-rtuexchange @PACKAGE@-mtr-conv @PACKAGE@-rtu188-state @PACKAGE@-vtconv @PACKAGE@-mtr-setup @PACKAGE@-mtr-read
lib_LTLIBRARIES = libUniSetMBTCPMaster.la libUniSetRTU.la
# -------------------- Mobus TCP -------------------
......@@ -20,7 +20,7 @@ libUniSetMBTCPMaster_la_LIBADD = libMBMaster.la $(top_builddir)/lib/libUniSet.l
$(top_builddir)/extensions/lib/libUniSetExtensions.la \
$(SIGC_LIBS)
libUniSetMBTCPMaster_la_CXXFLAGS = -I$(top_builddir)/extensions/include -I$(top_builddir)/extensions/SharedMemory $(SIGC_CFLAGS)
libUniSetMBTCPMaster_la_SOURCES = MBTCPMaster.cc
libUniSetMBTCPMaster_la_SOURCES = MBTCPMaster.cc MBTCPMultiMaster.cc
@PACKAGE@_mbtcpmaster_SOURCES = main.cc
@PACKAGE@_mbtcpmaster_LDADD = libUniSetMBTCPMaster.la libMBMaster.la $(top_builddir)/lib/libUniSet.la \
......@@ -29,6 +29,13 @@ libUniSetMBTCPMaster_la_SOURCES = MBTCPMaster.cc
$(SIGC_LIBS)
@PACKAGE@_mbtcpmaster_CXXFLAGS = -I$(top_builddir)/extensions/include -I$(top_builddir)/extensions/SharedMemory $(SIGC_CFLAGS)
@PACKAGE@_mbtcpmultimaster_SOURCES = multi-main.cc
@PACKAGE@_mbtcpmultimaster_LDADD = libUniSetMBTCPMaster.la libMBMaster.la $(top_builddir)/lib/libUniSet.la \
$(top_builddir)/extensions/SharedMemory/libUniSetSharedMemory.la \
$(top_builddir)/extensions/lib/libUniSetExtensions.la \
$(SIGC_LIBS)
@PACKAGE@_mbtcpmultimaster_CXXFLAGS = -I$(top_builddir)/extensions/include -I$(top_builddir)/extensions/SharedMemory $(SIGC_CFLAGS)
# -------------------- Mobus RTU -------------------
# не забывайте править версию в pc-файле
URTU_VER=2:1:0
......
../../Utilities/scripts/uniset-start.sh
\ No newline at end of file
......@@ -21,6 +21,8 @@ class ModbusTCPMaster:
void disconnect();
bool isConnection();
static bool checkConnection( const std::string ip, int port, int timeout_msec=100 );
inline void setForceDisconnect( bool s )
{
force_disconnect = s;
......
......@@ -55,7 +55,7 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg,
if( iaddr.empty() )
{
dlog[Debug::WARN] << "(query): unknown ip address for server..." << endl;
return erHardwareError;
return erTimeOut; // erHardwareError
}
if( !isConnection() )
......@@ -248,7 +248,7 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg,
dlog[Debug::WARN] << "(query): cath..." << endl;
}
return erHardwareError;
return erTimeOut; // erHardwareError
}
// -------------------------------------------------------------------------
void ModbusTCPMaster::cleanInputStream()
......@@ -262,6 +262,28 @@ void ModbusTCPMaster::cleanInputStream()
while( ret > 0);
}
// -------------------------------------------------------------------------
bool ModbusTCPMaster::checkConnection( const std::string ip, int port, int timeout_msec )
{
try
{
ostringstream s;
s << ip << ":" << port;
// Проверяем просто попыткой создать соединение..
// ost::Thread::setException(ost::Thread::throwException);
// TCPStream (const char *name, Family family=IPV4, unsigned mss=536, bool throwflag=false, timeout_t timer=0)
ost::TCPStream t(s.str().c_str(),ost::Socket::IPV4,536,true,timeout_msec);
t.disconnect();
return true;
}
catch(...)
{
}
return false;
}
// -------------------------------------------------------------------------
void ModbusTCPMaster::reconnect()
{
if( dlog.debugging(Debug::INFO) )
......@@ -330,16 +352,22 @@ void ModbusTCPMaster::connect( ost::InetAddress addr, int port )
}
catch( std::exception& e )
{
if( dlog.debugging(Debug::CRIT) )
{
ostringstream s;
s << "(ModbusTCPMaster): connection " << s.str() << " error: " << e.what();
dlog[Debug::CRIT] << s.str() << std::endl;
}
}
catch( ... )
{
if( dlog.debugging(Debug::CRIT) )
{
ostringstream s;
s << "(ModbusTCPMaster): connection " << s.str() << " error: catch ...";
dlog[Debug::CRIT] << s.str() << std::endl;
}
}
// }
}
// -------------------------------------------------------------------------
......
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