2 #ifndef ModbusServer_H_ 3 #define ModbusServer_H_ 6 #include <unordered_set> 7 #include <unordered_map> 8 #include <sigc++/sigc++.h> 12 #include "Configuration.h" 13 #include "PassiveTimer.h" 14 #include "ModbusTypes.h" 19 class hash<
uniset::ModbusRTU::mbErrCode>
22 size_t operator()(
const uniset::ModbusRTU::mbErrCode& e)
const 24 return std::hash<size_t>()(e);
39 void initLog(
uniset::Configuration* conf,
const std::string& name,
const std::string& logfile =
"" );
40 void setLog( std::shared_ptr<DebugStream> dlog );
41 inline std::shared_ptr<DebugStream> log()
46 static std::unordered_set<ModbusRTU::ModbusAddr> addr2vaddr( ModbusRTU::ModbusAddr& mbaddr );
53 ModbusRTU::mbErrCode receive(
const std::unordered_set<ModbusRTU::ModbusAddr>& vaddr, timeout_t msecTimeout );
56 virtual ModbusRTU::mbErrCode receive_one(
const ModbusRTU::ModbusAddr addr, timeout_t msec );
64 typedef sigc::signal<ModbusRTU::mbErrCode, const std::unordered_set<ModbusRTU::ModbusAddr>, timeout_t> PreReceiveSignal;
65 PreReceiveSignal signal_pre_receive();
68 typedef sigc::signal<void, ModbusRTU::mbErrCode> PostReceiveSignal;
69 PostReceiveSignal signal_post_receive();
78 static bool checkAddr(
const std::unordered_set<ModbusRTU::ModbusAddr>& vaddr,
const ModbusRTU::ModbusAddr addr );
79 static std::string vaddr2str(
const std::unordered_set<ModbusRTU::ModbusAddr>& vaddr );
84 timeout_t setAfterSendPause( timeout_t msec );
89 timeout_t setReplyTimeout( timeout_t msec );
92 void setRecvTimeout( timeout_t msec );
95 void setSleepPause( timeout_t msec );
97 void setCRCNoCheckit(
bool set );
98 bool isCRCNoCheckit()
const;
100 void setBroadcastMode(
bool set );
101 bool getBroadcastMode()
const;
103 void setCleanBeforeSend(
bool set );
104 bool getCleanBeforeSend()
const;
111 std::shared_ptr<DebugStream> dlog =
nullptr );
119 static ModbusRTU::mbErrCode replyFileTransfer(
const std::string& fname,
122 std::shared_ptr<DebugStream> dlog =
nullptr );
124 virtual void cleanupChannel() {}
125 virtual void terminate() {}
127 virtual bool isActive()
const = 0;
130 typedef std::unordered_map<ModbusRTU::mbErrCode, size_t> ExchangeErrorMap;
132 ExchangeErrorMap getErrorMap();
133 size_t getErrCount( ModbusRTU::mbErrCode e )
const;
134 size_t resetErrCount( ModbusRTU::mbErrCode e,
size_t set = 0 );
136 size_t getAskCount()
const noexcept;
137 void resetAskCounter();
141 virtual void iowait( timeout_t usec );
144 virtual ModbusRTU::mbErrCode realReceive(
const std::unordered_set<ModbusRTU::ModbusAddr>& vaddr, timeout_t msecTimeout ) = 0;
269 virtual size_t getNextData(
unsigned char* buf,
int len ) = 0;
271 virtual ModbusRTU::mbErrCode sendData(
unsigned char* buf,
int len ) = 0;
274 virtual void setChannelTimeout( timeout_t msec ) = 0;
282 return ModbusRTU::erNoError;
286 return ModbusRTU::erNoError;
293 ModbusRTU::mbErrCode recv(
const std::unordered_set<ModbusRTU::ModbusAddr>& vaddr,
ModbusRTU::ModbusMessage& buf, timeout_t timeout );
296 std::timed_mutex recvMutex;
297 timeout_t recvTimeOut_ms = { 50 };
298 timeout_t replyTimeout_ms = { 2000 };
299 timeout_t aftersend_msec = { 0 };
300 timeout_t sleepPause_msec = { 10 };
301 bool onBroadcast = {
false };
302 bool crcNoCheckit = {
false };
303 bool cleanBeforeSend = {
false };
305 void printProcessingTime();
308 std::shared_ptr<DebugStream> dlog;
311 size_t askCount = { 0 };
314 PreReceiveSignal m_pre_signal;
315 PostReceiveSignal m_post_signal;
323 #endif // ModbusServer_H_ Пассивный таймер
Definition: PassiveTimer.h:92
Definition: ModbusTypes.h:1436
Definition: ModbusTypes.h:1013
Definition: CallbackTimer.h:29
Definition: ModbusTypes.h:1059
Definition: ModbusTypes.h:824
Definition: ModbusTypes.h:1469
ExchangeErrorMap errmap
Definition: ModbusServer.h:312
Definition: ModbusTypes.h:327
Definition: ModbusTypes.h:784
Definition: ModbusTypes.h:878
Definition: ModbusTypes.h:1555
Definition: ModbusTypes.h:1098
Definition: ModbusTypes.h:1168
Definition: Configuration.h:45
Definition: ModbusTypes.h:1583
Definition: ModbusTypes.h:968
Definition: ModbusTypes.h:1156
Definition: ModbusTypes.h:358
Definition: ModbusTypes.h:1223
Definition: ModbusTypes.h:707
Definition: ModbusServer.h:33
Definition: ModbusTypes.h:1290
Definition: ModbusTypes.h:557
Definition: ModbusTypes.h:192
Definition: ModbusTypes.h:528
Definition: ModbusTypes.h:1378
Definition: ModbusTypes.h:917
Definition: ModbusTypes.h:1416
Definition: ModbusTypes.h:1313