UniSet 2.32.1
|
#include <ModbusTCPServer.h>
Классы | |
struct | SessionInfo |
Открытые типы | |
typedef std::list< SessionInfo > | Sessions |
typedef sigc::signal< void > | TimerSignal |
![]() | |
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 |
Открытые члены | |
ModbusTCPServer (const std::string &addr, int port=502) | |
bool | run (const std::unordered_set< ModbusRTU::ModbusAddr > &vmbaddr) |
bool | async_run (const std::unordered_set< ModbusRTU::ModbusAddr > &vmbaddr) |
virtual void | terminate () override |
virtual bool | isActive () const override |
void | setMaxSessions (size_t num) |
size_t | getMaxSessions () const noexcept |
void | setSessionTimeout (timeout_t msec) |
timeout_t | getSessionTimeout () const noexcept |
size_t | getCountSessions () const noexcept |
void | getSessions (Sessions &lst) |
std::string | getInetAddress () const noexcept |
int | getInetPort () const noexcept |
size_t | getConnectionCount () const noexcept |
TimerSignal | signal_timer () |
void | setTimer (timeout_t msec) |
timeout_t | getTimer () const noexcept |
void | setSocketTimeout (timeout_t msec) |
timeout_t | getSocketTimeout () const noexcept |
![]() | |
bool | evIsActive () const noexcept |
![]() | |
void | initLog (uniset::Configuration *conf, const std::string &name, const std::string &logfile="") |
void | setLog (std::shared_ptr< DebugStream > dlog) |
std::shared_ptr< DebugStream > | log () |
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 |
virtual void | cleanupChannel () |
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 () |
Защищенные типы | |
typedef std::list< std::shared_ptr< ModbusTCPSession > > | SessionList |
Защищенные члены | |
virtual void | iowait (timeout_t msec) override |
virtual ModbusRTU::mbErrCode | realReceive (const std::unordered_set< ModbusRTU::ModbusAddr > &vaddr, timeout_t msecTimeout) override |
virtual void | evprepare () override |
virtual void | evfinish () override |
virtual void | ioAccept (ev::io &watcher, int revents) |
void | onTimer (ev::timer &t, int revents) |
void | onSocketTimeout (ev::timer &t, int revents) |
void | onSocketResetTimeout (ev::async &watcher, int revents) noexcept |
void | sessionFinished (const ModbusTCPSession *s) |
virtual size_t | getNextData (unsigned char *buf, int len) override |
virtual ModbusRTU::mbErrCode | sendData (unsigned char *buf, int len) override |
virtual void | setChannelTimeout (timeout_t msec) override |
![]() | |
bool | async_evrun (size_t waitRunningTimeout_msec=60000) |
void | evstop () |
bool | evrun () |
![]() | |
virtual ModbusRTU::mbErrCode | readCoilStatus (ModbusRTU::ReadCoilMessage &query, ModbusRTU::ReadCoilRetMessage &reply)=0 |
virtual ModbusRTU::mbErrCode | readInputStatus (ModbusRTU::ReadInputStatusMessage &query, ModbusRTU::ReadInputStatusRetMessage &reply)=0 |
virtual ModbusRTU::mbErrCode | readOutputRegisters (ModbusRTU::ReadOutputMessage &query, ModbusRTU::ReadOutputRetMessage &reply)=0 |
virtual ModbusRTU::mbErrCode | readInputRegisters (ModbusRTU::ReadInputMessage &query, ModbusRTU::ReadInputRetMessage &reply)=0 |
virtual ModbusRTU::mbErrCode | forceSingleCoil (ModbusRTU::ForceSingleCoilMessage &query, ModbusRTU::ForceSingleCoilRetMessage &reply)=0 |
virtual ModbusRTU::mbErrCode | writeOutputSingleRegister (ModbusRTU::WriteSingleOutputMessage &query, ModbusRTU::WriteSingleOutputRetMessage &reply)=0 |
virtual ModbusRTU::mbErrCode | forceMultipleCoils (ModbusRTU::ForceCoilsMessage &query, ModbusRTU::ForceCoilsRetMessage &reply)=0 |
virtual ModbusRTU::mbErrCode | writeOutputRegisters (ModbusRTU::WriteOutputMessage &query, ModbusRTU::WriteOutputRetMessage &reply)=0 |
virtual ModbusRTU::mbErrCode | diagnostics (ModbusRTU::DiagnosticMessage &query, ModbusRTU::DiagnosticRetMessage &reply)=0 |
virtual ModbusRTU::mbErrCode | read4314 (ModbusRTU::MEIMessageRDI &query, ModbusRTU::MEIMessageRetRDI &reply)=0 |
virtual ModbusRTU::mbErrCode | journalCommand (ModbusRTU::JournalCommandMessage &query, ModbusRTU::JournalCommandRetMessage &reply)=0 |
virtual ModbusRTU::mbErrCode | setDateTime (ModbusRTU::SetDateTimeMessage &query, ModbusRTU::SetDateTimeRetMessage &reply)=0 |
virtual ModbusRTU::mbErrCode | remoteService (ModbusRTU::RemoteServiceMessage &query, ModbusRTU::RemoteServiceRetMessage &reply)=0 |
virtual ModbusRTU::mbErrCode | fileTransfer (ModbusRTU::FileTransferMessage &query, ModbusRTU::FileTransferRetMessage &reply)=0 |
virtual ModbusRTU::mbErrCode | send (ModbusRTU::ModbusMessage &buf) |
virtual ModbusRTU::mbErrCode | make_adu_header (ModbusRTU::ModbusMessage &request) |
virtual ModbusRTU::mbErrCode | post_send_request (ModbusRTU::ModbusMessage &request) |
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 () |
Защищенные данные | |
int | port = { 0 } |
std::string | iaddr |
std::string | myname |
std::queue< unsigned char > | qrecv |
ModbusRTU::MBAPHeader | curQueryHeader |
std::mutex | sMutex |
SessionList | slist |
bool | ignoreAddr = { false } |
size_t | maxSessions = { 100 } |
size_t | sessCount = { 0 } |
size_t | connCount = { 0 } |
timeout_t | sessTimeout = { 10000 } |
ev::io | io |
ev::timer | ioTimer |
std::shared_ptr< UTCPSocket > | sock |
ev::timer | sockTimeout |
timeout_t | socketTimeout_msec = { UniSetTimer::WaitUpTime } |
double | tmSockTimeout = { 0.0 } |
ev::async | asyncResetSockTimeout |
std::unordered_set< ModbusRTU::ModbusAddr > | vmbaddr |
TimerSignal | m_timer_signal |
timeout_t | tmTime_msec = { UniSetTimer::WaitUpTime } |
double | tmTime = { 0.0 } |
PassiveTimer | ptWait |
![]() | |
ev::dynamic_loop | loop |
![]() | |
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< DebugStream > | dlog |
size_t | askCount = { 0 } |
ExchangeErrorMap | errmap |
PreReceiveSignal | m_pre_signal |
PostReceiveSignal | m_post_signal |
Дополнительные унаследованные члены | |
![]() | |
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) |
ModbusTCPServer Реализация сервера на основе libev. Поддерживается "много" соединений (постоянных). Хоть класс и наследуется от ModbusServer на самом деле он не реализует его функции, каждое соединение обслуживается классом ModbusTCPSession. Но собственно реализация функций одна на всех, это следует учитывать при реализации обработчиков, т.к.из многих "соединений" будут вызываться одни и те же обработчики.
bool uniset::ModbusTCPServer::async_run | ( | const std::unordered_set< ModbusRTU::ModbusAddr > & | vmbaddr | ) |
Асинхронный запуск сервера (создаётся отдельный поток)
|
overrideprotectedvirtual |
Переопределяет метод предка uniset::EventLoopServer.
|
overrideprotectedvirtual |
Переопределяет метод предка uniset::EventLoopServer.
|
noexcept |
текущее количество подключений
|
inlineoverrideprotectedvirtual |
get next data block from channel or recv buffer
begin | - get from position |
buf | - buffer for data |
len | - size of buf |
Замещает uniset::ModbusServer.
|
overrideprotectedvirtual |
Переопределяет метод предка uniset::ModbusServer.
|
overridevirtual |
Замещает uniset::ModbusServer.
|
overrideprotectedvirtual |
реализация получения очередного сообщения
Замещает uniset::ModbusServer.
bool uniset::ModbusTCPServer::run | ( | const std::unordered_set< ModbusRTU::ModbusAddr > & | vmbaddr | ) |
Запуск сервера. Функция не возвращает управление. Но может быть прервана вызовом terminate()
|
inlineoverrideprotectedvirtual |
Замещает uniset::ModbusServer.
|
inlineoverrideprotectedvirtual |
set timeout for receive data
Замещает uniset::ModbusServer.
void uniset::ModbusTCPServer::setSessionTimeout | ( | timeout_t | msec | ) |
установить timeout для поддержания соединения с "клиентом" (Default: 10 сек)
|
overridevirtual |
остановить поток выполнения (см. run или async_run)
Переопределяет метод предка uniset::ModbusServer.