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

#include <ModbusServer.h>

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

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

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
 

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

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 () const
 
virtual void cleanupChannel ()
 
virtual void terminate ()
 
virtual bool isActive () const =0
 
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 ()
 

Открытые статические члены

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)
 

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

virtual void iowait (timeout_t usec)
 
virtual ModbusRTU::mbErrCode realReceive (const std::unordered_set< ModbusRTU::ModbusAddr > &vaddr, timeout_t msecTimeout)=0
 
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 size_t getNextData (unsigned char *buf, int len)=0
 
virtual ModbusRTU::mbErrCode sendData (unsigned char *buf, int len)=0
 
virtual void setChannelTimeout (timeout_t msec)=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 ()
 

Защищенные данные

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
 

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

Modbus server interface

Методы

◆ checkAddr()

bool uniset::ModbusServer::checkAddr ( const std::unordered_set< ModbusRTU::ModbusAddr > & vaddr,
const ModbusRTU::ModbusAddr addr )
static

Проверка входит ли данный адрес в список

Аргументы
vaddr- вектор адресов
addr- адрес который ищем
Возвращает
TRUE - если найден
Предупреждения
Если addr=ModbusRTU::BroadcastAddr то всегда возвращается TRUE!

◆ diagnostics()

virtual ModbusRTU::mbErrCode uniset::ModbusServer::diagnostics ( ModbusRTU::DiagnosticMessage & query,
ModbusRTU::DiagnosticRetMessage & reply )
protectedpure virtual

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

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

Замещается в uniset::ModbusRTUSlaveSlot, uniset::ModbusTCPServerSlot и uniset::ModbusTCPSession.

◆ fileTransfer()

virtual ModbusRTU::mbErrCode uniset::ModbusServer::fileTransfer ( ModbusRTU::FileTransferMessage & query,
ModbusRTU::FileTransferRetMessage & reply )
protectedpure virtual

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

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

Замещается в uniset::ModbusRTUSlaveSlot, uniset::ModbusTCPServerSlot и uniset::ModbusTCPSession.

◆ forceMultipleCoils()

virtual ModbusRTU::mbErrCode uniset::ModbusServer::forceMultipleCoils ( ModbusRTU::ForceCoilsMessage & query,
ModbusRTU::ForceCoilsRetMessage & reply )
protectedpure virtual

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

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

Замещается в uniset::ModbusRTUSlaveSlot, uniset::ModbusTCPServerSlot и uniset::ModbusTCPSession.

◆ forceSingleCoil()

virtual ModbusRTU::mbErrCode uniset::ModbusServer::forceSingleCoil ( ModbusRTU::ForceSingleCoilMessage & query,
ModbusRTU::ForceSingleCoilRetMessage & reply )
protectedpure virtual

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

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

Замещается в uniset::ModbusRTUSlaveSlot, uniset::ModbusTCPServerSlot и uniset::ModbusTCPSession.

◆ getNextData()

virtual size_t uniset::ModbusServer::getNextData ( unsigned char * buf,
int len )
protectedpure 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::ModbusRTUSlave, uniset::ModbusTCPServer и uniset::ModbusTCPSession.

◆ journalCommand()

virtual ModbusRTU::mbErrCode uniset::ModbusServer::journalCommand ( ModbusRTU::JournalCommandMessage & query,
ModbusRTU::JournalCommandRetMessage & reply )
protectedpure virtual

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

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

Замещается в uniset::ModbusRTUSlaveSlot, uniset::ModbusTCPServerSlot и uniset::ModbusTCPSession.

◆ read4314()

virtual ModbusRTU::mbErrCode uniset::ModbusServer::read4314 ( ModbusRTU::MEIMessageRDI & query,
ModbusRTU::MEIMessageRetRDI & reply )
protectedpure virtual

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

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

Замещается в uniset::ModbusRTUSlaveSlot, uniset::ModbusTCPServerSlot и uniset::ModbusTCPSession.

◆ readCoilStatus()

virtual ModbusRTU::mbErrCode uniset::ModbusServer::readCoilStatus ( ModbusRTU::ReadCoilMessage & query,
ModbusRTU::ReadCoilRetMessage & reply )
protectedpure virtual

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

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

Замещается в uniset::ModbusRTUSlaveSlot, uniset::ModbusTCPServerSlot и uniset::ModbusTCPSession.

◆ readInputRegisters()

virtual ModbusRTU::mbErrCode uniset::ModbusServer::readInputRegisters ( ModbusRTU::ReadInputMessage & query,
ModbusRTU::ReadInputRetMessage & reply )
protectedpure virtual

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

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

Замещается в uniset::ModbusRTUSlaveSlot, uniset::ModbusTCPServerSlot и uniset::ModbusTCPSession.

◆ readInputStatus()

virtual ModbusRTU::mbErrCode uniset::ModbusServer::readInputStatus ( ModbusRTU::ReadInputStatusMessage & query,
ModbusRTU::ReadInputStatusRetMessage & reply )
protectedpure virtual

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

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

Замещается в uniset::ModbusRTUSlaveSlot, uniset::ModbusTCPServerSlot и uniset::ModbusTCPSession.

◆ readOutputRegisters()

virtual ModbusRTU::mbErrCode uniset::ModbusServer::readOutputRegisters ( ModbusRTU::ReadOutputMessage & query,
ModbusRTU::ReadOutputRetMessage & reply )
protectedpure virtual

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

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

Замещается в uniset::ModbusRTUSlaveSlot, uniset::ModbusTCPServerSlot и uniset::ModbusTCPSession.

◆ realReceive()

