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

📄 slavesimens.c

📁 电力行业的DL645采集程序,嵌入式Linux环境
💻 C
📖 第 1 页 / 共 4 页
字号:
		{
			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;
	INT8U buff[20];
	char SearchStr[10];

⌨️ 快捷键说明

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