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

📄 slavesimens.c

📁 本人设计的DL/T645规约电能表的抄表和电表模拟软件
💻 C
📖 第 1 页 / 共 4 页
字号:
		if( a != '(')		{			ptr = (INT8U *)strchr((char *)ptr, '(');			if(*ptr== NULL)			{				memset(pMaxRqu, 0xff, 3);				memset(pMaxRquTime, 0xff, 4);				return;			}			ptr++;		}				DealWithMaxRqu(ptr, pMaxRqu, pMaxRquTime);			}	else	{		memset(pMaxRqu, 0xff, 3);		memset(pMaxRquTime, 0xff, 4);	}}void GetPowerFact(INT8U *pRcvData, INT8U *pCharacterStr, INT8U *pResult){	INT8U *ptr;	INT8U buff[20];	int SearchStrLen;	INT8U a;	ptr = (INT8U *)strstr((char *)pRcvData, (char *)pCharacterStr);	SearchStrLen=strlen((char *)pCharacterStr);	if(ptr!= NULL)	{		ptr+=SearchStrLen;		a = *(ptr-1);		if( a != '(')		{			ptr = (INT8U *)strchr((char *)ptr, '(');			if(*ptr== NULL)			{				memset(pResult, 0xff, 2);				return;			}			ptr++;		}				memcpy(buff, ptr+1, 1);		memcpy(buff+1, ptr+3, 2);		buff[4] = '0';		mASCIIToBCD(buff, 4, pResult);	}	else		memset(pResult, 0xff, 2);}BOOL SearchSiemens(INT8U *pRcvData, INT8U *pCharacterStr){	INT8U *ptr;	int SearchStrLen;	ptr=(INT8U *)strstr((char *)pRcvData, (char *)pCharacterStr);	SearchStrLen=strlen((char *)pCharacterStr);	if(ptr!= NULL)	{		return TRUE;	}	else		return FALSE;}void GetVoltage(INT8U *pRcvData, INT8U *pCharacterStr, INT8U *pResult){	INT8U *ptr;	INT8U buff[20];	int SearchStrLen;	INT8U a;	ptr = (INT8U *)strstr((char *)pRcvData, (char *)pCharacterStr);	SearchStrLen=strlen((char *)pCharacterStr);	if(ptr!= NULL)	{		ptr+=SearchStrLen;		a = *(ptr-1);		if( a != '(')		{			ptr = (INT8U *)strchr((char *)ptr, '(');			if(ptr== NULL)			{				memcpy((INT8U *)pResult, 0, 2);				return;			}			ptr++;		}		buff[0] = '0';		memcpy(buff+1, ptr, 3);		mASCIIToBCD(buff, 4, pResult);	}	else		memset(pResult, 0xff, 2);}void GetCurrent(INT8U *pRcvData, INT8U *pCharacterStr, INT8U *pResult){	INT8U *ptr;	INT8U buff[20];	int SearchStrLen;	INT8U a;	ptr = (INT8U *)strstr((char *)pRcvData, (char *)pCharacterStr);	SearchStrLen=strlen((char *)pCharacterStr);	if(ptr!= NULL)	{		ptr+=SearchStrLen;		a = *(ptr-1);		if( a != '(')		{			ptr = (INT8U *)strchr((char *)ptr, '(');			if(ptr== NULL)			{				memcpy((INT8U *)pResult, 0, 2);				return;			}			ptr++;		}		memcpy(buff, ptr, 2);		memcpy(buff+2, ptr+3, 2);		mASCIIToBCD(buff, 4, pResult);	}	else		memset(pResult, 0xff, 2);}void GetVoltageDeg(INT8U *pRcvData, INT8U *pCharacterStr, INT8U *pResult){	INT8U *ptr;	INT8U buff[20];	int SearchStrLen;	INT8U a,tbuff[5];	INT16U gti;		ptr = (INT8U *)strstr((char *)pRcvData, (char *)pCharacterStr);	SearchStrLen=strlen((char *)pCharacterStr);	if(ptr!= NULL)	{		ptr+=SearchStrLen;		a = *(ptr-1);		if( a != '(')		{			ptr = (INT8U *)strchr((char *)ptr, '(');			if(ptr== NULL)			{				memcpy((INT8U *)pResult, 0, 2);				return;			}			ptr++;		}		for(gti=0;gti<5;gti++)		{			if(ptr[gti]=='.')				break;		}		if(gti>=5)		{			memcpy(buff, ptr, 4);			for(gti=0;gti<4;gti++)			{				tbuff[gti]=0;				if(buff[gti]>='0' && buff[gti]<='9')					{						tbuff[gti]=buff[gti] -'0';					}			}			pResult[1]=((tbuff[1]<<4)|(tbuff[2]));			pResult[0]=((tbuff[3]<<4)|0);		}		else		{			memcpy(buff, ptr, 5);			for(gti=0;gti<5;gti++)			{				tbuff[gti]=0;				if(buff[gti]>='0' && buff[gti]<='9')					{						tbuff[gti]=buff[gti] -'0';					}			}			pResult[1]=((tbuff[0]<<4)|(tbuff[1]));			pResult[0]=((tbuff[2]<<4)|(tbuff[4]));		}	}	else		memset(pResult, 0xff, 2);}void GetCurrentDeg(INT8U *pRcvData, INT8U *pCharacterStr, INT8U *pResult){	INT8U *ptr;	INT8U buff[20];	int SearchStrLen;	INT8U a,tbuff[5];	INT16U gti;		ptr = (INT8U *)strstr((char *)pRcvData, (char *)pCharacterStr);	SearchStrLen=strlen((char *)pCharacterStr);	if(ptr!= NULL)	{		ptr+=SearchStrLen;		a = *(ptr-1);		if( a != '(')		{			ptr = (INT8U *)strchr((char *)ptr, '(');			if(ptr== NULL)			{				memcpy((INT8U *)pResult, 0, 2);				return;			}			ptr++;		}		for(gti=0;gti<5;gti++)		{			if(ptr[gti]=='.')				break;		}		if(gti>=5)		{			memcpy(buff, ptr, 4);			for(gti=0;gti<4;gti++)			{				tbuff[gti]=0;				if(buff[gti]>='0' && buff[gti]<='9')					{						tbuff[gti]=buff[gti] -'0';					}			}			pResult[1]=((tbuff[1]<<4)|(tbuff[2]));			pResult[0]=((tbuff[3]<<4)|0);		}		else		{			memcpy(buff, ptr, 5);			for(gti=0;gti<5;gti++)			{				tbuff[gti]=0;				if(buff[gti]>='0' && buff[gti]<='9')					{						tbuff[gti]=buff[gti] -'0';					}			}			pResult[1]=((tbuff[0]<<4)|(tbuff[1]));			pResult[0]=((tbuff[2]<<4)|(tbuff[4]));		}	}	else		memset(pResult, 0xff, 2);}void DealWithSiemensZFB410(INT8U *pRcvData, int len, SiemensDataType *pSiemensData,INT8U lstat){	INT8U *ptr;	INT8U buff[20];	char SearchStr[10];	int SearchStrLen;	*(pRcvData+len)='\0';	//正向有功总电能//	GetZFBEnergy(pRcvData, (INT8U *)"20(", (INT8U *)(pSiemensData->E));		//上月正向有功总电能//	GetZFBEnergy(pRcvData,  (INT8U *)"\n20*", (INT8U *)(pSiemensData->LastMonthE));	//正向有功费率电能//	GetZFBEnergy(pRcvData,  (INT8U *)"8.1(", (INT8U *)(pSiemensData->RateE.FengE));	GetZFBEnergy(pRcvData,  (INT8U *)"8.2(", (INT8U *)(pSiemensData->RateE.PingE));	GetZFBEnergy(pRcvData,  (INT8U *)"8.3(", (INT8U *)(pSiemensData->RateE.GuE));	//上月正向有功费率电能//	GetZFBEnergy(pRcvData,  (INT8U *)"\n8.1*", (INT8U *)(pSiemensData->LastMonthRateE.FengE));	GetZFBEnergy(pRcvData,  (INT8U *)"\n8.2*", (INT8U *)(pSiemensData->LastMonthRateE.PingE));	GetZFBEnergy(pRcvData,  (INT8U *)"\n8.3*", (INT8U *)(pSiemensData->LastMonthRateE.GuE));	//正向无功总电能//	GetZFBEnergy(pRcvData,	(INT8U *)"22(", (INT8U *)(pSiemensData->NoE));     	 //正向无功总电能//	GetZFBEnergy(pRcvData,  (INT8U *)"22(", (INT8U *)(pSiemensData->NoE));	//上月正向无功总电能//	GetZFBEnergy(pRcvData, (INT8U *)"\n22*", (INT8U *)(pSiemensData->LastMonthNoE));		//反向有功总电能//	GetZFBEnergy(pRcvData,  (INT8U *)"21(", (INT8U *)(pSiemensData->NE));		//上月反向有功总电能//	GetZFBEnergy(pRcvData,  (INT8U *)"\n21*", (INT8U *)(pSiemensData->LastMonthNE));#if 0      if(lstat=='4')	{//printf("bbbbbbbbbbbbbbbbbbbbbbbbbbbb");	//正向无功总电能//		GetZFBEnergy(pRcvData,	(INT8U *)"22(", (INT8U *)(pSiemensData->NoE));     	 //正向无功总电能//	      GetZFBEnergy(pRcvData,  (INT8U *)"22(", (INT8U *)(pSiemensData->NoE));	//上月正向无功总电能//	     GetZFBEnergy(pRcvData, (INT8U *)"\n22*", (INT8U *)(pSiemensData->LastMonthNoE));		//反向有功总电能//	GetZFBEnergy(pRcvData,  (INT8U *)"21(", (INT8U *)(pSiemensData->NE));		//上月反向有功总电能//	GetZFBEnergy(pRcvData,  (INT8U *)"\n21*", (INT8U *)(pSiemensData->LastMonthNE));      	}	  else	  {//正向无功总电能//		GetZFBEnergy(pRcvData,  (INT8U *)"21(", (INT8U *)(pSiemensData->NoE));				//正向无功总电能//	       GetZFBEnergy(pRcvData,  (INT8U *)"21(", (INT8U *)(pSiemensData->NoE));	//上月正向无功总电能//	       GetZFBEnergy(pRcvData, (INT8U *)"\n21*", (INT8U *)(pSiemensData->LastMonthNoE));		  		  			  //反向有功总电能//		 GetZFBEnergy(pRcvData,  (INT8U *)"22(", (INT8U *)(pSiemensData->NE));		//上月反向有功总电能//	       GetZFBEnergy(pRcvData,  (INT8U *)"\n22*", (INT8U *)(pSiemensData->LastMonthNE));	  	  }#endif	//反向有功费率电能//	GetZFBEnergy(pRcvData, (INT8U *)"38.1(",  (INT8U *)(pSiemensData->RateNE.FengE));	GetZFBEnergy(pRcvData, (INT8U *)"38.2(",  (INT8U *)(pSiemensData->RateNE.PingE));	GetZFBEnergy(pRcvData, (INT8U *)"38.3(",  (INT8U *)(pSiemensData->RateNE.GuE));	//上月反向有功费率电能//	GetZFBEnergy(pRcvData, (INT8U *)"\n38.1*",  (INT8U *)(pSiemensData->LastMonthRateNE.FengE));	GetZFBEnergy(pRcvData, (INT8U *)"\n38.2*",  (INT8U *)(pSiemensData->LastMonthRateNE.PingE));	GetZFBEnergy(pRcvData, (INT8U *)"\n38.3*",  (INT8U *)(pSiemensData->LastMonthRateNE.GuE));	//反向无功总电能//	GetZFBEnergy(pRcvData, (INT8U *)"23(",  (INT8U *)(pSiemensData->NNoE));	//上月反向无功总电能//	GetZFBEnergy(pRcvData, (INT8U *)"\n23*",  (INT8U *)(pSiemensData->LastMonthNNoE));	if(SearchSiemens(pRcvData, (INT8U *)"\n10*")==TRUE)	{		//上月正向有功总需量		GetMaxRqu(pRcvData, (INT8U *)"\n10*", (INT8U *)(pSiemensData->LastMonthMaxRqu), (INT8U *)(pSiemensData->LastMonthMaxRquT));			}		if(SearchSiemens(pRcvData, (INT8U *)"\n6.0(")==TRUE)	{		//正向有功总需量		GetMaxRqu(pRcvData, (INT8U *)"\n6.0(", (INT8U *)(pSiemensData->MaxRqu), (INT8U *)(pSiemensData->MaxRquT));		//上月正向有功总需量		GetMaxRqu(pRcvData, (INT8U *)"\n6.0*", (INT8U *)(pSiemensData->LastMonthMaxRqu), (INT8U *)(pSiemensData->LastMonthMaxRquT));			}	else if(SearchSiemens(pRcvData, (INT8U *)"\n6(")==TRUE)	{		//正向有功总需量		GetMaxRqu(pRcvData, (INT8U *)"\n6(", (INT8U *)(pSiemensData->MaxRqu), (INT8U *)(pSiemensData->MaxRquT));		//上月正向有功总需量		GetMaxRqu(pRcvData, (INT8U *)"\n6*", (INT8U *)(pSiemensData->LastMonthMaxRqu), (INT8U *)(pSiemensData->LastMonthMaxRquT));		}			//正向有功费率需量//	GetMaxRqu(pRcvData, (INT8U *)"6.1(", (INT8U *)(pSiemensData->RateMaxRqu.feng), (INT8U *)(pSiemensData->RateMaxRquT.feng));	GetMaxRqu(pRcvData, (INT8U *)"6.2(", (INT8U *)(pSiemensData->RateMaxRqu.ping), (INT8U *)(pSiemensData->RateMaxRquT.ping));	GetMaxRqu(pRcvData, (INT8U *)"6.3(", (INT8U *)(pSiemensData->RateMaxRqu.gu), (INT8U *)(pSiemensData->RateMaxRquT.gu));		//上月正向有功费率需量//	GetMaxRqu(pRcvData, (INT8U *)"\n6.1*", (INT8U *)(pSiemensData->LastMonthRateMaxRqu.feng), (INT8U *)(pSiemensData->LastMonthRateMaxRquT.feng));	GetMaxRqu(pRcvData, (INT8U *)"\n6.2*", (INT8U *)(pSiemensData->LastMonthRateMaxRqu.ping), (INT8U *)(pSiemensData->LastMonthRateMaxRquT.ping));	GetMaxRqu(pRcvData, (INT8U *)"\n6.3*", (INT8U *)(pSiemensData->LastMonthRateMaxRqu.gu), (INT8U *)(pSiemensData->LastMonthRateMaxRquT.gu));	//实时电压//	if(SearchSiemens(pRcvData, (INT8U *)"\nL1(")==TRUE)	{		GetVoltage(pRcvData, (INT8U *)"\nL1(", (INT8U *)(pSiemensData->V.a));		GetVoltage(pRcvData, (INT8U *)"\nL2(", (INT8U *)(pSiemensData->V.b));		GetVoltage(pRcvData, (INT8U *)"\nL3(", (INT8U *)(pSiemensData->V.c));	}	else	{		GetVoltage(pRcvData, (INT8U *)"\nL.1(", (INT8U *)(pSiemensData->V.a));		GetVoltage(pRcvData, (INT8U *)"\nL.2(", (INT8U *)(pSiemensData->V.b));		GetVoltage(pRcvData, (INT8U *)"\nL.3(", (INT8U *)(pSiemensData->V.c));	}	//时间//	strcpy(SearchStr, "\12(");	ptr = (INT8U *)strstr((char *)pRcvData, (char *)SearchStr);	SearchStrLen = strlen(SearchStr);	if(ptr!= NULL)	{		ptr+=SearchStrLen;		pSiemensData->Date[3]=((*ptr-'0')<<4)|(*(ptr+1)-'0');		buff[2]=(*ptr-'0')*10+(*(ptr+1)-'0');		ptr+=3;		pSiemensData->Date[2]=((*ptr-'0')<<4)|(*(ptr+1)-'0');		buff[1]=(*ptr-'0')*10+(*(ptr+1)-'0');		ptr+=3;		pSiemensData->Date[1]=((*ptr-'0')<<4)|(*(ptr+1)-'0');		buff[0]=(*ptr-'0')*10+(*(ptr+1)-'0');	//	pSiemensData->Date[0]= GetWeek(buff[2],buff[1],buff[0]);	}	else		memset((INT8U *)(pSiemensData->Date), 0xff, 4);		strcpy(SearchStr, "\11(");	ptr = (INT8U *)strstr((char *)pRcvData, (char *)SearchStr);	SearchStrLen = strlen((char *)SearchStr);	if(ptr!= NULL)	{		ptr+=SearchStrLen;		pSiemensData->Time[2]=((*ptr-'0')<<4)|(*(ptr+1)-'0');		ptr+=3;		pSiemensData->Time[1]=((*ptr-'0')<<4)|(*(ptr+1)-'0');		ptr+=3;		pSiemensData->Time[0]=((*ptr-'0')<<4)|(*(ptr+1)-'0');	}	else	{		memset((INT8U *)(pSiemensData->Time), 0xff, 3);	}}void DealWithSiemensZFD405(INT8U *pRcvData, int len, SiemensDataType *pSiemensData){	INT8U *ptr;

⌨️ 快捷键说明

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