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

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

 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)

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

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)

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

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

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


Методы

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

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

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

ModbusRTU::mbErrCode uniset::ModbusTCPSession::fileTransfer ( ModbusRTU::FileTransferMessage query,
ModbusRTU::FileTransferRetMessage reply 
) [protected, virtual]

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

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

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

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

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

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

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

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

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

size_t uniset::ModbusTCPSession::getNextData ( unsigned char *  buf,
int  len 
) [override, protected, virtual]

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.

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

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

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

ModbusRTU::mbErrCode uniset::ModbusTCPSession::read4314 ( ModbusRTU::MEIMessageRDI query,
ModbusRTU::MEIMessageRetRDI reply 
) [protected, virtual]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ModbusRTU::mbErrCode uniset::ModbusTCPSession::realReceive ( const std::unordered_set< ModbusRTU::ModbusAddr > &  vaddr,
timeout_t  msecTimeout 
) [override, protected, virtual]

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

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

ModbusRTU::mbErrCode uniset::ModbusTCPSession::remoteService ( ModbusRTU::RemoteServiceMessage query,
ModbusRTU::RemoteServiceRetMessage reply 
) [protected, virtual]

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

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

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

void uniset::ModbusTCPSession::setChannelTimeout ( timeout_t  msec) [protected, virtual]

set timeout for receive data

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

ModbusRTU::mbErrCode uniset::ModbusTCPSession::setDateTime ( ModbusRTU::SetDateTimeMessage query,
ModbusRTU::SetDateTimeRetMessage reply 
) [protected, virtual]

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

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

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

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

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

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

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

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

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