⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modbustcp.h

📁 一个通讯管理机的源代码。比较好用。推荐
💻 H
字号:
#ifndef _MODBUS_TCP_H#define _MODBUS_TCP_H#include "msystem.h"#include "tinycxx/etc.h"#include "tinycxx/exception.h"#include "tinycxx/socket.h"#include "tinycxx/socksvr.h"struct fragMsg{	int fragLen;                // length of request assembled so far	unsigned char fragBuf[261]; // request so far assembled};class CModbusTCPSlave : public CNBTcpSvr{public:	CModbusTCPSlave(CAllMgr* pAllMgr,const CInetAddress stInetAddr=CInetAddress("*"), tcport_t tPort=502) : CNBTcpSvr(stInetAddr, tPort)	{		m_pAllMgr = pAllMgr;		m_hThread = 0;		pthread_attr_init(&attr);		pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);		m_dwLast = 0;		m_dwPrev = 1;	}	~CModbusTCPSlave()	{		Shutdown();		pthread_attr_destroy(&attr);		/*		if (m_hThread > 0)		{		cout << "ModbusTCPSlave:" << m_hThread << endl;		pthread_cancel(m_hThread);		}*/	}	bool Init();public:	bool IsRun()	{		bool bRet = true;		CTimeVal tv;		CTimeValSpan tvs = tv - m_tv;		if ((tvs.GetASecs() > 10) && (m_dwLast == m_dwPrev)) 			bRet = false;		if (m_dwLast != m_dwPrev)		{			m_dwLast = m_dwPrev;			m_tv = tv;		}		return bRet;	}protected:	DWORD m_dwLast,m_dwPrev;	CTimeVal m_tv;	void RunSlave();	virtual bool OnRead(CTcpStream& stTcpStream);	CAllMgr* m_pAllMgr;	int processMsg(unsigned char b[],unsigned len);	map<struReg,struLocal> m_mapReg;	pthread_t m_hThread;	pthread_attr_t attr;	map<int,fragMsg> m_msgs;	fragMsg* GetFragMsg(int nSocket)	{		fragMsg* pfragMsg = NULL;find:	map<int,fragMsg>::iterator it = m_msgs.find(nSocket);		if (it != m_msgs.end())		{			pfragMsg = &(it->second);				}		else 		{			fragMsg fm;			fm.fragLen = 0;			pair<int,fragMsg> p(nSocket,fm);			m_msgs.insert(p);			goto find;		}		return pfragMsg;	}	friend void* thrdModbusTCPSlave(void *pVoid);};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -