|
UniSet
2.6.0
|
The ModbusTCPSession class Класс рассчитан на совместную работу с ModbusTCPServer, т.к. построен на основе libev, и главный цикл (default_loop) находиться там. Подробнее...
Открытые типы | |
|
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).
| mbErrCode uniset::ModbusTCPSession::diagnostics | ( | ModbusRTU::DiagnosticMessage & | query, |
| ModbusRTU::DiagnosticRetMessage & | reply | ||
| ) | [protected, virtual] |
Обработка запроса на запись данных (0x08).
| query | - запрос |
| reply | - ответ. Заполняется в обработчике. |
Замещает uniset::ModbusServer.
| ModbusRTU::mbErrCode uniset::ModbusTCPSession::fileTransfer | ( | ModbusRTU::FileTransferMessage & | query, |
| ModbusRTU::FileTransferRetMessage & | reply | ||
| ) | [protected, virtual] |
Передача файла (0x66)
| query | - запрос |
| reply | - ответ. Заполняется в обработчике. |
Замещает uniset::ModbusServer.
| mbErrCode uniset::ModbusTCPSession::forceMultipleCoils | ( | ModbusRTU::ForceCoilsMessage & | query, |
| ModbusRTU::ForceCoilsRetMessage & | reply | ||
| ) | [protected, virtual] |
Обработка запроса на запись данных (0x0F).
| query | - запрос |
| reply | - ответ. Заполняется в обработчике. |
Замещает uniset::ModbusServer.
| mbErrCode uniset::ModbusTCPSession::forceSingleCoil | ( | ModbusRTU::ForceSingleCoilMessage & | query, |
| ModbusRTU::ForceSingleCoilRetMessage & | reply | ||
| ) | [protected, virtual] |
Обработка запроса на запись данных (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 |
Замещает uniset::ModbusServer.
| mbErrCode uniset::ModbusTCPSession::journalCommand | ( | ModbusRTU::JournalCommandMessage & | query, |
| ModbusRTU::JournalCommandRetMessage & | reply | ||
| ) | [protected, virtual] |
Обработка запроса по журналу (0x65)
| query | - запрос |
| reply | - ответ. Заполняется в обработчике. |
Замещает uniset::ModbusServer.
| ModbusRTU::mbErrCode uniset::ModbusTCPSession::read4314 | ( | ModbusRTU::MEIMessageRDI & | query, |
| ModbusRTU::MEIMessageRetRDI & | reply | ||
| ) | [protected, virtual] |
Обработка запроса 43(0x2B).
| query | - запрос |
| reply | - ответ. Заполняется в обработчике. |
Замещает uniset::ModbusServer.
| mbErrCode uniset::ModbusTCPSession::readCoilStatus | ( | ModbusRTU::ReadCoilMessage & | query, |
| ModbusRTU::ReadCoilRetMessage & | reply | ||
| ) | [protected, virtual] |
Обработка запроса на чтение данных (0x01).
| query | - запрос |
| reply | - ответ. Заполняется в обработчике. |
Замещает uniset::ModbusServer.
| mbErrCode uniset::ModbusTCPSession::readInputRegisters | ( | ModbusRTU::ReadInputMessage & | query, |
| ModbusRTU::ReadInputRetMessage & | reply | ||
| ) | [protected, virtual] |
Обработка запроса на чтение данных (0x04).
| query | - запрос |
| reply | - ответ. Заполняется в обработчике. |
Замещает uniset::ModbusServer.
| mbErrCode uniset::ModbusTCPSession::readInputStatus | ( | ModbusRTU::ReadInputStatusMessage & | query, |
| ModbusRTU::ReadInputStatusRetMessage & | reply | ||
| ) | [protected, virtual] |
Обработка запроса на чтение данных (0x02).
| query | - запрос |
| reply | - ответ. Заполняется в обработчике. |
Замещает uniset::ModbusServer.
| mbErrCode uniset::ModbusTCPSession::readOutputRegisters | ( | ModbusRTU::ReadOutputMessage & | query, |
| ModbusRTU::ReadOutputRetMessage & | reply | ||
| ) | [protected, virtual] |
Обработка запроса на чтение данных (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.
| mbErrCode uniset::ModbusTCPSession::writeOutputRegisters | ( | ModbusRTU::WriteOutputMessage & | query, |
| ModbusRTU::WriteOutputRetMessage & | reply | ||
| ) | [protected, virtual] |
Обработка запроса на запись данных (0x10).
| query | - запрос |
| reply | - ответ. Заполняется в обработчике. |
Замещает uniset::ModbusServer.
| mbErrCode uniset::ModbusTCPSession::writeOutputSingleRegister | ( | ModbusRTU::WriteSingleOutputMessage & | query, |
| ModbusRTU::WriteSingleOutputRetMessage & | reply | ||
| ) | [protected, virtual] |
Обработка запроса на запись данных (0x06).
| query | - запрос |
| reply | - ответ. Заполняется в обработчике. |
Замещает uniset::ModbusServer.
1.7.6.1