UniSet 2.35.2
Открытые типы | Открытые члены | Защищенные члены | Полный список членов класса
Класс uniset::ModbusTCPSession

The ModbusTCPSession class Класс рассчитан на совместную работу с ModbusTCPServer, т.к. построен на основе libev, и главный цикл (default_loop) находиться там. Подробнее...

#include <ModbusTCPSession.h>

Граф наследования:uniset::ModbusTCPSession:
Inheritance graph
[см. легенду]
Граф связей класса uniset::ModbusTCPSession:
Collaboration graph
[см. легенду]

Открытые типы

typedef sigc::slot< void, const ModbusTCPSession * > FinalSlot
 
- Открытые типы унаследованные от uniset::ModbusServerSlot
typedef sigc::slot< ModbusRTU::mbErrCode, const ModbusRTU::ReadCoilMessage &, ModbusRTU::ReadCoilRetMessage & > ReadCoilSlot
 
typedef sigc::slot< ModbusRTU::mbErrCode, const ModbusRTU::ReadInputStatusMessage &, ModbusRTU::ReadInputStatusRetMessage & > ReadInputStatusSlot
 
typedef sigc::slot< ModbusRTU::mbErrCode, const ModbusRTU::ReadOutputMessage &, ModbusRTU::ReadOutputRetMessage & > ReadOutputSlot
 
typedef sigc::slot< ModbusRTU::mbErrCode, const ModbusRTU::ReadInputMessage &, ModbusRTU::ReadInputRetMessage & > ReadInputSlot
 
typedef sigc::slot< ModbusRTU::mbErrCode, const ModbusRTU::ForceSingleCoilMessage &, ModbusRTU::ForceSingleCoilRetMessage & > ForceSingleCoilSlot
 
typedef sigc::slot< ModbusRTU::mbErrCode, const ModbusRTU::WriteSingleOutputMessage &, ModbusRTU::WriteSingleOutputRetMessage & > WriteSingleOutputSlot
 
typedef sigc::slot< ModbusRTU::mbErrCode, const ModbusRTU::ForceCoilsMessage &, ModbusRTU::ForceCoilsRetMessage & > ForceCoilsSlot
 
typedef sigc::slot< ModbusRTU::mbErrCode, const ModbusRTU::WriteOutputMessage &, ModbusRTU::WriteOutputRetMessage & > WriteOutputSlot
 
typedef sigc::slot< ModbusRTU::mbErrCode, const ModbusRTU::DiagnosticMessage &, ModbusRTU::DiagnosticRetMessage & > DiagnosticsSlot
 
typedef sigc::slot< ModbusRTU::mbErrCode, const ModbusRTU::MEIMessageRDI &, ModbusRTU::MEIMessageRetRDI & > MEIRDISlot
 
typedef sigc::slot< ModbusRTU::mbErrCode, const ModbusRTU::JournalCommandMessage &, ModbusRTU::JournalCommandRetMessage & > JournalCommandSlot
 
typedef sigc::slot< ModbusRTU::mbErrCode, const ModbusRTU::SetDateTimeMessage &, ModbusRTU::SetDateTimeRetMessage & > SetDateTimeSlot
 
typedef sigc::slot< ModbusRTU::mbErrCode, const ModbusRTU::RemoteServiceMessage &, ModbusRTU::RemoteServiceRetMessage & > RemoteServiceSlot
 
typedef sigc::slot< ModbusRTU::mbErrCode, const ModbusRTU::FileTransferMessage &, ModbusRTU::FileTransferRetMessage & > FileTransferSlot
 
- Открытые типы унаследованные от uniset::ModbusServer
typedef sigc::signal< ModbusRTU::mbErrCode, const std::unordered_set< ModbusRTU::ModbusAddr >, timeout_t > PreReceiveSignal
 
typedef sigc::signal< void, ModbusRTU::mbErrCode > PostReceiveSignal
 
typedef std::unordered_map< ModbusRTU::mbErrCode, size_t > ExchangeErrorMap
 

Открытые члены

 ModbusTCPSession (const Poco::Net::StreamSocket &s, const std::unordered_set< ModbusRTU::ModbusAddr > &vmbaddr, timeout_t timeout)
 
void cleanInputStream ()
 
virtual void cleanupChannel () override
 
virtual void terminate () override
 
void connectFinalSession (FinalSlot sl)
 
std::string getClientAddress () const
 
void setSessionTimeout (double t)
 
void run (ev::loop_ref &loop)
 
virtual bool isActive () const override
 
- Открытые члены унаследованные от uniset::ModbusServerSlot
void connectReadCoil (ReadCoilSlot sl)
 
void connectReadInputStatus (ReadInputStatusSlot sl)
 
void connectReadOutput (ReadOutputSlot sl)
 
void connectReadInput (ReadInputSlot sl)
 
void connectForceSingleCoil (ForceSingleCoilSlot sl)
 
void connectWriteSingleOutput (WriteSingleOutputSlot sl)
 
void connectDiagnostics (DiagnosticsSlot sl)
 
void connectMEIRDI (MEIRDISlot sl)
 
void connectForceCoils (ForceCoilsSlot sl)
 
void connectWriteOutput (WriteOutputSlot sl)
 
void connectJournalCommand (JournalCommandSlot sl)
 
void connectSetDateTime (SetDateTimeSlot sl)
 
void connectRemoteService (RemoteServiceSlot sl)
 
void connectFileTransfer (FileTransferSlot sl)
 
- Открытые члены унаследованные от uniset::ModbusServer
void initLog (uniset::Configuration *conf, const std::string &name, const std::string &logfile="")
 
void setLog (std::shared_ptr< DebugStream > dlog)
 
std::shared_ptr< DebugStreamlog ()
 
ModbusRTU::mbErrCode receive (const std::unordered_set< ModbusRTU::ModbusAddr > &vaddr, timeout_t msecTimeout)
 
virtual ModbusRTU::mbErrCode receive_one (const ModbusRTU::ModbusAddr addr, timeout_t msec)
 
PreReceiveSignal signal_pre_receive ()
 
PostReceiveSignal signal_post_receive ()
 
timeout_t setAfterSendPause (timeout_t msec)
 
timeout_t setReplyTimeout (timeout_t msec)
 
void setRecvTimeout (timeout_t msec)
 
void setSleepPause (timeout_t msec)
 
void setCRCNoCheckit (bool set)
 
bool isCRCNoCheckit () const
 
void setBroadcastMode (bool set)
 
bool getBroadcastMode () const
 
void setCleanBeforeSend (bool set)
 
bool getCleanBeforeSend () const
 
ExchangeErrorMap getErrorMap ()
 
size_t getErrCount (ModbusRTU::mbErrCode e) const
 
size_t resetErrCount (ModbusRTU::mbErrCode e, size_t set=0)
 
size_t getAskCount () const noexcept
 
void resetAskCounter ()
 

Защищенные члены

virtual void iowait (timeout_t msec) override
 
virtual ModbusRTU::mbErrCode realReceive (const std::unordered_set< ModbusRTU::ModbusAddr > &vmbaddr, timeout_t msecTimeout) override
 
void callback (ev::io &watcher, int revents)
 
void onTimeout (ev::timer &watcher, int revents)
 
virtual void readEvent (ev::io &watcher)
 
virtual void writeEvent (ev::io &watcher)
 
virtual void final ()
 
virtual size_t getNextData (unsigned char *buf, int len) override
 
virtual void setChannelTimeout (timeout_t msec) override
 
virtual ModbusRTU::mbErrCode sendData (unsigned char *buf, int len) override
 
virtual ModbusRTU::mbErrCode tcp_processing (ModbusRTU::MBAPHeader &mhead)
 
