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

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

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

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

typedef sigc::slot< void,
const ModbusTCPSession * > 
FinalSlot
- Открытые типы inherited from uniset::ModbusServerSlot
typedef sigc::slot
< ModbusRTU::mbErrCode,
ModbusRTU::ReadCoilMessage
&, ModbusRTU::ReadCoilRetMessage & > 
ReadCoilSlot
typedef sigc::slot
< ModbusRTU::mbErrCode,
ModbusRTU::ReadInputStatusMessage
&, ModbusRTU::ReadInputStatusRetMessage & > 
ReadInputStatusSlot
typedef sigc::slot
< ModbusRTU::mbErrCode,
ModbusRTU::ReadOutputMessage
&, ModbusRTU::ReadOutputRetMessage & > 
ReadOutputSlot
typedef sigc::slot
< ModbusRTU::mbErrCode,
ModbusRTU::ReadInputMessage
&, ModbusRTU::ReadInputRetMessage & > 
ReadInputSlot
typedef sigc::slot
< ModbusRTU::mbErrCode,
ModbusRTU::ForceSingleCoilMessage
&, ModbusRTU::ForceSingleCoilRetMessage & > 
ForceSingleCoilSlot
typedef sigc::slot
< ModbusRTU::mbErrCode,
ModbusRTU::WriteSingleOutputMessage
&, ModbusRTU::WriteSingleOutputRetMessage & > 
WriteSingleOutputSlot
typedef sigc::slot
< ModbusRTU::mbErrCode,
ModbusRTU::ForceCoilsMessage
&, ModbusRTU::ForceCoilsRetMessage & > 
ForceCoilsSlot
typedef sigc::slot
< ModbusRTU::mbErrCode,
ModbusRTU::WriteOutputMessage
&, ModbusRTU::WriteOutputRetMessage & > 
WriteOutputSlot
typedef sigc::slot
< ModbusRTU::mbErrCode,
ModbusRTU::DiagnosticMessage
&, ModbusRTU::DiagnosticRetMessage & > 
DiagnosticsSlot
typedef sigc::slot
< ModbusRTU::mbErrCode,
ModbusRTU::MEIMessageRDI
&, ModbusRTU::MEIMessageRetRDI & > 
MEIRDISlot
typedef sigc::slot
< ModbusRTU::mbErrCode,
ModbusRTU::JournalCommandMessage
&, ModbusRTU::JournalCommandRetMessage & > 
JournalCommandSlot
typedef sigc::slot
< ModbusRTU::mbErrCode,
ModbusRTU::SetDateTimeMessage
&, ModbusRTU::SetDateTimeRetMessage & > 
SetDateTimeSlot
typedef sigc::slot
< ModbusRTU::mbErrCode,
ModbusRTU::RemoteServiceMessage
&, ModbusRTU::RemoteServiceRetMessage & > 
RemoteServiceSlot
typedef sigc::slot
< ModbusRTU::mbErrCode,
ModbusRTU::FileTransferMessage
&, ModbusRTU::FileTransferRetMessage & > 
FileTransferSlot
- Открытые типы inherited from 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
void iowait (timeout_t msec)
- Открытые члены inherited from 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)
virtual void sigterm (int signo)
- Открытые члены inherited from 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 ()
ExchangeErrorMap getErrorMap ()
size_t getErrCount (ModbusRTU::mbErrCode e)
size_t resetErrCount (ModbusRTU::mbErrCode e, size_t set=0)
size_t getAskCount () const
void resetAskCounter ()

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

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)
virtual ModbusRTU::mbErrCode sendData (unsigned char *buf, int len) override
virtual ModbusRTU::mbErrCode tcp_processing (ModbusRTU::ADUHeader &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 (ModbusRTU::ReadCoilMessage &query, ModbusRTU::ReadCoilRetMessage &reply)
virtual ModbusRTU::mbErrCode readInputStatus (ModbusRTU::ReadInputStatusMessage &query, ModbusRTU::ReadInputStatusRetMessage &reply)
virtual ModbusRTU::mbErrCode readOutputRegisters (ModbusRTU::ReadOutputMessage &query, ModbusRTU::ReadOutputRetMessage &reply)
virtual ModbusRTU::mbErrCode readInputRegisters (ModbusRTU::ReadInputMessage &query, ModbusRTU::ReadInputRetMessage &reply)
virtual ModbusRTU::mbErrCode forceSingleCoil (ModbusRTU::ForceSingleCoilMessage &query, ModbusRTU::ForceSingleCoilRetMessage &reply)
virtual ModbusRTU::mbErrCode writeOutputSingleRegister (ModbusRTU::WriteSingleOutputMessage &query, ModbusRTU::WriteSingleOutputRetMessage &reply)
virtual ModbusRTU::mbErrCode forceMultipleCoils (ModbusRTU::ForceCoilsMessage &query, ModbusRTU::ForceCoilsRetMessage &reply)
virtual ModbusRTU::mbErrCode writeOutputRegisters (ModbusRTU::WriteOutputMessage &query, ModbusRTU::WriteOutputRetMessage &reply)
virtual ModbusRTU::mbErrCode diagnostics (ModbusRTU::DiagnosticMessage &query, ModbusRTU::DiagnosticRetMessage &reply)
virtual ModbusRTU::mbErrCode read4314 (ModbusRTU::MEIMessageRDI &query, ModbusRTU::MEIMessageRetRDI &reply)
virtual ModbusRTU::mbErrCode journalCommand (ModbusRTU::JournalCommandMessage &query, ModbusRTU::JournalCommandRetMessage &reply)
virtual ModbusRTU::mbErrCode setDateTime (ModbusRTU::SetDateTimeMessage &query, ModbusRTU::SetDateTimeRetMessage &reply)
virtual ModbusRTU::mbErrCode remoteService (ModbusRTU::RemoteServiceMessage &query, ModbusRTU::RemoteServiceRetMessage &reply)
virtual ModbusRTU::mbErrCode fileTransfer (ModbusRTU::FileTransferMessage &query, ModbusRTU::FileTransferRetMessage &reply)
- Защищенные члены inherited from 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 ()

Additional Inherited Members

- Открытые статические члены inherited from 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 (ModbusRTU::SetDateTimeMessage &query, ModbusRTU::SetDateTimeRetMessage &reply, std::shared_ptr< DebugStream > dlog=nullptr)
static ModbusRTU::mbErrCode replyFileTransfer (const std::string &fname, ModbusRTU::FileTransferMessage &query, ModbusRTU::FileTransferRetMessage &reply, std::shared_ptr< DebugStream > dlog=nullptr)
- Защищенные данные inherited from 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
- Защищенные данные inherited from 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).

