UniSet
2.6.0
|
Классы | |
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) | |
void | run (const std::unordered_set< ModbusRTU::ModbusAddr > &vmbaddr, bool thread=false) |
virtual bool | isActive () const override |
void | setMaxSessions (size_t num) |
size_t | getMaxSessions () |
void | setSessionTimeout (timeout_t msec) |
timeout_t | getSessionTimeout () |
size_t | getCountSessions () |
void | setIgnoreAddrMode (bool st) |
bool | getIgnoreAddrMode () |
virtual void | terminate () |
void | getSessions (Sessions &lst) |
std::string | getInetAddress () |
int | getInetPort () |
TimerSignal | signal_timer () |
void | setTimer (timeout_t msec) |
timeout_t | getTimer () |
![]() | |
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 () |
virtual void | cleanupChannel () |
ExchangeErrorMap | getErrorMap () |
size_t | getErrCount (ModbusRTU::mbErrCode e) |
size_t | resetErrCount (ModbusRTU::mbErrCode e, size_t set=0) |
size_t | getAskCount () const |
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 | 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 |
![]() | |
void | evrun (bool thread=true) |
void | evstop () |
![]() | |
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::ADUHeader | curQueryHeader |
std::mutex | sMutex |
SessionList | slist |
bool | ignoreAddr = { false } |
size_t | maxSessions = { 100 } |
size_t | sessCount = { 0 } |
timeout_t | sessTimeout = { 10000 } |
ev::io | io |
ev::timer | ioTimer |
std::shared_ptr< UTCPSocket > | sock |
const std::unordered_set < ModbusRTU::ModbusAddr > * | vmbaddr = { nullptr } |
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. Но собственно реализаия функций одна на всех, это следует учитывать при реализации обработчиков, т.к.из многих "соединений" будут вызываться одни и теже обработатчики.
size_t uniset::ModbusTCPServer::getCountSessions | ( | ) |
текущее количество подключений
|
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.
void uniset::ModbusTCPServer::run | ( | const std::unordered_set< ModbusRTU::ModbusAddr > & | vmbaddr, |
bool | thread = false |
||
) |
Запуск сервера
thread | - создавать ли отдельный поток |
|
inlineoverrideprotectedvirtual |
set timeout for receive data
Замещает uniset::ModbusServer.
void uniset::ModbusTCPServer::setSessionTimeout | ( | timeout_t | msec | ) |
установить timeout для поддержания соединения с "клиентом" (Default: 10 сек)