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

📄 sypbprotocol.cpp

📁 配电变压器负荷监测与控制系统数据监测传输
💻 CPP
📖 第 1 页 / 共 5 页
字号:
				}
				count+=8;
				count+=2;
				if(mTreadBuf->DataBuf[count] == 0x01 && mTreadBuf->DataBuf[count+1] == 0x00) /*正确确认*/
				{
					pQueueEle->cnCtl[0] = 0x03;
					pQueueEle->nDataLenth =1;
					pQueueEle->strData = new char[pQueueEle->nDataLenth];
					pQueueEle->strData[0] = 14;
					nFlag = 1;
				}
				if(mTreadBuf->DataBuf[count] == 0x02 && mTreadBuf->DataBuf[count+1] == 0x00)   /*错误确认*/
				{
					pQueueEle->cnCtl[0] = 0x04;
					pQueueEle->nDataLenth =1;
					pQueueEle->strData = new char[pQueueEle->nDataLenth];
					pQueueEle->strData[0] = 1;
					nFlag = 1;
				}
				count+=2;
				break;
			case	YHAFN_RESET:               //复位
				switch(mTreadBuf->DataBuf[count+7]&0x60 >> 5)        //SEQ判断是否有后续帧
				{
				case	0:
					break;
				case	1:
					break;
				case	2:
					break;
				case	3:
					break;
				}
				if(mTreadBuf->DataBuf[count] & 0x40 >>6)      //表示是自动任务上报
				{

				}
				count+=8;

				 if(mTreadBuf->DataBuf[count]==0 && mTreadBuf->DataBuf[count+1]==0)
				{
					pQueueEle->devAddr[5] = 0x00;
				}
				else
				{
					  nTemp=(int)(log10(mTreadBuf->DataBuf[count+1])/log10(2));
					  pQueueEle->devAddr[5] = nTemp*8 + (int)(log10(mTreadBuf->DataBuf[count])/log10(2)) + 1;
	
				}
			
				count+=2;
				if(mTreadBuf->DataBuf[count] == 0x02 && mTreadBuf->DataBuf[count+1] == 0x00)
				{
				}
				break;
			case	YHAFN_CHECK:                                    //链路检查
				switch(mTreadBuf->DataBuf[count+7]&0x60 >> 5)        //SEQ判断是否有后续帧
				{
				case	0:
					break;
				case	1:
					break;
				case	2:
					break;
				case	3:
					break;
				}
				if(mTreadBuf->DataBuf[count] & 0x40 >>6)      //表示是自动任务上报
				{

				}
				count+=8;

			    if(mTreadBuf->DataBuf[count]==0 && mTreadBuf->DataBuf[count+1]==0)
				{
		          pQueueEle->devAddr[5] = 0x00;
				}
				else
				{
				   nTemp=(int)(log10(mTreadBuf->DataBuf[count+1])/log10(2));
				    pQueueEle->devAddr[5] = nTemp*8 + (int)(log10(mTreadBuf->DataBuf[count])/log10(2)) + 1;

				}			
				count+=2;
				if(mTreadBuf->DataBuf[count] == 0x02 && mTreadBuf->DataBuf[count+1] == 0x00)
				{
				}
				break;
			case	YHAFN_RELAY:                  //中继
				switch(mTreadBuf->DataBuf[count+7]&0x60 >> 5)        //SEQ判断是否有后续帧
				{
				case	0:
					break;
				case	1:
					break;
				case	2:
					break;
				case	3:
					break;
				}
				if(mTreadBuf->DataBuf[count] & 0x40 >>6)      //表示是自动任务上报
				{

				}
				count+=8;
			    if(mTreadBuf->DataBuf[count]==0 && mTreadBuf->DataBuf[count+1]==0)
				{
				    pQueueEle->devAddr[5] = 0x00;
				}
				else
				{
				    nTemp=(int)(log10(mTreadBuf->DataBuf[count+1])/log10(2));
				    pQueueEle->devAddr[5] = nTemp*8 + (int)(log10(mTreadBuf->DataBuf[count])/log10(2)) + 1;

				}			
				count+=2;
				if(mTreadBuf->DataBuf[count] == 0x02 && mTreadBuf->DataBuf[count+1] == 0x00)
				{
				}
				break;
			case	YHAFN_SETDATA:                                  //设置参数
				switch(mTreadBuf->DataBuf[count+7]&0x60 >> 5)        //SEQ判断是否有后续帧
				{
				case	0:
					break;
				case	1:
					break;
				case	2:
					break;
				case	3:
					break;
				}
				if(mTreadBuf->DataBuf[count] & 0x40 >>6)      //表示是自动任务上报
				{

				}
				count+=8;

			  if(mTreadBuf->DataBuf[count]==0 && mTreadBuf->DataBuf[count+1]==0)
				{
			      pQueueEle->devAddr[5] = 0x00;
				}
				else
				{
				    nTemp=(int)(log10(mTreadBuf->DataBuf[count+1])/log10(2));
				    pQueueEle->devAddr[5] = nTemp*8 + (int)(log10(mTreadBuf->DataBuf[count])/log10(2)) + 1;

				}			
				count+=2;
				if(mTreadBuf->DataBuf[count] == 0x02 && mTreadBuf->DataBuf[count+1] == 0x00)
				{
				}
				break;
			case	YHAFN_CORTROL:                            //控制命令
				switch(mTreadBuf->DataBuf[count+7]&0x60 >> 5)        //SEQ判断是否有后续帧
				{
				case	0:
					break;
				case	1:
					break;
				case	2:
					break;
				case	3:
					break;
				}
				if(mTreadBuf->DataBuf[count] & 0x40 >>6)      //表示是自动任务上报
				{

				}
				count+=8;

			   if(mTreadBuf->DataBuf[count]==0 && mTreadBuf->DataBuf[count+1]==0)
				{
			      pQueueEle->devAddr[5] = 0x00;
				}
				else
				{
				    nTemp=(int)(log10(mTreadBuf->DataBuf[count+1])/log10(2));
				    pQueueEle->devAddr[5] = nTemp*8 + (int)(log10(mTreadBuf->DataBuf[count])/log10(2)) + 1;

				}		
				count+=2;
				if(mTreadBuf->DataBuf[count] == 0x02 && mTreadBuf->DataBuf[count+1] == 0x00)
				{
				}
				break;
			case	YHAFN_LOOKUP:    //查询参数
				switch((mTreadBuf->DataBuf[count+7] & 0x60) >> 5)        //SEQ判断是否有后续帧
				{
				case	0:
					pQueueEle->cnCtl[0] = pQueueEle->cnCtl[0] | 0x10;          //多帧标志上行数据
					pQueueEle->bGetCTData = true;
					break;
				case	1:
					pQueueEle->cnCtl[0] = pQueueEle->cnCtl[0] | 0x00;          //多帧最后一帧标志上行数据
					pQueueEle->bGetCTData = false;
					break;
				case	2:
					pQueueEle->cnCtl[0] = pQueueEle->cnCtl[0] | 0x10;          //多帧标志上行数据
					pQueueEle->bGetCTData = true;
					break;
				case	3:
					pQueueEle->cnCtl[0] = pQueueEle->cnCtl[0] | 0x00;          //单帧标志上行数据
					pQueueEle->bGetCTData = false;
					break;
				}
				if(mTreadBuf->DataBuf[count] & 0x40 >>6)      //表示是自动任务上报
				{
					pQueueEle->autoTaskInfo.chAutoTask = 1;
					pQueueEle->nCountRTU = mTreadBuf->DataBuf[count] & 0x0f;
				}
				count+=8;

				 if(mTreadBuf->DataBuf[count]==0 && mTreadBuf->DataBuf[count+1]==0)
				{
				    pQueueEle->devAddr[5] = 0x00;
				}
				else
				{
				    nTemp=(int)(log10(mTreadBuf->DataBuf[count+1])/log10(2));
				    pQueueEle->devAddr[5] = nTemp*8 + (int)(log10(mTreadBuf->DataBuf[count])/log10(2)) + 1;
	
				}			
				count+=2;
				if(mTreadBuf->DataBuf[count] == 0x04 && mTreadBuf->DataBuf[count+1] == 0x00)    //IP与端口号
				{
					pQueueEle->cnCtl[0] = pQueueEle->cnCtl[0] | 0x03;
					pQueueEle->cnCtl[1] = 0x13;
					pQueueEle->cnCtl[2] = 0x01;
				}

				if(mTreadBuf->DataBuf[count] == 0x01 && mTreadBuf->DataBuf[count+1] == 0x10)      //终端通信方式及参数
				{
					pQueueEle->cnCtl[0] = pQueueEle->cnCtl[0] | 0x03;
					pQueueEle->cnCtl[1] = 0x13;
					pQueueEle->cnCtl[2] = 0x02;
					pQueueEle->nDataLenth =71;
					pQueueEle->strData = new char[pQueueEle->nDataLenth];
					memset( pQueueEle->strData, 0, pQueueEle->nDataLenth );
					memcpy( pQueueEle->strData, &mTreadBuf->DataBuf[count+2], pQueueEle->nDataLenth);

					nFlag = 1;

				}
				if(mTreadBuf->DataBuf[count] == 0x80 && mTreadBuf->DataBuf[count+1] == 0x02)     //抄表间隔
				{
					pQueueEle->cnCtl[0] = pQueueEle->cnCtl[0] | 0x03;
					pQueueEle->cnCtl[1] = 0x13;
					pQueueEle->cnCtl[2] = 0x04;

					pQueueEle->nDataLenth =1;
					pQueueEle->strData = new char[pQueueEle->nDataLenth];
					memset( pQueueEle->strData, 0, 1 );
					memcpy( pQueueEle->strData, &mTreadBuf->DataBuf[count+2], 1 );
	
					nFlag = 1;
				}
				if(mTreadBuf->DataBuf[count] == 0x01 && mTreadBuf->DataBuf[count+1] == 0x08)      //读一类任务数据
				{
					pQueueEle->cnCtl[0] = pQueueEle->cnCtl[0] | 0x03;
					pQueueEle->cnCtl[1] = 0x14;
					pQueueEle->cnCtl[2] = 0x01;
				}
				if(mTreadBuf->DataBuf[count] == 0x02 && mTreadBuf->DataBuf[count+1] == 0x08)      //读二类任务数据
				{
					pQueueEle->cnCtl[0] = pQueueEle->cnCtl[0] | 0x03;
					pQueueEle->cnCtl[1] = 0x14;
					pQueueEle->cnCtl[2] = 0x01;
				}
				if(mTreadBuf->DataBuf[count] == 0x80 && mTreadBuf->DataBuf[count+1] == 0x00)      //读终端告警项
				{
					pQueueEle->cnCtl[0] = pQueueEle->cnCtl[0] | 0x03;
					pQueueEle->cnCtl[1] = 0x16;
					pQueueEle->cnCtl[2] = 0x02;

					pQueueEle->nDataLenth =1;
					pQueueEle->strData = new char[pQueueEle->nDataLenth];
					memset( pQueueEle->strData, 0, 1 );
					if((mTreadBuf->DataBuf[count+4] & 0x10) == 0x10)       //终端故障
						pQueueEle->strData[0] |= 0x10;
					if((mTreadBuf->DataBuf[count+3] & 0x02) == 0x02)       //电压异常
						pQueueEle->strData[0] |= 0x01;
					if((mTreadBuf->DataBuf[count+3] & 0x01) == 0x01)       //电流异常
						pQueueEle->strData[0] |= 0x02;
					if((mTreadBuf->DataBuf[count+3] & 0x04) == 0x04)       //相序异常
						pQueueEle->strData[0] |= 0x04;
					if((mTreadBuf->DataBuf[count+3] & 0x20) == 0x20)       //终端停上电
						pQueueEle->strData[0] |= 0x08;

					nFlag = 1;
				}
				if(mTreadBuf->DataBuf[count] == 0x02 && mTreadBuf->DataBuf[count+1] == 0x01)      //读终端表号
				{
					pQueueEle->cnCtl[0] = pQueueEle->cnCtl[0] | 0x03;
					pQueueEle->cnCtl[1] = 0x17;
					pQueueEle->cnCtl[2] = 0x02;
				}
				if(mTreadBuf->DataBuf[count] == 0x04 && mTreadBuf->DataBuf[count+1] == 0x05)      //读终端滑差时间
				{
					pQueueEle->cnCtl[0] = pQueueEle->cnCtl[0] | 0x03;
					pQueueEle->cnCtl[1] = 0x0D;
					pQueueEle->cnCtl[2] = 0x01;
				}
				if(mTreadBuf->DataBuf[count] == 0x02 && mTreadBuf->DataBuf[count+1] == 0x08)      //查询2类数据自动任务
				{
					pQueueEle->cnCtl[0] = pQueueEle->cnCtl[0] | 0x03;
					pQueueEle->cnCtl[1] = 0x15;
					pQueueEle->cnCtl[2] = 0x01;


				}
				if(mTreadBuf->DataBuf[count] == 0x01 && mTreadBuf->DataBuf[count+1] == 0x03)      //电能表基本参数
				{
					pQueueEle->cnCtl[0] = pQueueEle->cnCtl[0] | 0x03;
					pQueueEle->cnCtl[1] = 0x1A;
					pQueueEle->cnCtl[2] = 0x01;

					pQueueEle->nDataLenth =8;
					pQueueEle->strData = new char[pQueueEle->nDataLenth];
					memset( pQueueEle->strData, 0, 8 );
					memcpy( pQueueEle->strData, &mTreadBuf->DataBuf[count+2], 8 );
					nFlag = 1;
				}	
				if(mTreadBuf->DataBuf[count] == 0x02 && mTreadBuf->DataBuf[count+1] == 0x03)      //电能表限制参数
				{
					pQueueEle->cnCtl[0] = pQueueEle->cnCtl[0] | 0x03;
					pQueueEle->cnCtl[1] = 0x1A;
					pQueueEle->cnCtl[2] = 0x02;

					pQueueEle->nDataLenth =27;
					pQueueEle->strData = new char[pQueueEle->nDataLenth];
					memset( pQueueEle->strData, 0, 27 );
					memcpy( pQueueEle->strData, &mTreadBuf->DataBuf[count+2], 27 );
					nFlag = 1;
				}

				break;
			case	YHAFN_ASKONEDATA:
				switch((mTreadBuf->DataBuf[count+7] & 0x60) >> 5)        //SEQ判断是否有后续帧
				{
				case	0:
					pQueueEle->cnCtl[0] = pQueueEle->cnCtl[0] | 0x10;          //多帧标志上行数据
					pQueueEle->bGetCTData = true;
					break;
				case	1:
					pQueueEle->cnCtl[0] = pQueueEle->cnCtl[0] | 0x00;          //多帧最后一帧标志上行数据
					pQueueEle->bGetCTData = false;
					break;
				case	2:
					pQueueEle->cnCtl[0] = pQueueEle->cnCtl[0] | 0x10;          //多帧标志上行数据
					pQueueEle->bGetCTData = true;
					break;
				case	3:
					pQueueEle->cnCtl[0] = pQueueEle->cnCtl[0] | 0x00;          //单帧标志上行数据
					pQueueEle->bGetCTData = false;
					break;
				}
				if(mTreadBuf->DataBuf[count] & 0x40 >>6)      //表示是自动任务上报
				{
					pQueueEle->autoTaskInfo.chAutoTask = 1;
					pQueueEle->nCountRTU = mTreadBuf->DataBuf[count] & 0x0f;
				}
				count+=8;
	
		      if(mTreadBuf->DataBuf[count]==0 && mTreadBuf->DataBuf[count+1]==0)
				{
			       pQueueEle->devAddr[5] = 0x00;
				}
				else
				{
				    nTemp=(int)(log10(mTreadBuf->DataBuf[count+1])/log10(2));
				    pQueueEle->devAddr[5] = nTemp*8 + (int)(log10(mTreadBuf->DataBuf[count])/log10(2)) + 1;

				}			
				count+=2;
				if(mTreadBuf->DataBuf[count] == 0x02 && mTreadBuf->DataBuf[count+1] == 0x00)  //读终端时间
				{
					pQueueEle->cnCtl[0] = pQueueEle->cnCtl[0] | 0x03;
					pQueueE

⌨️ 快捷键说明

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