UniSet  1.4.0
Открытые члены | Открытые статические члены | Защищенные члены | Защищенные данные
Класс ModbusServer

#include <ModbusServer.h>

Граф наследования:ModbusServer:
ModbusRTUSlave ModbusTCPServer ModbusRTUSlaveSlot ModbusTCPServerSlot

Полный список членов класса

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

void initLog (UniSetTypes::Configuration *conf, const std::string name, const std::string logfile="")
void setLog (DebugStream &dlog)
virtual ModbusRTU::mbErrCode receive (ModbusRTU::ModbusAddr addr, timeout_t msecTimeout)=0
timeout_t setAfterSendPause (timeout_t msec)
timeout_t setReplyTimeout (timeout_t msec)
void setRecvTimeout (timeout_t msec)
void setSleepPause (timeout_t usec)
void setCRCNoCheckit (bool set)
bool isCRCNoCheckit ()
void setBroadcastMode (bool set)
bool getBroadcastMode ()
void setCleanBeforeSend (bool set)
bool getCleanBeforeSend ()
virtual void cleanupChannel ()
virtual void terminate ()

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

static ModbusRTU::mbErrCode replySetDateTime (ModbusRTU::SetDateTimeMessage &query, ModbusRTU::SetDateTimeRetMessage &reply, DebugStream *dlog=0)
static ModbusRTU::mbErrCode replyFileTransfer (const std::string fname, ModbusRTU::FileTransferMessage &query, ModbusRTU::FileTransferRetMessage &reply, DebugStream *dlog=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 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 int 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 pre_send_request (ModbusRTU::ModbusMessage &request)
virtual ModbusRTU::mbErrCode post_send_request (ModbusRTU::ModbusMessage &request)
virtual ModbusRTU::mbErrCode processing (ModbusRTU::ModbusMessage &buf)
ModbusRTU::mbErrCode recv (ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage &buf, timeout_t timeout)
ModbusRTU::mbErrCode recv_pdu (ModbusRTU::ModbusMessage &rbuf, timeout_t timeout)
void printProcessingTime ()

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

UniSetTypes::uniset_mutex recvMutex
timeout_t recvTimeOut_ms
timeout_t replyTimeout_ms
timeout_t aftersend_msec
timeout_t sleepPause_usec
bool onBroadcast
bool crcNoCheckit
bool cleanBeforeSend
PassiveTimer tmProcessing
DebugStream dlog

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

Modbus server interface


Методы

virtual ModbusRTU::mbErrCode ModbusServer::diagnostics ( ModbusRTU::DiagnosticMessage query,
ModbusRTU::DiagnosticRetMessage reply 
) [protected, pure virtual]

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

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

Замещается в ModbusRTUSlaveSlot и ModbusTCPServerSlot.

virtual ModbusRTU::mbErrCode ModbusServer::fileTransfer ( ModbusRTU::FileTransferMessage query,
ModbusRTU::FileTransferRetMessage reply 
) [protected, pure virtual]

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

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

Замещается в ModbusRTUSlaveSlot и ModbusTCPServerSlot.

virtual ModbusRTU::mbErrCode ModbusServer::forceMultipleCoils ( ModbusRTU::ForceCoilsMessage query,
ModbusRTU::ForceCoilsRetMessage reply 
) [protected, pure virtual]

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

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

Замещается в ModbusRTUSlaveSlot и ModbusTCPServerSlot.

virtual ModbusRTU::mbErrCode ModbusServer::forceSingleCoil ( ModbusRTU::ForceSingleCoilMessage query,
ModbusRTU::ForceSingleCoilRetMessage reply 
) [protected, pure virtual]

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

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

Замещается в ModbusRTUSlaveSlot и ModbusTCPServerSlot.

virtual int ModbusServer::getNextData ( unsigned char *  buf,
int  len 
) [protected, pure virtual]

get next data block from channel ot recv buffer

Аргументы:
begin- get from position
buf- buffer for data
len- size of buf
Возвращает:
real data lenght ( must be <= len )

Замещается в ModbusRTUSlave и ModbusTCPServer.

Используется в recv().

virtual ModbusRTU::mbErrCode ModbusServer::journalCommand ( ModbusRTU::JournalCommandMessage query,
ModbusRTU::JournalCommandRetMessage reply 
) [protected, pure virtual]

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

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

Замещается в ModbusRTUSlaveSlot и ModbusTCPServerSlot.

virtual ModbusRTU::mbErrCode ModbusServer::readCoilStatus ( ModbusRTU::ReadCoilMessage query,
ModbusRTU::ReadCoilRetMessage reply 
) [protected, pure virtual]

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

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

Замещается в ModbusRTUSlaveSlot и ModbusTCPServerSlot.

virtual ModbusRTU::mbErrCode ModbusServer::readInputRegisters ( ModbusRTU::ReadInputMessage query,
ModbusRTU::ReadInputRetMessage reply 
) [protected, pure virtual]

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

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

Замещается в ModbusRTUSlaveSlot и ModbusTCPServerSlot.

virtual ModbusRTU::mbErrCode ModbusServer::readInputStatus ( ModbusRTU::ReadInputStatusMessage query,
ModbusRTU::ReadInputStatusRetMessage reply 
) [protected, pure virtual]

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

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

Замещается в ModbusRTUSlaveSlot и ModbusTCPServerSlot.

virtual ModbusRTU::mbErrCode ModbusServer::readOutputRegisters ( ModbusRTU::ReadOutputMessage query,
ModbusRTU::ReadOutputRetMessage reply 
) [protected, pure virtual]

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

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

Замещается в ModbusRTUSlaveSlot и ModbusTCPServerSlot.

virtual ModbusRTU::mbErrCode ModbusServer::receive ( ModbusRTU::ModbusAddr  addr,
timeout_t  msecTimeout 
) [pure virtual]

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

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

Замещается в ModbusRTUSlave и ModbusTCPServer.

mbErrCode ModbusServer::recv ( ModbusRTU::ModbusAddr  addr,
ModbusRTU::ModbusMessage buf,
timeout_t  timeout 
) [protected]

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

Необходимо сделать:
Подумать Может стоит всё-таки получать весь пакет, а проверять кому он адресован на уровне выше?! Lav: конечно стоит, нам же надо буфер чистить

Перекрестные ссылки ModbusRTU::ModbusHeader::addr, PassiveTimer::checkTime(), DebugStream::debugging(), getNextData(), onBroadcast, setChannelTimeout(), sleepPause_usec и UniSetTimer::WaitUpTime.

Используется в ModbusTCPServer::receive() и ModbusRTUSlave::receive().

virtual ModbusRTU::mbErrCode ModbusServer::remoteService ( ModbusRTU::RemoteServiceMessage query,
ModbusRTU::RemoteServiceRetMessage reply 
) [protected, pure virtual]

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

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

Замещается в ModbusRTUSlaveSlot и ModbusTCPServerSlot.

ModbusRTU::mbErrCode ModbusServer::replyFileTransfer ( const std::string  fname,
ModbusRTU::FileTransferMessage query,
ModbusRTU::FileTransferRetMessage reply,
DebugStream dlog = 0 
) [static]

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

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

Перекрестные ссылки DebugStream::debugging(), ModbusRTU::FileTransferMessage::numfile, ModbusRTU::FileTransferMessage::numpacket и ModbusRTU::FileTransferRetMessage::set().

ModbusRTU::mbErrCode ModbusServer::replySetDateTime ( ModbusRTU::SetDateTimeMessage query,
ModbusRTU::SetDateTimeRetMessage reply,
DebugStream dlog = 0 
) [static]

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

Перекрестные ссылки ModbusRTU::SetDateTimeMessage::century, ModbusRTU::SetDateTimeMessage::day, DebugStream::debugging(), ModbusRTU::SetDateTimeMessage::hour, ModbusRTU::SetDateTimeMessage::min, ModbusRTU::SetDateTimeMessage::mon, ModbusRTU::SetDateTimeMessage::sec и ModbusRTU::SetDateTimeMessage::year.

mbErrCode ModbusServer::send ( ModbusRTU::ModbusMessage buf) [protected, virtual]

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

Перекрестные ссылки aftersend_msec, PassiveTimer::checkTime(), DebugStream::debugging(), PassiveTimer::getInterval(), ModbusRTU::ModbusMessage::len и msleep().

Используется в ModbusTCPServer::receive() и ModbusRTUSlave::receive().

timeout_t ModbusServer::setAfterSendPause ( timeout_t  msec)

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

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

Перекрестные ссылки aftersend_msec.

virtual void ModbusServer::setChannelTimeout ( timeout_t  msec) [protected, pure virtual]

set timeout for receive data

Замещается в ModbusRTUSlave и ModbusTCPServer.

Используется в recv().

virtual ModbusRTU::mbErrCode ModbusServer::setDateTime ( ModbusRTU::SetDateTimeMessage query,
ModbusRTU::SetDateTimeRetMessage reply 
) [protected, pure virtual]

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

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

Замещается в ModbusRTUSlaveSlot и ModbusTCPServerSlot.

void ModbusServer::setRecvTimeout ( timeout_t  msec)

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

Перекрестные ссылки recvTimeOut_ms и UniSetTimer::WaitUpTime.

timeout_t ModbusServer::setReplyTimeout ( timeout_t  msec)

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

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

Перекрестные ссылки replyTimeout_ms, PassiveTimer::setTiming() и UniSetTimer::WaitUpTime.

void ModbusServer::setSleepPause ( timeout_t  usec) [inline]

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

Перекрестные ссылки sleepPause_usec.

virtual ModbusRTU::mbErrCode ModbusServer::writeOutputRegisters ( ModbusRTU::WriteOutputMessage query,
ModbusRTU::WriteOutputRetMessage reply 
) [protected, pure virtual]

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

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

Замещается в ModbusRTUSlaveSlot и ModbusTCPServerSlot.

virtual ModbusRTU::mbErrCode ModbusServer::writeOutputSingleRegister ( ModbusRTU::WriteSingleOutputMessage query,
ModbusRTU::WriteSingleOutputRetMessage reply 
) [protected, pure virtual]

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

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

Замещается в ModbusRTUSlaveSlot и ModbusTCPServerSlot.


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

timeout_t ModbusServer::aftersend_msec [protected]

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

Используется в ModbusTCPServer::receive(), send() и setAfterSendPause().

bool ModbusServer::onBroadcast [protected]

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

Используется в recv().

timeout_t ModbusServer::recvTimeOut_ms [protected]

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

Используется в setRecvTimeout().

timeout_t ModbusServer::replyTimeout_ms [protected]

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

Используется в setReplyTimeout().

timeout_t ModbusServer::sleepPause_usec [protected]

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

Используется в recv() и setSleepPause().


Объявления и описания членов классов находятся в файлах: