Commit e25e16f7 authored by Pavel Vainerman's avatar Pavel Vainerman

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

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