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

📄 cdt.h

📁 一个通讯管理机的源代码。比较好用。推荐
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef CDT_H#define CDT_H #include "iostream.h" #include "msystem.h"#include "cdtycset.h"#include "cdtyxset.h"#include "cdtykset.h"#include "cdtddset.h"/**  *@author   *//*struct struCDTInfo{	WORD	m_wPubAddr; //group:function code //yx>=0 and yx<512	BYTE	m_byType; //YC1=1,YC2=2,YC3=3						//ZJ(总加遥测) &= 0x10,F=0x20,Water=0x30。即:0x11,0x12,0x13;0x21,0x22,0x23;0x31,0x32,0x33						//DD=6,Work Info=7,SOE=8,YX=9,YK=10,YT=11,SetValue=12	WORD	m_wDevNo; //=0: m_nType = YX ,系统信息	WORD	m_wDevPubAddr;	bool	m_bValid; //备用=:true; 采集=:false};*/class CCDTYKInfo{public:	CCDTYKInfo(BYTE byIndex)	{		m_byIndex = byIndex;	}/*	CCDTYKInfo(struCDTInfo* pstruCDT)	{		m_byIndex = pstruCDT->m_wPubAddr&0xff;		m_wDevNo = pstruCDT->m_wDevNo;		m_wDevPubAddr = pstruCDT->m_wDevPubAddr;		m_bSelected = false;	}*/	CCDTYKInfo(CCDTYKSet& setYK)	{		m_byIndex = setYK.m_wRouteNo&0xff;		m_wDevNo = setYK.m_wDevNo;		m_wDevPubAddr = setYK.m_wPointNo;		m_bSelected = false;	}	bool operator<(CCDTYKInfo info) const	{		bool bRet = false;		if (m_byIndex< info.m_byIndex)			bRet = true;		return bRet;	}	bool operator ==(CCDTYKInfo info) const	{		bool bRet = false;		if (m_byIndex == info.m_byIndex)			bRet = true;		return bRet;	}	bool operator !=(CCDTYKInfo info) const	{		bool bRet = false;		if (m_byIndex != info.m_byIndex)			bRet = true;		return bRet;	}	BYTE	m_byIndex;//<=255	WORD	m_wDevNo;	WORD	m_wDevPubAddr;	bool	m_bSelected;	bool	m_bOn;	CTimeVal	m_tv;	void Cancel()	{		m_bSelected = false;	}	void Select(bool bOn)	{		m_bSelected = true;		m_bOn = bOn;		m_tv.GetCurrentTime();	}	bool Operate(WORD& wDevNo,WORD& wDevPubAddr,bool& bOn)	{		bool bRet = false;		if (m_bSelected)		{			CTimeVal tv;			CTimeValSpan tvs = tv-m_tv;			if (tvs.GetASecs() < 20)			{				wDevNo = m_wDevNo;				wDevPubAddr = m_wDevPubAddr;				bOn = m_bOn;				bRet = true;			}		}		m_bSelected = false;		return bRet;	}};typedef vector<CCDTYKInfo> CCDTYKVector;class CCDTYKInfos{public:	CCDTYKInfos(bool bIsYK = true)	{		m_bIsYK = bIsYK;	}	void Load();	void Sort()	{		sort(m_setYKInfo.begin(),m_setYKInfo.end());	}	void Select(BYTE byIndex,bool bOn,BYTE* pbyData)	{		pbyData[0] = m_bIsYK?0xe1:0xe5;		pbyData[2] = pbyData[4] = byIndex;		pbyData[1] = pbyData[3] = 0xff;		CCDTYKVector::iterator pCDTYKInfo = lower_bound(m_setYKInfo.begin(),m_setYKInfo.end(),CCDTYKInfo(byIndex));		if ((pCDTYKInfo != m_setYKInfo.end()) && (pCDTYKInfo->m_byIndex == byIndex))		{			pbyData[1] = pbyData[3] = bOn?0xcc:0x33;			pCDTYKInfo->Select(bOn);		}	}		bool Operate(BYTE byIndex,WORD& wDevNo,WORD& wDevPubAddr,bool& bOn) 	{		bool bRet = false;		CCDTYKVector::iterator pCDTYKInfo = lower_bound(m_setYKInfo.begin(),m_setYKInfo.end(),CCDTYKInfo(byIndex));		if ((pCDTYKInfo != m_setYKInfo.end()) && (pCDTYKInfo->m_byIndex == byIndex))			bRet = pCDTYKInfo->Operate(wDevNo,wDevPubAddr,bOn);		return bRet;	}		void Cancel(BYTE byIndex)	{		CCDTYKVector::iterator pCDTYKInfo = lower_bound(m_setYKInfo.begin(),m_setYKInfo.end(),CCDTYKInfo(byIndex));		if ((pCDTYKInfo != m_setYKInfo.end()) && (pCDTYKInfo->m_byIndex == byIndex))			pCDTYKInfo->Cancel();	}/*	void Add(struCDTInfo* pstruCDT)	{		CCDTYKInfo d(pstruCDT);		m_setYKInfo.push_back(d);	}*/	void Add(CCDTYKSet& setYK)	{		CCDTYKInfo d(setYK);		m_setYKInfo.push_back(d);	}protected:	CCDTYKVector m_setYKInfo;	bool	m_bIsYK;};class CCDTYXInfo{public:	CCDTYXInfo(BYTE byPubAddr, BYTE byIndex)	{		m_byPubAddr = byPubAddr;		m_byIndex = byIndex;	}/*	CCDTYXInfo(struCDTInfo* pstruCDT)	{		m_byPubAddr = (pstruCDT->m_wPubAddr&0xff00)>>8;		m_byIndex = pstruCDT->m_wPubAddr&0xff;		m_wDevNo = pstruCDT->m_wDevNo;		m_wDevPubAddr = pstruCDT->m_wDevPubAddr;		m_bValid = pstruCDT->m_bValid;		m_bValue = false;	}*/	CCDTYXInfo(CCDTYXSet& setYX)	{		m_byPubAddr = setYX.m_wLocalNo/32;//+0xf0;// (pstruCDT->m_wPubAddr&0xff00)>>8;		m_byIndex = setYX.m_wLocalNo%32;//pstruCDT->m_wPubAddr&0xff;		m_wDevNo = setYX.m_dwYXNo/1000;		m_wDevPubAddr = setYX.m_dwYXNo%1000;		m_bValid = setYX.m_bValid;		m_bValue = false;	}	bool operator <(CCDTYXInfo info) const	{		bool bRet = false;		if ((m_byPubAddr < info.m_byPubAddr)				|| ((m_byPubAddr == info.m_byPubAddr) && (m_byIndex < info.m_byIndex)))			bRet = true;		return bRet;	}	bool operator ==(CCDTYXInfo info) const	{		bool bRet = false;		if ((m_byPubAddr == info.m_byPubAddr) && (m_byIndex == info.m_byIndex))			bRet = true;		return bRet;	}	bool operator !=(CCDTYXInfo info) const	{		bool bRet = false;		if ((m_byPubAddr != info.m_byPubAddr) || (m_byIndex != info.m_byIndex))			bRet = true;		return bRet;	}	BYTE	m_byPubAddr; //>=0xf0 and <=0xff	BYTE	m_byIndex;//<32	WORD	m_wDevNo;	WORD	m_wDevPubAddr;	bool	m_bValue;	bool	m_bValid; //set value		bool SetValue(bool bValue)//ret==true:产生变位遥信	{		bool bRet = false;		if (m_bValid && (m_bValue != bValue))			bRet = true;		m_bValid = true;		m_bValue = bValue;		return bRet;	}	BYTE Group() const	{		return m_byPubAddr + 1;	}};typedef vector<CCDTYXInfo> CCDTYXVector;typedef map<CDevFactor,CCDTYXVector::iterator,less<CDevFactor> > CCDTYXMap;class CCDTYXInfos{public:	CCDTYXInfos()	{		SetPRM(0,false);	}	void Sort()	{		sort(m_setYXInfo.begin(),m_setYXInfo.end());		CCDTYXVector::iterator p = m_setYXInfo.begin();		for ( ;p != m_setYXInfo.end(); p++)		{			CDevFactor df(p->m_wDevNo,p->m_wDevPubAddr);			m_mapYXInfo.insert(CCDTYXMap::value_type(df,p));		}	}	void Load();	void SetValue(WORD wDevNo,WORD wDevPubAddr,bool bValue)	{		CCDTYXVector::iterator pCDTYXInfo = m_setYXInfo.end();		CCDTYXMap::iterator p =  m_mapYXInfo.find(CDevFactor(wDevNo,wDevPubAddr));		if (p != m_mapYXInfo.end())		{			pair<CDevFactor,CCDTYXVector::iterator> temp = *p;			pCDTYXInfo = temp.second;		}		if (pCDTYXInfo != m_setYXInfo.end())		{			if (pCDTYXInfo->SetValue(bValue))			{//has PRM data				SetPRM(pCDTYXInfo->Group(),true);			}		}	}	bool GetPRMYXData(BYTE* pData,WORD& wSize)	{		wSize = 0;		for (BYTE byG=0; byG<16;byG++)		{			if (m_bHasPRM[byG] && GetYXData(byG+1,pData,wSize))					break;		}		return wSize>0;	}	bool GetYXData(BYTE byGroupNo,BYTE* pData,WORD& wSize)//0:=all; 1:=0xf0; ...	{		wSize = 0;		if (byGroupNo == 0)		{			for (BYTE byG = 1;byG<=16;byG++)			{					WORD wS;				if (GetYXData(byG,pData,wS))				{					pData += wS;					wSize += wS;				}			}		}		else if (byGroupNo <= 16)		{			m_bHasPRM[byGroupNo -1]= false; //clear PRM SOEData			DWORD dwValue = 0;			BYTE byIndex;			bool bHasData = false;			for (byIndex=0;byIndex<32;byIndex++)			{				CCDTYXInfo x(byGroupNo-1,byIndex);				CCDTYXVector::iterator pCDTYXInfo = lower_bound(m_setYXInfo.begin(),m_setYXInfo.end(),x);				if ((pCDTYXInfo != m_setYXInfo.end()) && (*pCDTYXInfo == x))				{					bHasData = true;					if (pCDTYXInfo->m_bValid == false) break;					dwValue |= ((DWORD)(pCDTYXInfo->m_bValue?1:0) << byIndex);				}			}			if ((byIndex == 32) && bHasData)			{				pData[0] = byGroupNo-1+0xf0;				DWORD* pdw = (DWORD *)&pData[1];				*pdw = dwValue;				wSize += 6;						}		}		return (wSize > 0);	}	void SetPRM(BYTE byGroupNo,bool bHasPRM)	{		if (byGroupNo == 0)		{			for (BYTE byG=1;byG<=16;byG++)				SetPRM(byG,bHasPRM);		}		else if (byGroupNo <= 16)		{			m_bHasPRM[byGroupNo-1] = bHasPRM;		}	}/*	void Add(struCDTInfo* pstruCDT)	{		CCDTYXInfo d(pstruCDT);		m_setYXInfo.push_back(d);	}*/	void Add(CCDTYXSet& set)	{		CCDTYXInfo d(set);		m_setYXInfo.push_back(d);	}	bool HasYXChanged()	{		bool bRet = false;		for (int iii=0; iii<16;iii++)		{			if (m_bHasPRM[iii])			{				bRet = true;				break;			}		}		return bRet;	}protected:	CCDTYXVector m_setYXInfo;	CCDTYXMap m_mapYXInfo;private:	bool m_bHasPRM[16];};class CCDTYCInfo{public:	CCDTYCInfo(BYTE byType,BYTE byPubAddr, BYTE byIndex)	{		m_byPubAddr = byPubAddr;		m_byIndex = byIndex;		m_byType = byType;	}/*	CCDTYCInfo(struCDTInfo* pstruCDT)	{		m_byPubAddr = (pstruCDT->m_wPubAddr&0xff00)>>8;		m_byIndex = pstruCDT->m_wPubAddr&0xff;		m_byType = pstruCDT->m_byType;		m_wDevNo = pstruCDT->m_wDevNo;		m_wDevPubAddr = pstruCDT->m_wDevPubAddr;		m_fCoef = 0.001;		m_wValue = 0x8000;	}*/	CCDTYCInfo(CCDTYCSet& setYC)	{		m_byPubAddr = setYC.m_wLocalNo/2;//m_dwYCNo;//(pstruCDT->m_wPubAddr&0xff00)>>8;		m_byIndex = setYC.m_wLocalNo%2;//pstruCDT->m_wPubAddr&0xff;		m_byType = setYC.m_byType;		m_wDevNo = setYC.m_dwYCNo/1000;		m_wDevPubAddr = setYC.m_dwYCNo%1000;		m_fCoef = setYC.m_fCoef;		m_wValue = 0x8000;		if (setYC.m_dwYCNo == 0) m_bValid = true;		else m_bValid = false;	}		bool operator <(CCDTYCInfo info) const	{		bool bRet = false;		if ((m_byType&0xf) < (info.m_byType&0xf))			bRet = true;		else if ((m_byType&0xf) == (info.m_byType&0xf))		{			if ((m_byPubAddr < info.m_byPubAddr)				|| ((m_byPubAddr == info.m_byPubAddr) && (m_byIndex < info.m_byIndex)))			bRet = true;		}		return bRet;	}	bool operator ==(CCDTYCInfo info) const	{		bool bRet = false;		if (((m_byType&0xf) == (info.m_byType&0xf)) && (m_byPubAddr == info.m_byPubAddr) && (m_byIndex == info.m_byIndex))			bRet = true;		return bRet;	}	BYTE	m_byPubAddr; //<0x7f;	BYTE	m_byIndex;//0,1

⌨️ 快捷键说明

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