virtual ModbusRTU::mbErrCode make_adu_header (ModbusRTU::ModbusMessage &request) override
 
virtual ModbusRTU::mbErrCode post_send_request (ModbusRTU::ModbusMessage &request) override
 
virtual ModbusRTU::mbErrCode readCoilStatus (const ModbusRTU::ReadCoilMessage &query, ModbusRTU::ReadCoilRetMessage &reply) override
 
virtual ModbusRTU::mbErrCode readInputStatus (const ModbusRTU::ReadInputStatusMessage &query, ModbusRTU::ReadInputStatusRetMessage &reply) override
 
virtual ModbusRTU::mbErrCode readOutputRegisters (const ModbusRTU::ReadOutputMessage &query, ModbusRTU::ReadOutputRetMessage &reply) override
 
virtual ModbusRTU::mbErrCode readInputRegisters (const ModbusRTU::ReadInputMessage &query, ModbusRTU::ReadInputRetMessage &reply) override
 
virtual ModbusRTU::mbErrCode forceSingleCoil (const ModbusRTU::ForceSingleCoilMessage &query, ModbusRTU::ForceSingleCoilRetMessage &reply) override
 
virtual ModbusRTU::mbErrCode writeOutputSingleRegister (const ModbusRTU::WriteSingleOutputMessage &query, ModbusRTU::WriteSingleOutputRetMessage &reply) override
 
virtual ModbusRTU::mbErrCode forceMultipleCoils (const ModbusRTU::ForceCoilsMessage &query, ModbusRTU::ForceCoilsRetMessage &reply) override
 
virtual ModbusRTU::mbErrCode writeOutputRegisters (const ModbusRTU::WriteOutputMessage &query, ModbusRTU::WriteOutputRetMessage &reply) override
 
virtual ModbusRTU::mbErrCode diagnostics (const ModbusRTU::DiagnosticMessage &query, ModbusRTU::DiagnosticRetMessage &reply) override
 
virtual ModbusRTU::mbErrCode read4314 (const ModbusRTU::MEIMessageRDI &query, ModbusRTU::MEIMessageRetRDI &reply) override
 
virtual ModbusRTU::mbErrCode journalCommand (const ModbusRTU::JournalCommandMessage &query, ModbusRTU::JournalCommandRetMessage &reply) override
 
virtual ModbusRTU::mbErrCode setDateTime (const ModbusRTU::SetDateTimeMessage &query, ModbusRTU::SetDateTimeRetMessage &reply) override
 
virtual ModbusRTU::mbErrCode remoteService (const ModbusRTU::RemoteServiceMessage &query, ModbusRTU::RemoteServiceRetMessage &reply) override
 
virtual ModbusRTU::mbErrCode fileTransfer (const ModbusRTU::FileTransferMessage &query, ModbusRTU::FileTransferRetMessage &reply) override
 
- Защищенные члены унаследованные от uniset::ModbusServer
virtual ModbusRTU::mbErrCode send (ModbusRTU::ModbusMessage &buf)
 
virtual ModbusRTU::mbErrCode processing (ModbusRTU::ModbusMessage &buf)
 
ModbusRTU::mbErrCode recv (const std::unordered_set< ModbusRTU::ModbusAddr > &vaddr, ModbusRTU::ModbusMessage &buf, timeout_t timeout)
 
ModbusRTU::mbErrCode recv_pdu (ModbusRTU::ModbusMessage &rbuf, timeout_t timeout)
 
void printProcessingTime ()
 

Дополнительные унаследованные члены

- Открытые статические члены унаследованные от uniset::ModbusServer
static std::unordered_set< ModbusRTU::ModbusAddr > addr2vaddr (ModbusRTU::ModbusAddr &mbaddr)
 
static bool checkAddr (const std::unordered_set< ModbusRTU::ModbusAddr > &vaddr, const ModbusRTU::ModbusAddr addr)
 
static std::string vaddr2str (const std::unordered_set< ModbusRTU::ModbusAddr > &vaddr)
 
static ModbusRTU::mbErrCode replySetDateTime (const ModbusRTU::SetDateTimeMessage &query, ModbusRTU::SetDateTimeRetMessage &reply, std::shared_ptr< DebugStream > dlog=nullptr)
 
static ModbusRTU::mbErrCode replyFileTransfer (const std::string &fname, const ModbusRTU::FileTransferMessage &query, ModbusRTU::FileTransferRetMessage &reply, std::shared_ptr< DebugStream > dlog=nullptr)
 
- Защищенные данные унаследованные от uniset::ModbusServerSlot
ReadCoilSlot slReadCoil
 
ReadInputStatusSlot slReadInputStatus
 
ReadOutputSlot slReadOutputs
 
ReadInputSlot slReadInputs
 
ForceCoilsSlot slForceCoils
 
WriteOutputSlot slWriteOutputs
 
ForceSingleCoilSlot slForceSingleCoil
 
WriteSingleOutputSlot slWriteSingleOutputs
 
DiagnosticsSlot slDiagnostics
 
MEIRDISlot slMEIRDI
 
JournalCommandSlot slJournalCommand
 
SetDateTimeSlot slSetDateTime
 
RemoteServiceSlot slRemoteService
 
FileTransferSlot slFileTransfer
 
- Защищенные данные унаследованные от uniset::ModbusServer
std::timed_mutex recvMutex
 
timeout_t recvTimeOut_ms = { 50 }
 
timeout_t replyTimeout_ms = { 2000 }
 
timeout_t aftersend_msec = { 0 }
 
timeout_t sleepPause_msec = { 10 }
 
bool onBroadcast = { false }
 
bool crcNoCheckit = { false }
 
bool cleanBeforeSend = { false }
 
PassiveTimer tmProcessing
 
std::shared_ptr< DebugStreamdlog
 
size_t askCount = { 0 }
 
ExchangeErrorMap errmap
 
PreReceiveSignal m_pre_signal
 
PostReceiveSignal m_post_signal
 

Подробное описание

The ModbusTCPSession class Класс рассчитан на совместную работу с ModbusTCPServer, т.к. построен на основе libev, и главный цикл (default_loop) находиться там.

Текущая реализация не доведена до совершенства использования "событий". И рассчитывает, что данные от клиента приходят все сразу, а так как сокеты не блокирующие, то попыток чтения делается несколько с небольшой паузой, что нехорошо, т.к. отнимает время у других "клиентов", ведь сервер по сути однопоточный (!) Альтернативной реализацией могло быть быть.. чтение по событиям и складывание в отдельную очередь, а обработку делать по мере достаточного накопления данных во входной очереди, но это требует асинхронный парсинг данных протокола modbus (т.е. мы анализируем очередной байт и решаем сколько нам нужно ещё "подождать" данных.. чтобы пойти на следующий шаг), это в результате будет слишком сложная реализация. В конце-концов пока нет расчёта на >1000 подключений (хотя libev позволяет держать >10k).

Методы

◆ cleanupChannel()

void uniset::ModbusTCPSession::cleanupChannel ( )
overridevirtual

Переопределяет метод предка uniset::ModbusServer.

◆ diagnostics()

mbErrCode uniset::ModbusTCPSession::diagnostics ( const ModbusRTU::DiagnosticMessage & query,
ModbusRTU::DiagnosticRetMessage & reply )
overrideprotectedvirtual

Обработка запроса на запись данных (0x08).

Аргументы
query- запрос
reply- ответ. Заполняется в обработчике.
Возвращает
Результат обработки

Замещает uniset::ModbusServer.

◆ fileTransfer()

ModbusRTU::mbErrCode uniset::ModbusTCPSession::fileTransfer ( const ModbusRTU::FileTransferMessage & query,
ModbusRTU::FileTransferRetMessage & reply )
overrideprotectedvirtual