Методы

mbErrCode uniset::ModbusTCPSession::diagnostics ( ModbusRTU::DiagnosticMessage query,
ModbusRTU::DiagnosticRetMessage reply 
)
protectedvirtual

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

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

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

ModbusRTU::mbErrCode uniset::ModbusTCPSession::fileTransfer ( ModbusRTU::FileTransferMessage query,
ModbusRTU::FileTransferRetMessage reply 
)
protectedvirtual

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

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

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

mbErrCode uniset::ModbusTCPSession::forceMultipleCoils ( ModbusRTU::ForceCoilsMessage query,
ModbusRTU::ForceCoilsRetMessage reply 
)
protectedvirtual

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

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

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

mbErrCode uniset::ModbusTCPSession::forceSingleCoil ( ModbusRTU::ForceSingleCoilMessage query,
ModbusRTU::ForceSingleCoilRetMessage reply 
)
protectedvirtual

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

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

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

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.

mbErrCode uniset::ModbusTCPSession::journalCommand ( ModbusRTU::JournalCommandMessage query,
ModbusRTU::JournalCommandRetMessage reply 
)
protectedvirtual

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

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

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

ModbusRTU::mbErrCode uniset::ModbusTCPSession::read4314 ( ModbusRTU::MEIMessageRDI query,
ModbusRTU::MEIMessageRetRDI reply 
)
protectedvirtual

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

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

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

mbErrCode uniset::ModbusTCPSession::readCoilStatus ( ModbusRTU::ReadCoilMessage query,
ModbusRTU::ReadCoilRetMessage reply 
)
protectedvirtual

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

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

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

mbErrCode uniset::ModbusTCPSession::readInputRegisters ( ModbusRTU::ReadInputMessage query,
ModbusRTU::ReadInputRetMessage reply 
)
protectedvirtual

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

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

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

mbErrCode uniset::ModbusTCPSession::readInputStatus ( ModbusRTU::ReadInputStatusMessage query,
ModbusRTU::ReadInputStatusRetMessage reply 
)
protectedvirtual

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

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

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

mbErrCode uniset::ModbusTCPSession::readOutputRegisters ( ModbusRTU::ReadOutputMessage query,
ModbusRTU::ReadOutputRetMessage reply 
)
protectedvirtual

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

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

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

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

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

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

ModbusRTU::mbErrCode uniset::ModbusTCPSession::remoteService ( ModbusRTU::RemoteServiceMessage query,
ModbusRTU::RemoteServiceRetMessage reply 
)
protectedvirtual

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

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

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

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

set timeout for receive data

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

ModbusRTU::mbErrCode uniset::ModbusTCPSession::setDateTime ( ModbusRTU::SetDateTimeMessage query,
ModbusRTU::SetDateTimeRetMessage reply 
)
protectedvirtual

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

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

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

mbErrCode uniset::ModbusTCPSession::writeOutputRegisters ( ModbusRTU::WriteOutputMessage query,
ModbusRTU::WriteOutputRetMessage reply 
)
protectedvirtual

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

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

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

mbErrCode uniset::ModbusTCPSession::writeOutputSingleRegister ( ModbusRTU::WriteSingleOutputMessage query,
ModbusRTU::WriteSingleOutputRetMessage reply 
)
protectedvirtual

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

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

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