Commit e25e16f7 authored by Pavel Vainerman's avatar Pavel Vainerman

(ModbuServer): сделал перегруженный вариант функции receive с одним адресом.

parent b00713e8
...@@ -34,6 +34,9 @@ class ModbusRTUSlave: ...@@ -34,6 +34,9 @@ class ModbusRTUSlave:
virtual ModbusRTU::mbErrCode receive( const std::unordered_set<ModbusRTU::ModbusAddr>& vmbaddr, timeout_t msecTimeout ) override; virtual ModbusRTU::mbErrCode receive( const std::unordered_set<ModbusRTU::ModbusAddr>& vmbaddr, timeout_t msecTimeout ) override;
// перегруженная версия
virtual ModbusRTU::mbErrCode receive( ModbusRTU::ModbusAddr addr, timeout_t msec ) override;
virtual void cleanupChannel() override virtual void cleanupChannel() override
{ {
if(port) port->cleanupChannel(); if(port) port->cleanupChannel();
......
...@@ -22,6 +22,8 @@ class ModbusServer ...@@ -22,6 +22,8 @@ class ModbusServer
void setLog( std::shared_ptr<DebugStream> dlog ); void setLog( std::shared_ptr<DebugStream> dlog );
std::unordered_set<ModbusRTU::ModbusAddr> addr2vaddr( ModbusRTU::ModbusAddr& mbaddr );
/*! обработать очередное сообщение /*! обработать очередное сообщение
\param vaddr - вектор адресов для которых принимать сообщения \param vaddr - вектор адресов для которых принимать сообщения
\param msecTimeout - время ожидания прихода очередного сообщения в мсек. \param msecTimeout - время ожидания прихода очередного сообщения в мсек.
...@@ -29,6 +31,9 @@ class ModbusServer ...@@ -29,6 +31,9 @@ class ModbusServer
*/ */
virtual ModbusRTU::mbErrCode receive( const std::unordered_set<ModbusRTU::ModbusAddr>& vaddr, timeout_t msecTimeout ) = 0; virtual ModbusRTU::mbErrCode receive( const std::unordered_set<ModbusRTU::ModbusAddr>& vaddr, timeout_t msecTimeout ) = 0;
// перегруженная версия с "одним" адресом
virtual ModbusRTU::mbErrCode receive( ModbusRTU::ModbusAddr addr, timeout_t msec );
/*! Проверка входит ли данный адрес в список /*! Проверка входит ли данный адрес в список
* \param vaddr - вектор адресов * \param vaddr - вектор адресов
* \param addr - адрес который ищем * \param addr - адрес который ищем
......
...@@ -23,11 +23,12 @@ class ModbusTCPServer: ...@@ -23,11 +23,12 @@ class ModbusTCPServer:
ModbusTCPServer( ost::InetAddress& ia, int port = 502 ); ModbusTCPServer( ost::InetAddress& ia, int port = 502 );
virtual ~ModbusTCPServer(); virtual ~ModbusTCPServer();
std::unordered_set<ModbusRTU::ModbusAddr> addr2vaddr( ModbusRTU::ModbusAddr& mbaddr );
/*! Однопоточная обработка (каждый запрос последовательно), с разрывом соединения в конце */ /*! Однопоточная обработка (каждый запрос последовательно), с разрывом соединения в конце */
virtual ModbusRTU::mbErrCode receive( const std::unordered_set<ModbusRTU::ModbusAddr>& vmbaddr, timeout_t msecTimeout ) override; virtual ModbusRTU::mbErrCode receive( const std::unordered_set<ModbusRTU::ModbusAddr>& vmbaddr, timeout_t msecTimeout ) override;
// перегруженная версия
virtual ModbusRTU::mbErrCode receive( ModbusRTU::ModbusAddr addr, timeout_t msec ) override;
/*! Многопоточная обработка (создаётся по потоку для каждого "клиента") /*! Многопоточная обработка (создаётся по потоку для каждого "клиента")
\return TRUE - если запрос пришёл \return TRUE - если запрос пришёл
\return FALSE - если timeout \return FALSE - если timeout
......
...@@ -111,7 +111,11 @@ mbErrCode ModbusRTUSlave::receive(const std::unordered_set<ModbusAddr>& vmbaddr, ...@@ -111,7 +111,11 @@ mbErrCode ModbusRTUSlave::receive(const std::unordered_set<ModbusAddr>& vmbaddr,
return processing(buf); return processing(buf);
} }
// --------------------------------------------------------------------------------
mbErrCode ModbusRTUSlave::receive(ModbusAddr addr, timeout_t msec)
{
return ModbusServer::receive(addr,msec);
}
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
ComPort::Speed ModbusRTUSlave::getSpeed() ComPort::Speed ModbusRTUSlave::getSpeed()
{ {
......
...@@ -1494,6 +1494,19 @@ void ModbusServer::setLog( std::shared_ptr<DebugStream> l ) ...@@ -1494,6 +1494,19 @@ void ModbusServer::setLog( std::shared_ptr<DebugStream> l )
{ {
this->dlog = l; this->dlog = l;
} }
std::unordered_set<ModbusAddr> ModbusServer::addr2vaddr(ModbusAddr& mbaddr)
{
std::unordered_set<ModbusRTU::ModbusAddr> v;
v.emplace(mbaddr);
return std::move(v);
}
// -------------------------------------------------------------------------
mbErrCode ModbusServer::receive( ModbusAddr a, timeout_t msec )
{
auto v = addr2vaddr(a);
return receive(v,msec);
}
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void ModbusServer::initLog( UniSetTypes::Configuration* conf, void ModbusServer::initLog( UniSetTypes::Configuration* conf,
......
...@@ -26,13 +26,6 @@ ModbusTCPServer::~ModbusTCPServer() ...@@ -26,13 +26,6 @@ ModbusTCPServer::~ModbusTCPServer()
terminate(); terminate();
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
std::unordered_set<ModbusAddr> ModbusTCPServer::addr2vaddr(ModbusAddr& mbaddr)
{
std::unordered_set<ModbusRTU::ModbusAddr> v;
v.emplace(mbaddr);
return std::move(v);
}
// -------------------------------------------------------------------------
void ModbusTCPServer::setMaxSessions( unsigned int num ) void ModbusTCPServer::setMaxSessions( unsigned int num )
{ {
if( num < sessCount ) if( num < sessCount )
...@@ -238,6 +231,11 @@ mbErrCode ModbusTCPServer::receive(const std::unordered_set<ModbusAddr>& vmbaddr ...@@ -238,6 +231,11 @@ mbErrCode ModbusTCPServer::receive(const std::unordered_set<ModbusAddr>& vmbaddr
return res; return res;
} }
// --------------------------------------------------------------------------------
mbErrCode ModbusTCPServer::receive(ModbusAddr addr, timeout_t msec)
{
return ModbusServer::receive(addr,msec);
}
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
void ModbusTCPServer::setChannelTimeout( timeout_t msec ) void ModbusTCPServer::setChannelTimeout( timeout_t msec )
......
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