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

📄 cdtmas.cpp

📁 一个通讯管理机的源代码。比较好用。推荐
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "cdtmas.h"#include "msystem.h"#include "taas.h"#include "math.h"void* CDTMaster(void *pVoid)//Period and Cycle for PRM=1; Wait IND for PRM=0{	CCDTMAS *pAS = (CCDTMAS *)pVoid;	pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);	pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,NULL);	while (1) {		CFrameNode FNRecv;		if (pAS->m_DLService.IND(FNRecv) > 0) //有指示;			pAS->ExplainCDTData(&FNRecv);	}}////////////////////////////////////////////////////////////////////CCDTMAS::CCDTMAS(CAllMgr* pAllMgr,BYTE byMaxReportTimes,CSerialPortDef* pChannel)	: CMAppService(pAllMgr,pChannel->m_wChannelNo)	, m_DLService(pChannel){	m_tmRectify.GetCurrentTime();	m_tmRectify += CTimeValSpan(0,0,-2,0);	m_hThread = 0;}CCDTMAS::~CCDTMAS(){	if (m_hThread > 0)	{		cout << "CDTM" << m_hThread << endl;		pthread_cancel(m_hThread);	}}bool CCDTMAS::YK(WORD wDevNo,BYTE byRoute,bool bIsOn){	bool bRet = false;	CFrameNode FNSend;	CFrameNode FNRecv;	pthread_mutex_lock(&m_mutex);	if (Select(wDevNo,byRoute,bIsOn,FNSend) > 0)	{		if (m_DLService.REQ(0,&FNSend,FNRecv,0,true) == 0)		{//Send - No Respond			if ((FNRecv.m_byCID == 0x6) && (FNRecv.m_wSize == 0))			{				CFrameNode FNSend1;				CFrameNode FNRecv1;				if (Operate(wDevNo,byRoute,bIsOn,FNSend1) > 0)				{					if (m_DLService.REQ(1,&FNSend1,FNRecv1,0,true) == 1)					{						if ((FNRecv1.m_byCID == 0x6) && (FNRecv1.m_wSize == 0))							bRet = true;					}				}			}		}	}	pthread_mutex_unlock(&m_mutex);	return bRet;}bool CCDTMAS::Init(){	bool bRet = false;	pthread_attr_t attr;	pthread_attr_init(&attr);	pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);	if (pthread_create(&m_hThread,&attr,CDTMaster,(void *)this) == 0)		bRet = true;	pthread_attr_destroy(&attr);	return bRet;}void CCDTMAS::Run(){	while (m_DLService.Status() != 0)	usleep(10000);	CFrameNode FNSend;	CFrameNode FNRecv;//	int nEcho = GetPeriod(FNSend);	pthread_mutex_lock(&m_mutex);	//nEcho=0:Send no reply;=1:Send - Respond;=-1:No send;//	if ((nEcho!=-1) && (m_DLService.REQ((BYTE) nEcho,&FNSend,FNRecv,(BYTE) 0,true) == 1))	{//		ExplainRESP(&FNRecv);	}	pthread_mutex_unlock(&m_mutex);}void CCDTMAS::ExplainCDTData(CFrameNode* pFNRecv){	BYTE* pbyData = pFNRecv->m_pbyData;	WORD wSize = pFNRecv->m_wSize;	if (pbyData && wSize)	{		BYTE byAddr = pFNRecv->m_bySrcAddr;		switch (pFNRecv->m_byCID)		{		case 0x61:			ExpMYCData(byAddr,pbyData,wSize);		case 0xc2:            ExpSYCData(byAddr,pbyData,wSize);		case 0xb3:			ExpYCData(byAddr,pbyData,wSize);			break;		case 0xf4:			ExpYXData(byAddr,pbyData,wSize);			break;		case 0x26://			ExpSOEData(byAddr,pbyData,wSize);			break;		case 0x85://			ExpDDData(byAddr,pbyData,wSize);			break;		default:			break;		}	}}void CCDTMAS::ExpYCData(BYTE byAddr,BYTE* pbyData,WORD wSize){//	assert(wSize%6 == 0);/* ****add by lisjemg for psm-E10 *****/    WORD wDevNo	= m_subdevmgr.GetDevNoFrmAddr(byAddr);     BYTE byType	= m_subdevmgr.GetTypeFrmAddr(byAddr);    WORD w1=0;    WORD w2=0;	YCData*	pData =	new	YCData [wSize/6];	 if(byType==dt_ePSME10)	{       BYTE*	pbyTemp = pbyData;	   	   for (WORD www=0; www<wSize/6; www++,pbyTemp+=6)	{		   		if (pbyTemp[0] <=0x7f) //YC		{ 						switch (pbyTemp[0])		{		  case 0x01:			             w2=1*2-1;			 pData[w1].m_wDevNo = wDevNo;			 pData[w1].m_wDevPtNo = w2+12;			// pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里			 pData[w1].m_wDevNo = wDevNo;             pData[w1].m_wDevPtNo = w2+1+12;           //  pData[w1++].m_fValue = CW(pbyTemp[2]);//可能有问题这里		     break;		  case 0x02:                 w2=2*2-1;			  pData[w1].m_wDevNo = wDevNo;			  pData[w1].m_wDevPtNo = w2+12;			//  pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里              break;          case 0x03:                         w2=2*3-1;			  pData[w1].m_wDevNo = wDevNo;			  pData[w1].m_wDevPtNo = w2+12;			//  pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里			  pData[w1].m_wDevNo = wDevNo;              pData[w1].m_wDevPtNo = w2+1+12;            //  pData[w1++].m_fValue = CW(pbyTemp[2]);//可能有问题这里			  break;		  case 0x04:	              w2=2*4-1;		      pData[w1].m_wDevNo = wDevNo;			  pData[w1].m_wDevPtNo = w2+12;			//  pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里			 break;          case 0x05:               w2=2*5-1;			  pData[w1].m_wDevPtNo = w2;			  pData[w1].m_wDevNo = wDevNo;			//  pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里			  pData[w1].m_wDevNo = wDevNo;              pData[w1].m_wDevPtNo = w2+1+12;            //  pData[w1++].m_fValue = CW(pbyTemp[2]);//可能有问题这里			  break;		  case 0x06:		              w2=2*6-1;		      pData[w1].m_wDevNo = wDevNo;			  pData[w1].m_wDevPtNo = w2+12;			//  pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里			  break;	      case 0x07:              w2=2*7-1;		       pData[w1].m_wDevNo = wDevNo;			  pData[w1].m_wDevPtNo = w2+12;			//  pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里			  pData[w1].m_wDevNo = wDevNo;              pData[w1].m_wDevPtNo = w2+1+12;            //  pData[w1++].m_fValue = CW(pbyTemp[2]);//可能有问题这里			  break;		   case 0x08: 			  w2=2*8-1;		      pData[w1].m_wDevNo = wDevNo;			  pData[w1].m_wDevPtNo = w2+12;			//  pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里			  break;            case 0x09:               w2=2*9-1;		      pData[w1].m_wDevNo = wDevNo;			  pData[w1].m_wDevPtNo = w2+12;			//  pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里			  pData[w1].m_wDevNo = wDevNo;              pData[w1].m_wDevPtNo = w2+1+12;           //   pData[w1++].m_fValue = CW(pbyTemp[2]);//可能有问题这里			  break;           case 0x0A:			  w2=2*10-1;		      pData[w1].m_wDevNo = wDevNo;			  pData[w1].m_wDevPtNo = w2+12;			//  pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里			  break;		   case 0x0B:              w2=2*11-1;		      pData[w1].m_wDevNo = wDevNo;			  pData[w1].m_wDevPtNo = w2+12;			//  pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里			  pData[w1].m_wDevNo = wDevNo;              pData[w1].m_wDevPtNo = w2+1+12;            //  pData[w1++].m_fValue = CW(pbyTemp[2]);//可能有问题这里		      break;		   case 0x0C:			  w2=2*12-1;		       pData[w1].m_wDevNo = wDevNo;			  pData[w1].m_wDevPtNo = w2+12;			//  pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里			  break;           case 0x0D:              w2=2*13-1;		      pData[w1].m_wDevNo = wDevNo;			  pData[w1].m_wDevPtNo = w2+12;			//  pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里			  pData[w1].m_wDevNo = wDevNo;              pData[w1].m_wDevPtNo = w2+1+12;           //   pData[w1++].m_fValue = CW(pbyTemp[2]);//可能有问题这里			  break;           case 0x0E:			  w2=2*14-1;		      pData[w1].m_wDevNo = wDevNo;			  pData[w1].m_wDevPtNo = w2+12;			//  pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里			  break;		    case 0x0F:              w2=2*15-1;		      pData[w1].m_wDevNo = wDevNo;			  pData[w1].m_wDevPtNo = w2+12;			//  pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里			  pData[w1].m_wDevNo = wDevNo;              pData[w1].m_wDevPtNo = w2+1+12;            //  pData[w1++].m_fValue = CW(pbyTemp[2]);//可能有问题这里			   break;		    case 0x10:			  w2=2*16-1;		      pData[w1].m_wDevNo = wDevNo;			  pData[w1].m_wDevPtNo = w2+12;			//  pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里			  break;            case 0x11:              w2=2*17-1;		      pData[w1].m_wDevNo = wDevNo;			  pData[w1].m_wDevPtNo = w2+12;			//  pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里			  pData[w1].m_wDevNo = wDevNo;              pData[w1].m_wDevPtNo = w2+1+12;            //  pData[w1++].m_fValue = CW(pbyTemp[2]);//可能有问题这里			  break;            case 0x12:			  w2=2*18-1;		      pData[w1].m_wDevNo = wDevNo;			  pData[w1].m_wDevPtNo = w2+12;			//  pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里			  break;		    case 0x13:              w2=2*19-1;		      pData[w1].m_wDevNo = wDevNo;			  pData[w1].m_wDevPtNo = w2+12;			//  pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里			  pData[w1].m_wDevNo = wDevNo;              pData[w1].m_wDevPtNo = w2+1+12;           //   pData[w1++].m_fValue = CW(pbyTemp[2]);//可能有问题这里			   break;             case 0x14:			  w2=2*20-1;			  pData[w1].m_wDevNo = wDevNo;			  pData[w1].m_wDevPtNo = w2+12;			//  pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里			  break;			 case 0x15:              w2=2*21-1;			  pData[w1].m_wDevNo = wDevNo;			  pData[w1].m_wDevPtNo = w2+12;			//  pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里			  pData[w1].m_wDevNo = wDevNo;              pData[w1].m_wDevPtNo = w2+1+12;            //  pData[w1++].m_fValue = CW(pbyTemp[2]);//可能有问题这里			  break;            case 0x16:			  w2=2*22-1;		      pData[w1].m_wDevNo = wDevNo;			  pData[w1].m_wDevPtNo = w2+12;			//  pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里			  break;		    case 0x17:              w2=2*23-1;		      pData[w1].m_wDevNo = wDevNo;			  pData[w1].m_wDevPtNo = w2;			//  pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里			  pData[w1].m_wDevNo = wDevNo;              pData[w1].m_wDevPtNo = w2+1+12;           //   pData[w1++].m_fValue = CW(pbyTemp[2]);//可能有问题这里			   break;             case 0x18:			  w2=2*24-1;			  pData[w1].m_wDevNo = wDevNo;			  pData[w1].m_wDevPtNo = w2+12;		//	  pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里			  break;		  default:			break;		}			}		else if (pbyTemp[0] ==0x80)// || (pbyTemp[0] == 0x81)) //SOE		{			if (((www+1) < (wSize/6)) && (pbyTemp[6] == 0x81))			{															www++;				pbyTemp+=6;			}		}		else if (pbyTemp[0] ==0x84)// || (pbyTemp[0] == 0x85)) //Time Ret		{			if (((www+1) < (wSize/6)) && (pbyTemp[6] == 0x85))			{											www++;				pbyTemp+=6;			}		}		else if ((pbyTemp[0] >=0x86) && (pbyTemp[0] <=0x89)) //ZJ YC		{				}		else if (pbyTemp[0] == 0x8a) //f 频率		{				}		else if ((pbyTemp[0] >=0x8d) && (pbyTemp[0] <=0x92)) //Water 水位		{				}		else if ((pbyTemp[0] >=0xa0) && (pbyTemp[0] <=0xdf)) //DD		{				}		else if (pbyTemp[0] >=0xe1) //YK ret         //有疑问		{			while (((www+1) < (wSize/6)) && (pbyTemp[6] == 0xe1))			{				www++;				pbyTemp+=6;			}					}		else if (pbyTemp[0] >=0xe5) //YT ret		{			while (((www+1) < (wSize/6)) && (pbyTemp[6] == 0xe1))			{				www++;				pbyTemp+=6;			}					}		else if (pbyTemp[0] == 0xec) //子站状态		{				}		else if ((pbyTemp[0] >=0xf0) && (pbyTemp[0] <=0xff)) //YX		{				}		else //按YC处理		{		}	}	}/*	BYTE*	pbyTemp = pbyData;	for (WORD www=0; www<wSize/6; www++,pbyTemp+=6)	{		if (pbyTemp[0] <=0x7f) //YC		{				}		else if (pbyTemp[0] ==0x80)// || (pbyTemp[0] == 0x81)) //SOE		{			if (((www+1) < (wSize/6)) && (pbyTemp[6] == 0x81))			{															www++;				pbyTemp+=6;			}		}		else if (pbyTemp[0] ==0x84)// || (pbyTemp[0] == 0x85)) //Time Ret		{			if (((www+1) < (wSize/6)) && (pbyTemp[6] == 0x85))			{											www++;				pbyTemp+=6;			}		}		else if ((pbyTemp[0] >=0x86) && (pbyTemp[0] <=0x89)) //ZJ YC		{				}		else if (pbyTemp[0] == 0x8a) //f 频率		{				}		else if ((pbyTemp[0] >=0x8d) && (pbyTemp[0] <=0x92)) //Water 水位		{				}		else if ((pbyTemp[0] >=0xa0) && (pbyTemp[0] <=0xdf)) //DD		{				}		else if (pbyTemp[0] >=0xe1) //YK ret         //有疑问		{			while (((www+1) < (wSize/6)) && (pbyTemp[6] == 0xe1))			{				www++;				pbyTemp+=6;			}					}		else if (pbyTemp[0] >=0xe5) //YT ret		{			while (((www+1) < (wSize/6)) && (pbyTemp[6] == 0xe1))			{				www++;				pbyTemp+=6;			}					}		else if (pbyTemp[0] == 0xec) //子站状态		{				}		else if ((pbyTemp[0] >=0xf0) && (pbyTemp[0] <=0xff)) //YX		{				}		else //按YC处理		{		}	}	*/	//  m_pAllMgr->YC(pData,w1);//	delete [] pData;}/*****this funtion add by lisheng *****/void CCDTMAS::ExpSYCData(BYTE byAddr,BYTE* pbyData,WORD wSize){	 WORD wDevNo	= m_subdevmgr.GetDevNoFrmAddr(byAddr);     BYTE byType	= m_subdevmgr.GetTypeFrmAddr(byAddr);     WORD w1=0;     WORD w2=0;	YCData*	pData =	new	YCData [wSize/6];	  if(byType==dt_ePSME10)

⌨️ 快捷键说明

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