virtual ModbusRTU::mbErrCode uniset::ModbusServer::realReceive ( const std::unordered_set< ModbusRTU::ModbusAddr > & vaddr,
timeout_t msecTimeout )
protectedpure virtual

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

Замещается в uniset::ModbusTCPServer, uniset::ModbusRTUSlave и uniset::ModbusTCPSession.

◆ receive()

mbErrCode uniset::ModbusServer::receive ( const std::unordered_set< ModbusRTU::ModbusAddr > & vaddr,
timeout_t msecTimeout )

обработать очередное сообщение

Аргументы
vaddr- вектор адресов для которых принимать сообщения
msecTimeout- время ожидания прихода очередного сообщения в мсек.
Возвращает
Возвращает код ошибки из ModbusRTU::mbErrCode

◆ recv()

mbErrCode uniset::ModbusServer::recv ( const std::unordered_set< ModbusRTU::ModbusAddr > & vaddr,
ModbusRTU::ModbusMessage & buf,
timeout_t timeout )
protected

принять сообщение из канала

◆ remoteService()

virtual ModbusRTU::mbErrCode uniset::ModbusServer::remoteService ( ModbusRTU::RemoteServiceMessage & query,
ModbusRTU::RemoteServiceRetMessage & reply )
protectedpure virtual

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

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

Замещается в uniset::ModbusRTUSlaveSlot, uniset::ModbusTCPServerSlot и uniset::ModbusTCPSession.

◆ replyFileTransfer()

ModbusRTU::mbErrCode uniset::ModbusServer::replyFileTransfer ( const std::string & fname,
ModbusRTU::FileTransferMessage & query,
ModbusRTU::FileTransferRetMessage & reply,
std::shared_ptr< DebugStream > dlog = nullptr )
static

Вспомогательная функция реализующая обработку передачи файла

Аргументы
fname- запрашиваемый файл.
query- запрос
reply- ответ

◆ replySetDateTime()

ModbusRTU::mbErrCode uniset::ModbusServer::replySetDateTime ( ModbusRTU::SetDateTimeMessage & query,
ModbusRTU::SetDateTimeRetMessage & reply,
std::shared_ptr< DebugStream > dlog = nullptr )
static

Вспомогательная функция реализующая обработку запроса на установку времени. Основана на использовании gettimeofday и settimeofday.

◆ send()

mbErrCode uniset::ModbusServer::send ( ModbusRTU::ModbusMessage & buf)
protectedvirtual

послать сообщение(ответ) в канал

◆ setAfterSendPause()

timeout_t uniset::ModbusServer::setAfterSendPause ( timeout_t msec)

Установка паузы после посылки

Возвращает
старое значение

◆ setChannelTimeout()

virtual void uniset::ModbusServer::setChannelTimeout ( timeout_t msec)
protectedpure virtual

set timeout for receive data

Замещается в uniset::ModbusRTUSlave, uniset::ModbusTCPServer и uniset::ModbusTCPSession.

◆ setDateTime()

virtual ModbusRTU::mbErrCode uniset::ModbusServer::setDateTime ( ModbusRTU::SetDateTimeMessage & query,
ModbusRTU::SetDateTimeRetMessage & reply )
protectedpure virtual

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

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

Замещается в uniset::ModbusRTUSlaveSlot, uniset::ModbusTCPServerSlot и uniset::ModbusTCPSession.

◆ setRecvTimeout()

void uniset::ModbusServer::setRecvTimeout ( timeout_t msec)

установить время ожидания по умолчанию

◆ setReplyTimeout()

timeout_t uniset::ModbusServer::setReplyTimeout ( timeout_t msec)

Установка таймаута на формирование ответа

Возвращает
старое значение

◆ setSleepPause()

void uniset::ModbusServer::setSleepPause ( timeout_t msec)

установить паузу при ожидании символа

◆ terminate()

virtual void uniset::ModbusServer::terminate ( )
inlinevirtual

Переопределяется в uniset::ModbusTCPServer.

◆ writeOutputRegisters()

virtual ModbusRTU::mbErrCode uniset::ModbusServer::writeOutputRegisters ( ModbusRTU::WriteOutputMessage & query,
ModbusRTU::WriteOutputRetMessage & reply )
protectedpure virtual

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

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

Замещается в uniset::ModbusRTUSlaveSlot, uniset::ModbusTCPServerSlot и uniset::ModbusTCPSession.

◆ writeOutputSingleRegister()

virtual ModbusRTU::mbErrCode uniset::ModbusServer::writeOutputSingleRegister ( ModbusRTU::WriteSingleOutputMessage & query,
ModbusRTU::WriteSingleOutputRetMessage & reply )
protectedpure virtual

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

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

Замещается в uniset::ModbusRTUSlaveSlot, uniset::ModbusTCPServerSlot и uniset::ModbusTCPSession.

Данные класса

◆ aftersend_msec

timeout_t uniset::ModbusServer::aftersend_msec = { 0 }
protected

пауза после посылки ответа

◆ errmap

ExchangeErrorMap uniset::ModbusServer::errmap
protected

статистика ошибок обмена

◆ onBroadcast

bool uniset::ModbusServer::onBroadcast = { false }
protected

включен режим работы с broadcst-сообщениями

◆ recvTimeOut_ms

timeout_t uniset::ModbusServer::recvTimeOut_ms = { 50 }
protected

таймаут на приём

◆ replyTimeout_ms

timeout_t uniset::ModbusServer::replyTimeout_ms = { 2000 }
protected

таймаут на формирование ответа

◆ sleepPause_msec

timeout_t uniset::ModbusServer::sleepPause_msec = { 10 }
protected

пауза между попытками чтения символа из канала