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

📄 sypbprotocol.cpp

📁 配电变压器负荷监测与控制系统数据监测传输
💻 CPP
📖 第 1 页 / 共 5 页
字号:
				case	0x03:				 			/*终端校时*/
					mTreadBuf->DataBuf[count-6] = 0x4A;    //改写控制码
					mTreadBuf->DataBuf[count++] = 0x05;    //AFN
					mTreadBuf->DataBuf[count++] = 0x70;     //SEQ


					mTreadBuf->DataBuf[count++] = 0x00;               //pn
					mTreadBuf->DataBuf[count++] = 0x00;

					mTreadBuf->DataBuf[count++] = 0x40;       //DT
					mTreadBuf->DataBuf[count++] = 0x03;
					
					cTime = COleDateTime::GetCurrentTime();
					mTreadBuf->DataBuf[count++] = CUtilities::DecToHex(cTime.GetSecond());
					mTreadBuf->DataBuf[count++] = CUtilities::DecToHex(cTime.GetMinute());
					mTreadBuf->DataBuf[count++] = CUtilities::DecToHex(cTime.GetHour());
					mTreadBuf->DataBuf[count++] = CUtilities::DecToHex(cTime.GetDay());				

				    mTreadBuf->DataBuf[count++] = (CUtilities::DecToHex((cTime.GetDayOfWeek()==1)?7:(cTime.GetDayOfWeek()-1))<<5) | CUtilities::DecToHex(cTime.GetMonth());
					mTreadBuf->DataBuf[count++] = CUtilities::DecToHex(cTime.GetYear()%100);
                    //memcpy( &mTreadBuf->DataBuf[count], pQueueEle->strData, pQueueEle->nDataLenth );
					//count+=pQueueEle->nDataLenth;
					mTreadBuf->DataBuf[count++] = 0x00;       //PW
					mTreadBuf->DataBuf[count++] = 0x00;
					break;
					
				case	0x04:							/*设置终端抄表间隔*/
					mTreadBuf->DataBuf[count++] = 0x04;    //AFN
					mTreadBuf->DataBuf[count++] = 0x60;     //SEQ

					if(!(pQueueEle->devAddr[5]))
						mTreadBuf->DataBuf[count++] = 0;
					else
						mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) % 8));
					mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) / 8-1));

					mTreadBuf->DataBuf[count++] = 0x80;       //DT
					mTreadBuf->DataBuf[count++] = 0x02;
                    memcpy( &mTreadBuf->DataBuf[count], pQueueEle->strData, pQueueEle->nDataLenth );
					count+=pQueueEle->nDataLenth;
					mTreadBuf->DataBuf[count++] = 0x00;       //PW
					mTreadBuf->DataBuf[count++] = 0x00;
					break;
				}/*end of (switch(pQueueEle->cnCtl[2]))*/
				break;
			case	JCCTL_READPARA:                            /*查询终端参数*/
				switch(pQueueEle->cnCtl[2])
				{
				case	0x01:							/*主站IP地址和端口*/
					mTreadBuf->DataBuf[count++] = 0x0A;    //AFN
					mTreadBuf->DataBuf[count++] = 0x60;     //SEQ


					mTreadBuf->DataBuf[count++] = 0x00;               //pn
					mTreadBuf->DataBuf[count++] = 0x00;

					mTreadBuf->DataBuf[count++] = 0x04;       //DT
					mTreadBuf->DataBuf[count++] = 0x00;

					break;
					
				case	0x02:							/*终端在线通信方式*/
					mTreadBuf->DataBuf[count++] = 0x0A;    //AFN
					mTreadBuf->DataBuf[count++] = 0x60;     //SEQ


					mTreadBuf->DataBuf[count++] = 0x00;               //pn
					mTreadBuf->DataBuf[count++] = 0x00;

					mTreadBuf->DataBuf[count++] = 0x01;       //DT
					mTreadBuf->DataBuf[count++] = 0x0B;

					break;
					
				case	0x03:							/*读取终端时间*/
					mTreadBuf->DataBuf[count++] = 0x0C;                        //AFN
					mTreadBuf->DataBuf[count++] = 0x60;                     //SEQ


					mTreadBuf->DataBuf[count++] = 0x00;               //pn
					mTreadBuf->DataBuf[count++] = 0x00;

					mTreadBuf->DataBuf[count++] = 0x02;                      //DT
					mTreadBuf->DataBuf[count++] = 0x00;

					break;
					
				case	0x04:							/*读取终端抄表间隔*/
					mTreadBuf->DataBuf[count++] = 0x0A;                  //AFN
					mTreadBuf->DataBuf[count++] = 0x60;                     //SEQ

					if(!(pQueueEle->devAddr[5]))
						mTreadBuf->DataBuf[count++] = 0;
					else
						mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) % 8));
					mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) / 8-1));

					mTreadBuf->DataBuf[count++] = 0x80;                          //DT
					mTreadBuf->DataBuf[count++] = 0x02;

					break;
				}/*end of (switch(pQueueEle->cnCtl[2]))*/
				break;
			case    JCCTL_SETMETERPARA:                             //设置电能表参数
				switch(pQueueEle->cnCtl[2])
				{
				case    0x01:                           //测量点基本参数
					mTreadBuf->DataBuf[count++] = 0x04;                  //AFN
					mTreadBuf->DataBuf[count++] = 0x60;                     //SEQ

					if(!(pQueueEle->devAddr[5]))
						mTreadBuf->DataBuf[count++] = 0;
					else
						mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) % 8));
					mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) / 8-1));

					mTreadBuf->DataBuf[count++] = 0x01;                          //DT
					mTreadBuf->DataBuf[count++] = 0x03;

                    memcpy( &mTreadBuf->DataBuf[count], pQueueEle->strData, pQueueEle->nDataLenth );
					count+=pQueueEle->nDataLenth;
					mTreadBuf->DataBuf[count++] = 0x00;       //PW
					mTreadBuf->DataBuf[count++] = 0x00;
					break;
					
				case    0x02:                             //测量电限制参数
					mTreadBuf->DataBuf[count++] = 0x04;                  //AFN
					mTreadBuf->DataBuf[count++] = 0x60;                     //SEQ

					if(!(pQueueEle->devAddr[5]))
						mTreadBuf->DataBuf[count++] = 0;
					else
						mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) % 8));
					mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) / 8-1));

					mTreadBuf->DataBuf[count++] = 0x02;                          //DT
					mTreadBuf->DataBuf[count++] = 0x03;

                    memcpy( &mTreadBuf->DataBuf[count], pQueueEle->strData, pQueueEle->nDataLenth );
					count+=pQueueEle->nDataLenth;
					mTreadBuf->DataBuf[count++] = 0x00;       //PW
					mTreadBuf->DataBuf[count++] = 0x00;
					break;

				}
				break;
			case    JCCTL_READMETERPARA:                         //读取电能表参数
				switch(pQueueEle->cnCtl[2])
				{
				case    0x01:                                 //测量点基本参数
					mTreadBuf->DataBuf[count++] = 0x0A;                  //AFN
					mTreadBuf->DataBuf[count++] = 0x60;                     //SEQ

					if(!(pQueueEle->devAddr[5]))
						mTreadBuf->DataBuf[count++] = 0;
					else
						mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) % 8));
					mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) / 8-1));

					mTreadBuf->DataBuf[count++] = 0x01;                          //DT
					mTreadBuf->DataBuf[count++] = 0x03;
					break;
					
				case    0x02:                             //测量电限制参数
					mTreadBuf->DataBuf[count++] = 0x0A;                  //AFN
					mTreadBuf->DataBuf[count++] = 0x60;                     //SEQ

					if(!(pQueueEle->devAddr[5]))
						mTreadBuf->DataBuf[count++] = 0;
					else
						mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) % 8));
					mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) / 8-1));

					mTreadBuf->DataBuf[count++] = 0x02;                          //DT
					mTreadBuf->DataBuf[count++] = 0x03;
					break;
				}
				break;
			case	JCCTL_AUTOMISSIONSET:                      /*自动任务设置*/
				switch(pQueueEle->cnCtl[2])
				{
				int n;
                int N;                                   //标定任务数
				case	0x01:							/*自动任务设置*/
					mTreadBuf->DataBuf[count++] = 0x04;                //AFN
					mTreadBuf->DataBuf[count++] = 0x60;                     //SEQ

					if(!(pQueueEle->devAddr[5]))
					{
						mTreadBuf->DataBuf[count++] = 0;
					}
					else
					{
						mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) % 8));
					}
					mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->devAddr[5]+7) / 8-1));

					mTreadBuf->DataBuf[count++] = 0x02;                //DT
					mTreadBuf->DataBuf[count++] = 0x08;
					
                    memcpy( &mTreadBuf->DataBuf[count], pQueueEle->strData, 9 );//数据域 周期--标识个数
					mTreadBuf->DataBuf[count+7] = 0x04;	                //抽取倍率设为3
					N = count+8;
					count+=9;

                    for(n=0;n<pQueueEle->strData[8];n++)
					{
				
						mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->strData[8+n*3+1]+7) % 8));
					    mTreadBuf->DataBuf[count++] = (int)pow(2,((pQueueEle->strData[8+n*3+1]+7) / 8-1)); 
						
					    if(pQueueEle->strData[8+n*3+2] ==  0x01 && pQueueEle->strData[8+n*3+3] ==  0x01)//正向有功
						{
							mTreadBuf->DataBuf[count++] = 0x10;
							mTreadBuf->DataBuf[count++] = 0x0C;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x01 && pQueueEle->strData[8+n*3+3] ==  0x03)//正向无功
						{
							mTreadBuf->DataBuf[count++] = 0x20;
							mTreadBuf->DataBuf[count++] = 0x0C;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x01 && pQueueEle->strData[8+n*3+3] ==  0x02)//反相有功
						{
							mTreadBuf->DataBuf[count++] = 0x40;
							mTreadBuf->DataBuf[count++] = 0x0C;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x01 && pQueueEle->strData[8+n*3+3] ==  0x04)//反相无功
						{
							mTreadBuf->DataBuf[count++] = 0x80;
							mTreadBuf->DataBuf[count++] = 0x0C;
						}

					    if(pQueueEle->strData[8+n*3+2] ==  0x02 && pQueueEle->strData[8+n*3+3] ==  0x01)//最大需量及发生时间
						{
							mTreadBuf->DataBuf[count++] = 0x04;
							mTreadBuf->DataBuf[count++] = 0x00;
                            mTreadBuf->DataBuf[N]++;
							mTreadBuf->DataBuf[count++] = mTreadBuf->DataBuf[count-4];
							mTreadBuf->DataBuf[count++] = mTreadBuf->DataBuf[count-4];
							mTreadBuf->DataBuf[count++] = 0x08;
							mTreadBuf->DataBuf[count++] = 0x00;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x04 && pQueueEle->strData[8+n*3+3] ==  0x01)//A相电压
						{
							mTreadBuf->DataBuf[count++] = 0x01;
							mTreadBuf->DataBuf[count++] = 0x0B;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x04 && pQueueEle->strData[8+n*3+3] ==  0x02)//B相电压
						{
							mTreadBuf->DataBuf[count++] = 0x02;
							mTreadBuf->DataBuf[count++] = 0x0B;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x04 && pQueueEle->strData[8+n*3+3] ==  0x03)//C相电压
						{
							mTreadBuf->DataBuf[count++] = 0x04;
							mTreadBuf->DataBuf[count++] = 0x0B;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x05 && pQueueEle->strData[8+n*3+3] ==  0x01)//A相电流
						{
							mTreadBuf->DataBuf[count++] = 0x08;
							mTreadBuf->DataBuf[count++] = 0x0B;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x05 && pQueueEle->strData[8+n*3+3] ==  0x02)//B相电流
						{
							mTreadBuf->DataBuf[count++] = 0x10;
							mTreadBuf->DataBuf[count++] = 0x0B;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x05 && pQueueEle->strData[8+n*3+3] ==  0x03)//C相电流
						{
							mTreadBuf->DataBuf[count++] = 0x20;
							mTreadBuf->DataBuf[count++] = 0x0B;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x06 && pQueueEle->strData[8+n*3+3] ==  0x01)//总有功功率
						{
							mTreadBuf->DataBuf[count++] = 0x01;
							mTreadBuf->DataBuf[count++] = 0x0A;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x06 && pQueueEle->strData[8+n*3+3] ==  0x02)//A相有功功率
						{
							mTreadBuf->DataBuf[count++] = 0x02;
							mTreadBuf->DataBuf[count++] = 0x0A;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x06 && pQueueEle->strData[8+n*3+3] ==  0x03)//B相有功功率
						{
							mTreadBuf->DataBuf[count++] = 0x04;
							mTreadBuf->DataBuf[count++] = 0x0A;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x06 && pQueueEle->strData[8+n*3+3] ==  0x04)//C相有功功率
						{
							mTreadBuf->DataBuf[count++] = 0x08;
							mTreadBuf->DataBuf[count++] = 0x0A;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x07 && pQueueEle->strData[8+n*3+3] ==  0x01)//总无功功率
						{
							mTreadBuf->DataBuf[count++] = 0x10;
							mTreadBuf->DataBuf[count++] = 0x0A;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x07 && pQueueEle->strData[8+n*3+3] ==  0x02)//A相无功功率
						{
							mTreadBuf->DataBuf[count++] = 0x20;
							mTreadBuf->DataBuf[count++] = 0x0A;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x07 && pQueueEle->strData[8+n*3+3] ==  0x03)//B相无功功率
						{
							mTreadBuf->DataBuf[count++] = 0x40;
							mTreadBuf->DataBuf[count++] = 0x0A;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x07 && pQueueEle->strData[8+n*3+3] ==  0x04)//C相无功功率
						{
							mTreadBuf->DataBuf[count++] = 0x80;
							mTreadBuf->DataBuf[count++] = 0x0A;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x08 && pQueueEle->strData[8+n*3+3] ==  0x01)//总功率因数
						{
							mTreadBuf->DataBuf[count++] = 0x01;
							mTreadBuf->DataBuf[count++] = 0x0D;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x08 && pQueueEle->strData[8+n*3+3] ==  0x02)//A相功率因数
						{
							mTreadBuf->DataBuf[count++] = 0x02;
							mTreadBuf->DataBuf[count++] = 0x0D;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x08 && pQueueEle->strData[8+n*3+3] ==  0x03)//B相功率因数
						{
							mTreadBuf->DataBuf[count++] = 0x04;
							mTreadBuf->DataBuf[count++] = 0x0D;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x08 && pQueueEle->strData[8+n*3+3] ==  0x04)//C相功率因数
						{
							mTreadBuf->DataBuf[count++] = 0x08;
							mTreadBuf->DataBuf[count++] = 0x0D;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x09 && pQueueEle->strData[8+n*3+3] ==  0x01)//视在功率
						{
							mTreadBuf->DataBuf[count++] = 0x20;
							mTreadBuf->DataBuf[count++] = 0x13;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x09 && pQueueEle->strData[8+n*3+3] ==  0x02)//A相视在功率
						{
							mTreadBuf->DataBuf[count++] = 0x40;
							mTreadBuf->DataBuf[count++] = 0x13;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x09 && pQueueEle->strData[8+n*3+3] ==  0x03)//B相视在功率
						{
							mTreadBuf->DataBuf[count++] = 0x80;
							mTreadBuf->DataBuf[count++] = 0x13;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x09 && pQueueEle->strData[8+n*3+3] ==  0x04)//C相视在功率
						{
							mTreadBuf->DataBuf[count++] = 0x01;
							mTreadBuf->DataBuf[count++] = 0x14;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x09 && pQueueEle->strData[8+n*3+3] ==  0x05)//频率
						{
							mTreadBuf->DataBuf[count++] = 0x10;
							mTreadBuf->DataBuf[count++] = 0x13;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x0B && pQueueEle->strData[8+n*3+3] ==  0x01)//断相数据(日冻结数据)
						{
							mTreadBuf->DataBuf[count++] = 0x40;
							mTreadBuf->DataBuf[count++] = 0x03;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x10 && pQueueEle->strData[8+n*3+3] ==  0x01)//日统计电压值(日统计数据A、B、C三相)
						{
							mTreadBuf->DataBuf[count++] = 0x04;
							mTreadBuf->DataBuf[count++] = 0x03;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x10 && pQueueEle->strData[8+n*3+3] ==  0x02)//日统计电流值(日统计数据A、B、C三相)
						{
							mTreadBuf->DataBuf[count++] = 0x20;
							mTreadBuf->DataBuf[count++] = 0x12;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x10 && pQueueEle->strData[8+n*3+3] ==  0x03)//日统计功率因数值(日统计数据A、B、C三相)
						{
							mTreadBuf->DataBuf[count++] = 0x02;
							mTreadBuf->DataBuf[count++] = 0x13;
						}
					    if(pQueueEle->strData[8+n*3+2] ==  0x10 && pQueueEle->strData[8+n*3+3] ==  0x04)//日统计有功功率值(日统计数据A、B、C三相)
						{
							mTreadBuf->DataBuf[count++] = 0x40;
							mTreadBuf->DataBuf[count++] = 0x12;
						}

⌨️ 快捷键说明

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