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

📄 pmacmas.cpp

📁 一个通讯管理机的源代码。比较好用。推荐
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	m_pAllMgr->YC(pData,w1);	delete [] pData;	delete [] pYXData;}void CPMACMas::ExpPMAC503Data(BYTE byAddr,BYTE* pbyData,WORD wSize){	BYTE* pbyTemp =	pbyData	+ 1;	WORD wDevNo	= m_subdevmgr.GetDevNoFrmAddr(byAddr);	YCData*	pData =	new	YCData [wSize/2];	YXData*	pYXData	= new YXData [6];//2+2	WORD w1=0;	for	(WORD w	=1;	w<=wSize/2; w++)	{		pData[w1].m_wDevNo = wDevNo;		pData[w1].m_wDevPtNo = w;		if (w == 10 )		{			//DWord			pData[w1++].m_fValue = CHDW2(pbyTemp);			w++;		}		else if (w == 13)		{			//S1-S4			WORD wStatus = CW(pbyTemp);			WORD wA = 1;			for (BYTE b=0; b<4; b++,wA<<=1)			{				pYXData[b].m_wDevNo = wDevNo;				pYXData[b].m_wDevPtNo = b + 1;				pYXData[b].m_bValue = (wStatus & wA)?0xff00:0xff;			}		}		else if (w == 14)		{			//R1-R2			WORD wStatus = CW(pbyTemp);			WORD wA = 1;			for (BYTE b=0; b<2; b++,wA<<=1)			{				pYXData[b+4].m_wDevNo = wDevNo;				pYXData[b+4].m_wDevPtNo = b + 1 + 4;				pYXData[b+4].m_bValue = (wStatus & wA)?0xff00:0xff;			}            #ifdef _DEBUG			    for (WORD wwx=0;wwx<2+2;wwx++)				    pYXData[wwx].m_bValue = (wwx%2)?0xff00:0xff;            #endif			m_pAllMgr->YX(pYXData, 6);		}		else //WORD		{			pData[w1++].m_fValue = CW(pbyTemp);		}	}    #ifdef _DEBUG	    for (WORD w=0;w<w1;w++)		    pData[w].m_fValue = w*10000;    #endif	m_pAllMgr->YC(pData,w1-1);	delete [] pData;	delete [] pYXData;}void CPMACMas::ExpPMAC503EData(BYTE byAddr,BYTE* pbyData,WORD wSize){ 	BYTE* pbyTemp =	pbyData	+ 1;	WORD wDevNo	= m_subdevmgr.GetDevNoFrmAddr(byAddr);	YCData*	pData =	new	YCData [wSize/2];	YXData*	pYXData	= new YXData [10];//1+8+1	WORD w1=0;	for	(WORD w	=1;	w<=wSize/2; w++)	{		pData[w1].m_wDevNo = wDevNo;		pData[w1].m_wDevPtNo = w;		if (w == 17)		{			WORD wStatus = CW(pbyTemp);			WORD wA = 1;			pYXData[0].m_wDevNo = wDevNo;			pYXData[0].m_wDevPtNo = 1;			pYXData[0].m_bValue = (wStatus & wA)?0xff00:0xff;		}		else if (w == 18)		{			WORD wStatus = CW(pbyTemp);			WORD wA = 1;			for (BYTE b=1; b<9; b++,wA<<=1)			{				pYXData[b].m_wDevNo = wDevNo;				pYXData[b].m_wDevPtNo = b + 1 ;				pYXData[b].m_bValue = (wStatus & wA)?0xff00:0xff;			}		}		else if (w == 19)		{			WORD wStatus = CW(pbyTemp);			WORD wA = 1;			pYXData[9].m_wDevNo = wDevNo;			pYXData[9].m_wDevPtNo = 10;			pYXData[9].m_bValue = (wStatus & wA)?0xff00:0xff;		}		else 			pData[w1++].m_fValue = CW(pbyTemp);		#ifdef _DEBUG			for (WORD wwx=0;wwx<10;wwx++)				pYXData[wwx].m_bValue = (wwx%2)?0xff00:0xff;		#endif		m_pAllMgr->YX(pYXData, 10);							}	#ifdef _DEBUG		for (WORD w=0;w<w1;w++)			pData[w].m_fValue = w;	#endif		m_pAllMgr->YC(pData,w1);	delete [] pData;	delete [] pYXData;}	void CPMACMas::ExpFJTWKYData(BYTE byAddr,BYTE* pbyData,WORD wSize){	BYTE* pbyTemp =	pbyData	+ 1;	WORD wDevNo	= m_subdevmgr.GetDevNoFrmAddr(byAddr);	YCData*	pData =	new YCData [wSize/2];	YXData*	pYXData	= new YXData [8];	WORD w1=0;	for	(WORD w	=1;	w<=wSize/2; w++)	{		pData[w1].m_wDevNo = wDevNo;		pData[w1].m_wDevPtNo = w1 + 1;		if (w==1)	//遥信		{			WORD wStatus = CW(pbyTemp);			for (BYTE b=0; b<8; b++)			{				pYXData[b].m_wDevNo = wDevNo;				pYXData[b].m_wDevPtNo = b + 1;				pYXData[b].m_bValue = ((wStatus >> b) & 1)?0xff00:0xff;			}			#ifdef _DEBUG				for (WORD wwx=0;wwx<8;wwx++)					pYXData[wwx].m_bValue = (wwx&1)?0xff00:0xff;			#endif			m_pAllMgr->YX(pYXData, 8);		}		else	//WORD		{			pData[w1++].m_fValue = CW(pbyTemp);		}	}	#ifdef _DEBUG		for (WORD w=0;w<w1;w++)			pData[w].m_fValue = w*10000;	#endif	m_pAllMgr->YC(pData,w1);	delete [] pData;	delete [] pYXData;}void CPMACMas::ExpZGDWKYData(BYTE byAddr,BYTE* pbyData,WORD wSize){	BYTE* pbyTemp =	pbyData	+ 1;	WORD wDevNo	= m_subdevmgr.GetDevNoFrmAddr(byAddr);	YCData*	pData =	new YCData [wSize/2];	WORD w1=0;	for	(WORD w	=1;	w<=wSize/2; w++)	{		pData[w1].m_wDevNo = wDevNo;		pData[w1].m_wDevPtNo = w1 + 100;		pData[w1++].m_fValue = CW(pbyTemp);	}	#ifdef _DEBUG		for (WORD w=0;w<w1;w++)			pData[w].m_fValue = w*10000;	#endif		m_pAllMgr->YC(pData,w1);	delete [] pData;}void CPMACMas::Exp9900NData(BYTE byAddr,BYTE*	pbyData,WORD wSize){	BYTE* pbyTemp =	pbyData	+ 1;	WORD wDevNo	= m_subdevmgr.GetDevNoFrmAddr(byAddr);	YCData*	pData =	new	YCData [wSize/2];	YXData*	pYXData	= new YXData [16];//8+6	WORD w1	=0;	for	(WORD w	=1;	w<=wSize/2; w++)	{		if	(w<=6)//short		{			pData[w1].m_wDevNo = wDevNo;			pData[w1].m_wDevPtNo = w;			WORD www = CW(pbyTemp);			short* pSht	= (short *)&www;			pData[w1++].m_fValue = *pSht;		}		else if (w==7)//yx1		{			WORD wStatus = CW(pbyTemp);	#ifdef _DEBUGUC			if (wStatus)				cout << wStatus <<endl;	#endif			WORD wA = 1;			for	(BYTE b=0; b<6;	b++,wA<<=1)			{				pYXData[b].m_wDevNo =	wDevNo;				pYXData[b].m_wDevPtNo	= b	+ 1;				pYXData[b].m_bValue	= (wStatus & wA)?0xff00:0xff;			}		}		else if (w==8)//yx2		{			WORD wStatus = CW(pbyTemp);			WORD wA = 1;			for	(BYTE b=0; b<6;	b++,wA<<=1)			{				pYXData[6+b].m_wDevNo =	wDevNo;				pYXData[6+b].m_wDevPtNo	= b	+ 1+8;				pYXData[6+b].m_bValue	= (wStatus & wA)?0xff00:0xff;			}#ifdef _DEBUG			for (WORD wwx=0;wwx<12;wwx++)				pYXData[wwx].m_bValue = (wwx%2)?0xff00:0xff;#endif			m_pAllMgr->YX(pYXData, 12);		}	}	#ifdef _DEBUG		for (WORD w=0;w<w1;w++)			pData[w].m_fValue = w;	#endif	m_pAllMgr->YC(pData,w1);	delete [] pData;	delete [] pYXData;}void CPMACMas::Exp9900EData(BYTE	byAddr,BYTE* pbyData,WORD wSize){	BYTE* pbyTemp =	pbyData	+ 1;	WORD wDevNo	= m_subdevmgr.GetDevNoFrmAddr(byAddr);	YCData*	pData =	new	YCData [50];	YXData*	pYXData	= new YXData [8];//4+4	WORD w1	=0;	WORD wFlag = 0;	for	(WORD w =1; w<=wSize/2; w++)	{		pData[w1].m_wDevNo = wDevNo;		pData[w1].m_wDevPtNo = w1+1;		if (w == 30) //符号寄存器		{			wFlag = CW(pbyTemp);		}		else if	((w >= 31) && (w <= 44)) //电度数据		{			WORD wLow = CW(pbyTemp);			WORD wHigh = CW(pbyTemp);			pData[w1++].m_fValue = wHigh * 1000 + wLow;			w++;		}		else if	((w >= 45) && (w <= 52)) //遥信数据		{			WORD wStatus = CW(pbyTemp);			pYXData[w - 45].m_wDevNo =	wDevNo;			pYXData[w - 45].m_wDevPtNo = w - 45 + 1;			pYXData[w - 45].m_bValue = bool(wStatus & 1)?0xff00:0xff;						if (w == 52)				m_pAllMgr->YX(pYXData, 8);		}		else //WORD		{			pData[w1++].m_fValue = CW(pbyTemp);		}	}		// 处理符号寄存器	for (int i = 0; i < 16; i++)	{		int iFlag = ((wFlag >> i) & 1) ? -1 : 1;		if (i < 12) //功率及功率因数符号处理		{			pData[12 + i].m_fValue *= iFlag;		} 		else if (i == 14) //总有功电度数据符号处理		{			pData[31].m_fValue *= iFlag;		}				else if (i == 15) //总无功电度数据符号处理		{			pData[34].m_fValue *= iFlag;		}			}		m_pAllMgr->YC(pData,w1);	delete [] pData;	delete [] pYXData;}void CPMACMas::Get720Event(BYTE	byAddr,BYTE	bySOESum){	CFrameNode FNSend,FNRecv;	FNSend.m_byCID = 0x3;	FNSend.m_byDesAddr = byAddr;	FNSend.SetSize(4);	BYTE* pbyTemp = FNSend.m_pbyData;	SW(1202,pbyTemp);	SW(4*((bySOESum<10)?bySOESum:10),pbyTemp);	m_DLService.SetEchoLen(5+4*((bySOESum<10)?bySOESum:10)*2);	if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) ==	1)//Send - Respond		Exp720EventData(byAddr,FNRecv.m_pbyData,FNRecv.m_wSize);}void CPMACMas::Exp720EventData(BYTE	byAddr,BYTE* pbyData,WORD wSize){}void CPMACMas::Exp9900EventData(BYTE byAddr,BYTE* pbyData,WORD wSize){}void CPMACMas::GetJBK3000YX(BYTE byAddr){	pthread_mutex_lock(&m_mutex);	CFrameNode FNSend,FNRecv;	FNSend.m_byCID = 0x3;	FNSend.m_byDesAddr = byAddr;	FNSend.SetSize(4);	BYTE* pbyTemp = FNSend.m_pbyData;	SW(0x2000,pbyTemp);	SW(4,pbyTemp);	m_DLService.SetEchoLen(5+4*2);//(8+7)/8);		if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) ==	1)//Send - Respond	{		if (FNRecv.m_byCID == 3)			ExpJBK3000YX(FNRecv.m_bySrcAddr,FNRecv.m_pbyData,FNRecv.m_wSize);	}	pthread_mutex_unlock(&m_mutex);}void CPMACMas::ExpJBK3000YC(BYTE byAddr,BYTE*	pbyData,WORD wSize){	BYTE* pbyTemp =	pbyData	+ 1; //lost the CountNum	wSize -=1;	WORD wDevNo	= m_subdevmgr.GetDevNoFrmAddr(byAddr);	YCData*	pData =	new	YCData [wSize/2];	WORD w1=0;	for	(WORD w	=1;	w<=wSize/2; w++)	{		pData[w1].m_wDevNo = wDevNo;		pData[w1].m_wDevPtNo = w;		pData[w1++].m_fValue = CW(pbyTemp);	}	#ifdef _DEBUG		for (WORD w=0;w<w1;w++)			pData[w].m_fValue = w*10000;	#endif		m_pAllMgr->YC(pData,w1);	delete [] pData;}void CPMACMas::ExpJBK3000YX(BYTE byAddr,BYTE*	pbyData,WORD wSize){	if (wSize >=3)	{		BYTE* pbyTemp =	pbyData	+ 1;		wSize -=1;		WORD wDevNo	= m_subdevmgr.GetDevNoFrmAddr(byAddr);				YXData*	pYXData	= new YXData [wSize*8];//8+6		for	(WORD w	=0;	w<wSize/2; w++)		{			WORD wStatus = CW(pbyTemp);			WORD wA	= 1;			for	(BYTE b=0; b<16; b++,wA<<=1)			{				pYXData[w*16+b].m_wDevNo =	wDevNo;				pYXData[w*16+b].m_wDevPtNo	= b	+ 1;				pYXData[w*16+b].m_bValue	= bool(wStatus & wA)?0xff00:0xff;			}			m_pAllMgr->YX(pYXData,wSize*8);		}		delete [] pYXData;	}}void CPMACMas::GetREF542plusYX(BYTE byAddr){	pthread_mutex_lock(&m_mutex);	CFrameNode FNSend,FNRecv;	FNSend.m_byCID = 0x2;	FNSend.m_byDesAddr = byAddr;	FNSend.SetSize(4);	BYTE* pbyTemp = FNSend.m_pbyData;	SW(0,pbyTemp);	SW(8,pbyTemp);	m_DLService.SetEchoLen(6+1);//(8+7)/8);		if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) ==	1)//Send - Respond	{		if (FNRecv.m_byCID == 2)			ExpREF542plusYX(FNRecv.m_bySrcAddr,FNRecv.m_pbyData,FNRecv.m_wSize);	}	pthread_mutex_unlock(&m_mutex);}void CPMACMas::GetREF542plusYX1(BYTE byAddr){	pthread_mutex_lock(&m_mutex);	CFrameNode FNSend,FNRecv;	FNSend.m_byCID = 0x2;	FNSend.m_byDesAddr = byAddr;	FNSend.SetSize(4);	BYTE* pbyTemp = FNSend.m_pbyData;	SW(50,pbyTemp);	SW(2,pbyTemp);	m_DLService.SetEchoLen(6+1);//(8+7)/8);		if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) ==	1)//Send - Respond	{		if (FNRecv.m_byCID == 2)			ExpREF542plusYX1(FNRecv.m_bySrcAddr,FNRecv.m_pbyData,FNRecv.m_wSize);	}	pthread_mutex_unlock(&m_mutex);}void CPMACMas::ExpREF542plusYX1(BYTE byAddr,BYTE* pbyData,WORD wSize){	BYTE* pbyTemp =	pbyData	+ 1;	WORD wDevNo	= m_subdevmgr.GetDevNoFrmAddr(byAddr);	WORD w1=0;	BYTE b=0;	YXData*	pYXData	= new YXData [8];//8+6	BYTE byStatus = *pbyTemp;	BYTE byA = 1;	for	(BYTE b=0; b<2;	b++,byA<<=1)	{		pYXData[w1].m_wDevNo =	wDevNo;		pYXData[w1].m_wDevPtNo	= b+9;		pYXData[w1++].m_bValue	= (byStatus & byA)?0xff00:0xff;				}	#ifdef _DEBUG		for (WORD wwx=0;wwx<1;wwx++)			pYXData[wwx].m_bValue = (wwx%2)?0xff00:0xff;	#endif	m_pAllMgr->YX(pYXData, 2);	delete [] pYXData;}void CPMACMas::GetREF542plusYX2(BYTE byAddr){	pthread_mutex_lock(&m_mutex);	CFrameNode FNSend,FNRecv;	FNSend.m_byCID = 0x2;	FNSend.m_byDesAddr = byAddr;	FNSend.SetSize(4);	BYTE* pbyTemp = FNSend.m_pbyData;	SW(56,pbyTemp);	SW(1,pbyTemp);	m_DLService.SetEchoLen(6+1);//(8+7)/8);		if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) ==	1)//Send - Respond	{		if (FNRecv.m_byCID == 2)			ExpREF542plusYX1(FNRecv.m_bySrcAddr,FNRecv.m_pbyData,FNRecv.m_wSize);	}	pthread_mutex_unlock(&m_mutex);}void CPMACMas::ExpREF542plusYX2(BYTE byAddr,BYTE* pbyData,WORD wSize){	BYTE* pbyTemp =	pbyData	+ 1;	WORD wDevNo	= m_subdevmgr.GetDevNoFrmAddr(byAddr);	WORD w1=0;	BYTE b=0;	YXData*	pYXData	= new YXData [8];//8+6	BYTE byStatus = *pbyTemp;	BYTE byA = 1;	for	(BYTE b=0; b<1;	b++,byA<<=1)	{		pYXData[w1].m_wDevNo =	wDevNo;		pYXData[w1].m_wDevPtNo	= b+11;		pYXData[w1++].m_bValue	= (byStatus & byA)?0xff00:0xff;	}	#ifdef _DEBUG		for (WORD wwx=0;wwx<1;wwx++)			pYXData[wwx].m_bValue = (wwx%2)?0xff00:0xff;	#endif	m_pAllMgr->YX(pYXData, 1);	delete [] pYXData;}void CPMACMas::GetREF542plusYX3(BYTE byAddr){	pthread_mutex_lock(&m_mutex);	CFrameNode FNSend,FNRecv;	FNSend.m_byCID = 0x2;	FNSend.m_byDesAddr = byAddr;	FNSend.SetSize(4);	BYTE* pbyTemp = FNSend.m_pbyData;	SW(59,pbyTemp);	SW(2,pbyTemp);	m_DLService.SetEchoLen(6+1);//(8+7)/8);		if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) ==	1)//Send - Respond	{		if (FNRecv.m_byCID == 2)			ExpREF542plusYX1(FNRecv.m_bySrcAddr,FNRecv.m_pbyData,FNRecv.m_wSize);	}	pthread_mutex_unlock(&m_mutex);}void CPMACMas::ExpREF542plusYX3(BYTE byAddr,BYTE* pbyData,WORD wSize){	BYTE* pbyTemp =	pbyData	+ 1;	WORD wDevNo	= m_subdevmgr.GetDevNoFrmAddr(byAddr);	WORD w1=0;	BYTE b=0;	YXData*	pYXData	= new YXData [8];//8+6	BYTE byStatus = *pbyTemp;	BYTE byA = 1;	for	(BYTE b=0; b<2;	b++,byA<<=1)	{		pYXData[w1].m_wDevNo =	wDevNo;		pYXData[w1].m_wDevPtNo	= b+12;		pYXData[w1++].m_bValue	= (byStatus & byA)?0xff00:0xff;	}	#ifdef _DEBUG		for (WORD wwx=0;wwx<1;wwx++)				pYXData[wwx].m_bValue = (wwx%2)?0xff00:0xff;	#endif	m_pAllMgr->YX(pYXData, 2);	delete [] pYXData;}void CPMACMas::GetREF543plusYX(BYTE byAddr){	pthread_mutex_lock(&m_mutex);	CFrameNode FNSend,FNRecv;	FNSend.m_byCID = 0x2;	FNSend.m_byDesAddr = byAddr;	FNSend.SetSize(4);	BYTE* pbyTemp = FNSend.m_pbyData;	SW(0,pbyTemp);	SW(8,pbyTemp);	m_DLService.SetEchoLen(6+1);//(8+7)/8);		if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) ==	1)//Send - Respond	{		if (FNRecv.m_byCID == 2)			ExpREF542plusYX(FNRecv.m_bySrcAddr,FNRecv.m_pbyData,FNRecv.m_wSize);	}	pthread_mutex_unlock(&m_mutex);}void CPMACMas::GetREF543plusYX1(BYTE byAddr){	pthread_mutex_lock(&m_mutex);	CFrameNode FNSend,FNRecv;	FNSend.m_byCID = 0x2;	FNSend.m_byDesAddr = byAddr;	FNSend.SetSize(4);	BYTE* pbyTemp = FNSend.m_pbyData;	SW(49,pbyTemp);	SW(3,pbyTemp);	m_DLService.SetEchoLen(6+1);//(8+7)/8);		if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) ==	1)//Send - Respond	{		if (FNRecv.m_byCID == 2)			ExpREF542plusYX1(FNRecv.m_bySrcAddr,FNRecv.m_pbyData,FNRecv.m_wSize);	}	pthread_mutex_unlock(&m_mutex);}void CPMACMas::ExpREF543plusYX1(BYTE byAddr,BYTE* pbyData,WORD wSize){	BYTE* pbyTemp =	pbyData	+ 1;	WORD wDevNo	= m_subdevmgr.GetDevNoFrmAddr(byAddr);	WORD w1=0;	BYTE b=0;	YXData*	pYXData	= new YXData [8];//8+6	BYTE byStatus = *pbyTemp;	BYTE byA = 1;	for	(BYTE b=0; b<3;	b++,byA<<=1)	{		pYXData[w1].m_wDevNo =	wDevNo;		pYXData[w1].m_wDevPtNo	= b+9;		pYXData[w1++].m_bValue	= (byStatus & byA)?0xff00:0xff;

⌨️ 快捷键说明

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