Передача файла (0x66)

Аргументы
query- запрос
reply- ответ. Заполняется в обработчике.
Возвращает
Результат обработки

Замещает uniset::ModbusServer.

◆ forceMultipleCoils()

mbErrCode uniset::ModbusTCPSession::forceMultipleCoils ( const ModbusRTU::ForceCoilsMessage & query,
ModbusRTU::ForceCoilsRetMessage & reply )
overrideprotectedvirtual

Обработка запроса на запись данных (0x0F).

Аргументы
query- запрос
reply- ответ. Заполняется в обработчике.
Возвращает
Результат обработки

Замещает uniset::ModbusServer.

◆ forceSingleCoil()

mbErrCode uniset::ModbusTCPSession::forceSingleCoil ( const ModbusRTU::ForceSingleCoilMessage & query,
ModbusRTU::ForceSingleCoilRetMessage & reply )
overrideprotectedvirtual

Обработка запроса на запись данных (0x05).

Аргументы
query- запрос
reply- ответ. Заполняется в обработчике.
Возвращает
Результат обработки

Замещает uniset::ModbusServer.

◆ getNextData()

size_t uniset::ModbusTCPSession::getNextData ( unsigned char * buf,
int len )
overrideprotectedvirtual

get next data block from channel or recv buffer

Аргументы
begin- get from position
buf- buffer for data
len- size of buf
Возвращает
real data lenght ( must be <= len )

Замещает uniset::ModbusServer.

◆ iowait()

void uniset::ModbusTCPSession::iowait ( timeout_t msec)
overrideprotectedvirtual

Переопределяет метод предка uniset::ModbusServer.

◆ isActive()

bool uniset::ModbusTCPSession::isActive ( ) const
overridevirtual

Замещает uniset::ModbusServer.

◆ journalCommand()

mbErrCode uniset::ModbusTCPSession::journalCommand ( const ModbusRTU::JournalCommandMessage & query,
ModbusRTU::JournalCommandRetMessage & reply )
overrideprotectedvirtual

Обработка запроса по журналу (0x65)

Аргументы
query- запрос
reply- ответ. Заполняется в обработчике.
Возвращает
Результат обработки

Замещает uniset::ModbusServer.

◆ make_adu_header()

mbErrCode uniset::ModbusTCPSession::make_adu_header ( ModbusRTU::ModbusMessage & request)
overrideprotectedvirtual

Переопределяет метод предка uniset::ModbusServer.

◆ post_send_request()

ModbusRTU::mbErrCode uniset::ModbusTCPSession::post_send_request ( ModbusRTU::ModbusMessage & request)
overrideprotectedvirtual

Переопределяет метод предка uniset::ModbusServer.

◆ read4314()

ModbusRTU::mbErrCode uniset::ModbusTCPSession::read4314 ( const ModbusRTU::MEIMessageRDI & query,
ModbusRTU::MEIMessageRetRDI & reply )
overrideprotectedvirtual

Обработка запроса 43(0x2B).

Аргументы
query- запрос
reply- ответ. Заполняется в обработчике.
Возвращает
Результат обработки

Замещает uniset::ModbusServer.

◆ readCoilStatus()

mbErrCode uniset::ModbusTCPSession::readCoilStatus ( const ModbusRTU::ReadCoilMessage & query,
ModbusRTU::ReadCoilRetMessage & reply )
overrideprotectedvirtual

Обработка запроса на чтение данных (0x01).

Аргументы
query- запрос
reply- ответ. Заполняется в обработчике.
Возвращает
Результат обработки

Замещает uniset::ModbusServer.

◆ readInputRegisters()

mbErrCode uniset::ModbusTCPSession::readInputRegisters ( const ModbusRTU::ReadInputMessage & query,
ModbusRTU::ReadInputRetMessage & reply )
overrideprotectedvirtual

Обработка запроса на чтение данных (0x04).

Аргументы
query- запрос
reply- ответ. Заполняется в обработчике.
Возвращает
Результат обработки

Замещает uniset::ModbusServer.

◆ readInputStatus()

mbErrCode uniset::ModbusTCPSession::readInputStatus ( const ModbusRTU::ReadInputStatusMessage & query,
ModbusRTU::ReadInputStatusRetMessage & reply )
overrideprotectedvirtual

Обработка запроса на чтение данных (0x02).

Аргументы
query- запрос
reply- ответ. Заполняется в обработчике.
Возвращает
Результат обработки

Замещает uniset::ModbusServer.

◆ readOutputRegisters()

mbErrCode uniset::ModbusTCPSession::readOutputRegisters ( const ModbusRTU::ReadOutputMessage & query,
ModbusRTU::ReadOutputRetMessage & reply )
overrideprotectedvirtual

Обработка запроса на чтение данных (0x03).

Аргументы
query- запрос
reply- ответ. Заполняется в обработчике.
Возвращает
Результат обработки

Замещает uniset::ModbusServer.

◆ realReceive()

ModbusRTU::mbErrCode uniset::ModbusTCPSession::realReceive ( const std::unordered_set< ModbusRTU::ModbusAddr > & vaddr,
timeout_t msecTimeout )
overrideprotectedvirtual

реализация получения очередного сообщения

Замещает uniset::ModbusServer.

◆ remoteService()

ModbusRTU::mbErrCode uniset::ModbusTCPSession::remoteService ( const ModbusRTU::RemoteServiceMessage & query,
ModbusRTU::RemoteServiceRetMessage & reply )
overrideprotectedvirtual

Вызов удалённого сервиса (0x53)

Аргументы
query- запрос
reply- ответ. Заполняется в обработчике.
Возвращает
Результат обработки

Замещает uniset::ModbusServer.

◆ sendData()

mbErrCode uniset::ModbusTCPSession::sendData ( unsigned char * buf,
int len )
overrideprotectedvirtual

Замещает uniset::ModbusServer.

◆ setChannelTimeout()

void uniset::ModbusTCPSession::setChannelTimeout ( timeout_t msec)
overrideprotectedvirtual

set timeout for receive data

Замещает uniset::ModbusServer.

◆ setDateTime()

ModbusRTU::mbErrCode uniset::ModbusTCPSession::setDateTime ( const ModbusRTU::SetDateTimeMessage & query,
ModbusRTU::SetDateTimeRetMessage & reply )
overrideprotectedvirtual

Обработка запроса по установке даты и времени (0x50)

Аргументы
query- запрос
reply- ответ. Заполняется в обработчике.
Возвращает
Результат обработки

Замещает uniset::ModbusServer.

◆ terminate()

void uniset::ModbusTCPSession::terminate ( )
overridevirtual

Переопределяет метод предка uniset::ModbusServerSlot.

◆ writeOutputRegisters()

mbErrCode uniset::ModbusTCPSession::writeOutputRegisters ( const ModbusRTU::WriteOutputMessage & query,
ModbusRTU::WriteOutputRetMessage & reply )
overrideprotectedvirtual

Обработка запроса на запись данных (0x10).

Аргументы
query- запрос
reply- ответ. Заполняется в обработчике.
Возвращает
Результат обработки

Замещает uniset::ModbusServer.

◆ writeOutputSingleRegister()

mbErrCode uniset::ModbusTCPSession::writeOutputSingleRegister ( const ModbusRTU::WriteSingleOutputMessage & query,
ModbusRTU::WriteSingleOutputRetMessage & reply )
overrideprotectedvirtual

Обработка запроса на запись данных (0x06).

Аргументы
query- запрос
reply- ответ. Заполняется в обработчике.
Возвращает
Результат обработки

Замещает uniset::ModbusServer.