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

📄 pmacmas.cpp

📁 一个通讯管理机的源代码。比较好用。推荐
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	#endif			pthread_mutex_unlock(&m_mutex);}bool CPMACMas::ReadCoil(BYTE byAddr,WORD wSRegAddr,BYTE byCount){	bool bRet = false;	CFrameNode fnSend,fnRecv;	fnSend.m_byCID = 0x1;	fnSend.m_byDesAddr = byAddr;	fnSend.SetSize(4);	BYTE* pbyTemp = fnSend.m_pbyData;	SW(wSRegAddr,pbyTemp);	SW(byCount,pbyTemp);	m_DLService.SetEchoLen(5 + (byCount+7)/8);	if (m_DLService.REQ(1,&fnSend,fnRecv,1,true) == 1)	{		if (fnRecv.m_byCID == 1)		{			BYTE byByteCount = fnRecv.m_pbyData[0];			if (byByteCount == (byCount+7)/8)			{				WORD wDevNo	= m_subdevmgr.GetDevNoFrmAddr(fnRecv.m_bySrcAddr);				YXData*	pYXData	= new YXData [byCount];//8+6				BYTE* pbyTemp = fnRecv.m_pbyData+1;				for (BYTE by=0; by<byByteCount; pbyTemp++,by++)				{					BYTE byA = 1;					for (BYTE a=0;(a<8) && ((a+by*8) < byCount);a++,byA<<=1)					{						pYXData[a+by*8].m_wDevNo =	wDevNo;						pYXData[a+by*8].m_wDevPtNo	= a + by*8	+ 1;						pYXData[a+by*8].m_bValue	= ((*pbyTemp & byA)==0)?0xff00:0xff;					}				}				m_pAllMgr->YX(pYXData, byCount);				delete [] pYXData;			}			bRet = true;		}	}	return bRet;}void CPMACMas::ExpWGKYC(BYTE byAddr,BYTE*	pbyData,WORD wSize){	BYTE* pbyTemp =	pbyData	+ 1;	WORD wDevNo	= m_subdevmgr.GetDevNoFrmAddr(byAddr);	YCData*	pData =	new	YCData [wSize/2];	for	(WORD w	=0;	w<wSize/2; w++)	{		pData[w].m_wDevNo = wDevNo;		pData[w].m_wDevPtNo = w+1;		pData[w].m_fValue = CW(pbyTemp) ;	}	m_pAllMgr->YC(pData,wSize/2);	delete [] pData;}void CPMACMas::Get9900Event(BYTE byAddr){}void CPMACMas::Exp720Data(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 [32];//8+6	WORD w1	=0;	for	(WORD w	=1;	w<=wSize/2; w++)	{		if(m_bySendOrder==0)		{		    pData[w1].m_wDevNo = wDevNo;		    pData[w1].m_wDevPtNo = w;		    if ((w<=14) || (w == 43))//word		    {			    pData[w1++].m_fValue = CW(pbyTemp);		    }		    else if ((w<=20) || ((w >= 23) && (w<= 28))) //short		    {			    WORD www = CW(pbyTemp) ;			    short* pSht = (short *)&www;			    pData[w1++].m_fValue = *pSht;		    }		    else if ((w==21) || (w==29))//long		    {			    DWORD dwww = CHDW(pbyTemp) ;			    int* pInt = (int *)&dwww;			    pData[w1++].m_fValue = *pInt;			    w++;		    }		    else if ((w>=31) && (w<=38))//DWORD		    {			    pData[w1++].m_fValue = CHDW(pbyTemp) ;			    w++;		    }		    else if ((w>=39) && (w<=42)) //short		    {			    WORD www = CW(pbyTemp) ;			    short* pSht = (short *)&www;			    pData[w1++].m_fValue = *pSht;		    }			else if (w == 44)			{				WORD wStatus = CW(pbyTemp);				WORD wA = 1;				for (BYTE b=0; b<8; 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 == 45)			{				WORD wStatus = CW(pbyTemp);				WORD wA = 1;				for (BYTE b=0; b<16; b++,wA<<=1)				{					pYXData[b+8].m_wDevNo = wDevNo;					pYXData[b+8].m_wDevPtNo = b + 1 + 16;					pYXData[b+8].m_bValue = (wStatus & wA)?0xff00:0xff;				}				#ifdef _DEBUG				for (WORD wwx=0;wwx<16+8;wwx++)					pYXData[wwx].m_bValue = (wwx%2)?0xff00:0xff;				#endif				m_pAllMgr->YX(pYXData, 16+8);			}			else if ((w>=47) && (w<=58))    //DWORD			{				pData[w1++].m_fValue = CHDW(pbyTemp);				w++;			}			else pbyTemp += 2;		}		else		{			pData[w1].m_wDevNo = wDevNo;		    pData[w1].m_wDevPtNo = w+58+(m_bySendOrder-1)*16;			pData[w1++].m_fValue = CW(pbyTemp);		}	}    #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::Exp100ENData(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 [32];//8+6	WORD w1	=0;	for	(WORD w	=1;	w<=wSize/2; w++)	{		pData[w1].m_wDevNo = wDevNo;		pData[w1].m_wDevPtNo = w;		if ((w<=14) || (w == 43))//word		{			pData[w1++].m_fValue = CW(pbyTemp);		}		else if ((w<=20) || ((w >= 23) && (w<= 28))) //short		{			WORD www = CW(pbyTemp) ;			short* pSht = (short *)&www;			pData[w1++].m_fValue = *pSht;		}		else if ((w==21) || (w==29))//long		{			DWORD dwww = CHDW(pbyTemp) ;			int* pInt = (int *)&dwww;			pData[w1++].m_fValue = *pInt;			w++;		}		else if ((w>=31) && (w<=38))//DWORD		{			pData[w1++].m_fValue = CHDW(pbyTemp) ;			w++;		}		else if ((w>=39) && (w<=42)) //short		{			WORD www = CW(pbyTemp) ;			short* pSht = (short *)&www;			pData[w1++].m_fValue = *pSht;		}		else if (w == 44)		{			WORD wStatus = CW(pbyTemp);			WORD wA = 1;			for (BYTE b=0; b<8; 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 == 45)		{			WORD wStatus = CW(pbyTemp);			WORD wA = 1;			for (BYTE b=0; b<16; b++,wA<<=1)			{				pYXData[b+8].m_wDevNo = wDevNo;				pYXData[b+8].m_wDevPtNo = b + 1 + 16;				pYXData[b+8].m_bValue = (wStatus & wA)?0xff00:0xff;			}#ifdef _DEBUG			for (WORD wwx=0;wwx<16+8;wwx++)				pYXData[wwx].m_bValue = (wwx%2)?0xff00:0xff;#endif			m_pAllMgr->YX(pYXData, 16+8);		}		else if ((w>=47) && (w<=58))    //DWORD		{			pData[w1++].m_fValue = CHDW(pbyTemp);			w++;		}		else pbyTemp += 2;	}#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::Exp600BData(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 [4];//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==7) || (w==9))//long		{			DWORD dwww = CHDW(pbyTemp) ;			int* pInt =	(int *)&dwww;			double ffValue =	*pInt;			pData[w1++].m_fValue = ffValue;			w++;		}		else if	((w>=22) && (w<=33))//DWORD		{			pData[w1++].m_fValue = CHDW(pbyTemp);			w++;		}		else if	((w>=11) && (w<=20))//short		{			WORD www = CW(pbyTemp) ;			short* pSht	= (short *)&www;			pData[w1++].m_fValue = *pSht;		}		else if (w == 34)		{			WORD wStatus = CW(pbyTemp);			WORD wA = 1;			for (BYTE b=0; b<2; 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 == 35)		{			WORD wStatus = CW(pbyTemp);			WORD wA = 1;			for (BYTE b=0; b<2; b++,wA<<=1)			{				pYXData[b+2].m_wDevNo = wDevNo;				pYXData[b+2].m_wDevPtNo = b + 1 + 2;				pYXData[b+2].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, 2+2);		}		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::ExpPDM800Data(BYTE byAddr,BYTE* pbyData,WORD wSize){   //瞬时值	BYTE* pbyTemp =	pbyData	+ 1;	WORD wDevNo	= m_subdevmgr.GetDevNoFrmAddr(byAddr);	YCData*	pData =	new	YCData [wSize/2];    for	(WORD w	=0;	w<wSize/2; w++)	{		       		pData[w].m_wDevNo = wDevNo;		pData[w].m_wDevPtNo = w+1;		pData[w].m_fValue = CW(pbyTemp) ;              	}					m_pAllMgr->YC(pData,wSize/2);    	delete [] pData;}void CPMACMas::ExpPDM803AData(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+3	WORD w1=0;	for	( WORD w=1;w<=(wSize)/2; w++)	{		pData[w1].m_wDevNo = wDevNo;				if(w<=29)//DWORD		{			pData[w1].m_wDevPtNo = w;			pData[w1++].m_fValue = CW(pbyTemp);		}	   else if(w==30)		{			WORD wStatus = CW(pbyTemp);			WORD wA = 1;			for (BYTE b=0; b<11; b++,wA<<=1)			{				pYXData[b].m_wDevNo = wDevNo;				pYXData[b].m_wDevPtNo = b + 1;				pYXData[b].m_bValue = (wStatus & wA)?0xff00:0xff;			}                   #ifdef _DEBUG			for (WORD wwx=0;wwx<11;wwx++)				pYXData[wwx].m_bValue = (wwx%2)?0xff00:0xff;            #endif			m_pAllMgr->YX(pYXData, 8+3);		}		else if((w>31)&&(w<36))		{			pData[w1].m_wDevPtNo = w1+1;			WORD wHigh = CW(pbyTemp);			WORD wLow = CW(pbyTemp);			pData[w1++].m_fValue = wHigh * 10000 + wLow;			w++;		}				else if(w==31)		{		     CW(pbyTemp);		}	}	m_pAllMgr->YC(pData,w1);	delete [] pData;	delete [] pYXData;	}void CPMACMas::ExpDDEFData(BYTE byAddr,BYTE* pbyData,WORD wSize){	BYTE* pbyTemp =	pbyData	+ 1; //lost the CountNum	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+1;		if(w<=6)		{			WORD wHigh = CW(pbyTemp);			WORD wLow = CW(pbyTemp);			pData[w1++].m_fValue = wHigh * 65535 + wLow;			w++;		}		else if((w>=13)&&(w<=18))		{			WORD wHigh = CW(pbyTemp);			WORD wLow = CW(pbyTemp);			pData[w1++].m_fValue = wHigh * 65535 + wLow;			w++;		}		else if	((w==19) || (w==24) || (w==26)) //short		{			WORD www = CW(pbyTemp) ;			short* pSht	= (short *)&www;			pData[w1++].m_fValue = *pSht;		}        else if((w>=27)&&(w<=30))		{			WORD wHigh = CW(pbyTemp);			WORD wLow = CW(pbyTemp);			pData[w1++].m_fValue = wHigh * 65535 + wLow;			w++;		}		else if((w>=33)&&(w<=34))//else //long		{		    WORD wHigh = CW(pbyTemp);			WORD wLow = CW(pbyTemp);			pData[w1++].m_fValue = wHigh * 65535 + wLow;			w++;		}		else		{          CW(pbyTemp) ;		}	}	#ifdef _DEBUG		for (WORD w=0;w<w1;w++)			pData[w].m_fValue = w*10000;	#endif	m_pAllMgr->YC(pData,12);	delete [] pData;}void CPMACMas::ExpDDEF1Data(BYTE byAddr,BYTE* pbyData,WORD wSize){		BYTE* pbyTemp =	pbyData	+ 1; //lost the CountNum	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+1;		if(w<=6)		{            DWORD dwTemp = CDW(pbyTemp) ;            pData[w1++].m_fValue = *((long *)&dwTemp);			w++;		}		else if((w>=13)&&(w<=18))		{			DWORD dwTemp = CDW(pbyTemp) ;			pData[w1++].m_fValue = *((long *)&dwTemp);			w++;		}		else if	((w==19) || (w==24) || (w==26)) //short		{			WORD www = CW(pbyTemp) ;			short* pSht	= (short *)&www;			pData[w1++].m_fValue = *pSht;		}        else if((w>=27)&&(w<=30))//else //long		{			DWORD dwTemp = CDW(pbyTemp) ;			pData[w1++].m_fValue = *((long *)&dwTemp);			w++;		}		else if((w>=33)&&(w<=34))//else //long		{			DWORD dwTemp = CDW(pbyTemp) ;			pData[w1++].m_fValue = *((long *)&dwTemp);			w++;		}		else		{			CW(pbyTemp) ;		}	}		#ifdef _DEBUG		for (WORD w=0;w<w1;w++)			pData[w].m_fValue = w*10000;	#endif	m_pAllMgr->YC(pData,12);	delete [] pData;}void CPMACMas::Exp600AData(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 [3];//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<7)//WORD		{			pData[w1++].m_fValue = CW(pbyTemp);		}		else if	( (w>8) && (w<13) )//DWORD		{			pData[w1++].m_fValue = CHDW(pbyTemp);			w++;		}		else if (w == 7)		{			WORD wStatus = CW(pbyTemp);			WORD wA = 1;			for (BYTE b=0; b<2; 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)		{			WORD wStatus = CW(pbyTemp);			WORD wA = 1;			for (BYTE b=0; b<1; b++,wA<<=1)			{				pYXData[b+2].m_wDevNo = wDevNo;				pYXData[b+2].m_wDevPtNo = b + 1 + 2;				pYXData[b+2].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, 2+1);		}		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::ExpPMAC303Data(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 [32];//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 == 1)		{			//303,S1-S16			WORD wStatus = CW(pbyTemp);			WORD wA = 1;			for (BYTE b=0; b<16; 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 == 2)		{			//303,S17-S32			WORD wStatus = CW(pbyTemp);			WORD wA = 1;			for (BYTE b=0; b<16; b++,wA<<=1)			{				pYXData[b+16].m_wDevNo = wDevNo;				pYXData[b+16].m_wDevPtNo = b + 1 + 16;				pYXData[b+16].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, 32);		}		else //WORD		{			pData[w1++].m_fValue = CW(pbyTemp);		}	}    #ifdef _DEBUG	    for (WORD w=0;w<w1;w++)		    pData[w].m_fValue = w*10000;    #endif	

⌨️ 快捷键说明

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