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

📄 voltage.c

📁 应用与电网中电压合格率的统计。经过现场的投运使用
💻 C
📖 第 1 页 / 共 4 页
字号:
{
	return ;
}
BYTE SetVstatus(BYTE byIndex)
{
	if (ram_Data.Utemp[byIndex] < ram_Data.Udown2[byIndex] - ram_Data.U_Error[byIndex]/2)
	{
	 //  Print("1111");
		ram_Data.Exceed_FLAG[byIndex] = EXCEED_DOWN_STATIC;
	}
	else if( ram_Data.Utemp[byIndex] >= ram_Data.Udown2[byIndex] - ram_Data.U_Error[byIndex]/2
		 &&  ram_Data.Utemp[byIndex] < ram_Data.Udown2[byIndex] + ram_Data.U_Error[byIndex]/2)
	{
	   // Print("2222");
		if (ram_Data.Exceed_FLAG[byIndex] != EXCEED_DOWN_STATIC)
              ram_Data.Exceed_FLAG[byIndex] = EXCEED_DOWN_LIMIT;
	}
	else if (ram_Data.Utemp[byIndex] >= ram_Data.Udown2[byIndex]+ram_Data.U_Error[byIndex]/2
		&&   ram_Data.Utemp[byIndex] < ram_Data.Udown[byIndex] - ram_Data.U_Error[byIndex]/2)
	{
	   // Print("3333");
		ram_Data.Exceed_FLAG[byIndex] = EXCEED_DOWN_LIMIT;	
	}
	else if (ram_Data.Utemp[byIndex] >= (ram_Data.Udown[byIndex] - ram_Data.U_Error[byIndex]/2)
		&&   ram_Data.Utemp[byIndex] < ram_Data.Udown[byIndex] + ram_Data.U_Error[byIndex]/2)
	{
	  //  Print("4444");
		if (ram_Data.Exceed_FLAG[byIndex] != EXCEED_DOWN_LIMIT)
              ram_Data.Exceed_FLAG[byIndex] = VOLTAGE_REGULAR;
	}
	else if (ram_Data.Utemp[byIndex] >= (ram_Data.Udown[byIndex] + ram_Data.U_Error[byIndex]/2)
		&&   ram_Data.Utemp[byIndex] < ram_Data.Uup[byIndex] - ram_Data.U_Error[byIndex]/2)
	{
	  //   Print("55555");
		 ram_Data.Exceed_FLAG[byIndex] = VOLTAGE_REGULAR;
	}
	else if (ram_Data.Utemp[byIndex] >= (ram_Data.Uup[byIndex] - ram_Data.U_Error[byIndex]/2)
		&&   ram_Data.Utemp[byIndex] < ram_Data.Uup[byIndex] + ram_Data.U_Error[byIndex]/2)
	{
	  //  Print("66666");
		if (ram_Data.Exceed_FLAG[byIndex] != VOLTAGE_REGULAR)
		   ram_Data.Exceed_FLAG[byIndex] = EXCEED_UP_LIMIT;
	}
	else if (ram_Data.Utemp[byIndex] >= (ram_Data.Uup[byIndex] + ram_Data.U_Error[byIndex]/2)
		&&   ram_Data.Utemp[byIndex] < ram_Data.Uup2[byIndex] - ram_Data.U_Error[byIndex]/2)
	{
	  //  Print("7777");
		 ram_Data.Exceed_FLAG[byIndex] = EXCEED_UP_LIMIT;	
	}
	else if (ram_Data.Utemp[byIndex] >= ram_Data.Uup2[byIndex] - ram_Data.U_Error[byIndex]/2
		&&ram_Data.Utemp[byIndex] < ram_Data.Uup2[byIndex] + ram_Data.U_Error[byIndex]/2)
	{
	// Print("8888");
		if (ram_Data.Exceed_FLAG[byIndex] != EXCEED_UP_LIMIT)
		   ram_Data.Exceed_FLAG[byIndex] = EXCEED_UP_STATIC;
	}
	else if (ram_Data.Utemp[byIndex] >= ram_Data.Uup2[byIndex]+ram_Data.U_Error[byIndex]/2)
	{
	   // Print("9999");
		ram_Data.Exceed_FLAG[byIndex] = EXCEED_UP_STATIC;
	}
	return ram_Data.Exceed_FLAG[byIndex];
}
/*判断当前的电压是过压还是失压*/
/*BYTE SetOverLose(BYTE byIndex)
{
   if(ram_Data.Utemp[byIndex] < ram_Data.Udown2[byIndex])
   {
       // Print("55555");
	    ram_Data.OverLose_Flag[byIndex] = EXCEED_DOWN_STATIC;
   }
   else if ( ram_Data.Utemp[byIndex] < ram_Data.ULose[byIndex] -ram_Data.U_Error[byIndex]/2)
   {   //Print("66666");
   	  ram_Data.OverLose_Flag[byIndex] = LOSE_VOLTAGE; //欠压
   }
   else if( ram_Data.Utemp[byIndex] >= ram_Data.ULose[byIndex] - ram_Data.U_Error[byIndex]/2
       && ram_Data.Utemp[byIndex] < ram_Data.ULose[byIndex] + ram_Data.U_Error[byIndex]/2
	  )
   {
      ///Print("77777777");   
       if(ram_Data.OverLose_Flag[byIndex] != LOSE_VOLTAGE)
		   ram_Data.OverLose_Flag[byIndex] = VOLTAGE_REGULAR;
   }
   else if( ram_Data.Utemp[byIndex] >=ram_Data.ULose[byIndex] + ram_Data.U_Error[byIndex]/2
	   && ram_Data.Utemp[byIndex] < ram_Data.UOver[byIndex] - ram_Data.U_Error[byIndex]/2
	 )
	{
	  // Print("000000000000");   
       ram_Data.OverLose_Flag[byIndex] = VOLTAGE_REGULAR;//正常OVER_VOLTAGE; 
	}
	else if(  ram_Data.Utemp[byIndex] >= (ram_Data.UOver[byIndex] - ram_Data.U_Error[byIndex] /2)
      && ram_Data.Utemp[byIndex] < (ram_Data.UOver[byIndex] + ram_Data.U_Error[byIndex] /2)
      )
    {
        // Print("2222");
         if(ram_Data.OverLose_Flag[byIndex] != OVER_VOLTAGE)
		   ram_Data.OverLose_Flag[byIndex] = VOLTAGE_REGULAR;
	}
	else if( ram_Data.Utemp[byIndex] >=ram_Data.UOver[byIndex] + ram_Data.U_Error[byIndex] /2
	)
	{  // Print("3333333");
       ram_Data.OverLose_Flag[byIndex] = OVER_VOLTAGE; //过压
	}
   	return ram_Data.OverLose_Flag[byIndex];
}
*/
BOOL GetVALUE(DWORD*value, DWORD*Un)
{
	BYTE i;
	//static int j =0;
    if (0 == g_bAdcUpdate_VoltageFlag) return FALSE;
	g_bAdcUpdate_VoltageFlag = FALSE;
	/*在工程化的处理中,要把额定值Un考虑进去*/
    value[0] = (DWORD)( g_sRealVal.wUa/(float)wVOLTAGE_STANDARD[0]/10.0 * Un[0] );
    value[1] = (DWORD)( g_sRealVal.wUb/(float)wVOLTAGE_STANDARD[1]/10.0 * Un[1] );
    value[2] = (DWORD)( g_sRealVal.wUc/(float)wVOLTAGE_STANDARD[2]/10.0 * Un[2] );
	
    return TRUE;
}

//**************采集/统计/保存数据*****************
void interuptserver(SRestrict *psRestrict)
{
	DWORD dwTemp;
	INT16 i;
	DWORD temp[MAX_LU_NUM], temp1;
	SDateTime sTime;
	DWORD sec, sec1;
	BYTE byTemp;
	BYTE diff_sec  = 0;
    BYTE bySaveFlag = 0;
    INT32 iDcTemp;
    BYTE w;
	GetTime(&sTime);
  
	if (sTime.bySecond == ram_Data.lastSecond)
	{
	//	OSTimeDly(10);
		return;
	}
	if (!GetVALUE(&temp[0], &ram_Data.Un[0])) 
	{	    
	  //   TestAdcNoCom();//初始化AD
		return;
    }

	for (i=0; i<MAX_SHOW_LU_NUM; i++)
	{
		if (ram_Data.Utemp[i] == temp[i]
		    ||temp[i] < 20
		    ||temp[i] > 6000)
		{
			byErrFlay[i] ++;
			if ( (byErrFlay[i]+1) % 180 == 0 )
			{
				MUST_INITIAL_5460 = TRUE;
			}
		}
		else byErrFlay[i] = 0;
	}
	byTemp = 0;
	for (i=0; i<MAX_SHOW_LU_NUM; i++)
	{
	    if (byErrFlay[i] > 210)
			byTemp ++;
	}
	if (byTemp >= MAX_SHOW_LU_NUM)
	{
	//	FeedDog(0, 1);
		OSTimeDly(10);
	}
	
   TransformerState(psRestrict, &sTime);	//进行配变的统计  一秒钟一次
   
	//将得到的瞬时RMS值赋值给内存变量,并修改相应状态
	//判断最大值最小值等是否修改
	for (i=0; i<MAX_SHOW_LU_NUM; i++)
	{
		ram_Data.stat_time[i].dwStateValue_d +=temp[i];
		ram_Data.stat_time[i].dwStateNum_d ++;
			ram_Data.stat_time[i].dwStateValue_m +=temp[i];
		ram_Data.stat_time[i].dwStateNum_m ++;	
	}
	ram_Data.dwDcValue_d += g_sRealVal.iDCValue;
	ram_Data.dwDcValue_m += g_sRealVal.iDCValue;
	ram_Data.lastSecond = sTime.bySecond;  //为下次循环做准备
	
     //***********天统计***************
    sec = GetSecondSinceEpoch(&sTime);
	bySaveFlag = 0;
	
	for (i=0;  i<MAX_SHOW_LU_NUM;  i++)
	{   
		sec1 = GetSecondSinceEpoch(&ram_Data.sLastSamTime);
		 if ((sec >= sec1+60 || sec < sec1) && (i==0))// && sec1 > 946080000)
         {	
            bySaveFlag = 1;
         }  
         if(bySaveFlag == 1)
         {
			if(i == 0 )
			{
			    iDcTemp = ram_Data.dwDcValue_d / ram_Data.stat_time[0].dwStateNum_d;
				ram_Data.dwDcValue_d = 0;
			}
			ram_Data.Utemp[i] = ram_Data.stat_time[i].dwStateValue_d / ram_Data.stat_time[i].dwStateNum_d;
			if(ram_Data.stat_time[i].dwStateNum_d ==0)
			    ram_Data.Utemp[i] =0;
			ram_Data.stat_time[i].dwStateValue_d = 0;
			ram_Data.stat_time[i].dwStateNum_d = 0;
			byTemp = SetVstatus(i);
			if(byTemp == EXCEED_DOWN_STATIC)//欠压
			{
				g_sVoltStat.dwLoseT[i] ++;
   			}
			else if(byTemp == EXCEED_UP_STATIC)//过压
			{
			   g_sVoltStat.dwOverT[i] ++;
			}
			else if (byTemp == EXCEED_UP_LIMIT)
			{
				g_sVoltStat.dwUperT[i] ++;
			}
			else if (byTemp == EXCEED_DOWN_LIMIT)
			{
			    g_sVoltStat.dwLower[i] ++;
			}
			else if (byTemp == VOLTAGE_REGULAR)
			{
				g_sVoltStat.dwGoodT[i] ++;
			}
			if (byTemp == EXCEED_UP_LIMIT || byTemp == VOLTAGE_REGULAR || byTemp==EXCEED_DOWN_LIMIT)
			{
				if (ram_Data.sLastSamTime.byMonth == sTime.byMonth &&
					ram_Data.sLastSamTime.wYear == sTime.wYear &&
					ram_Data.sLastSamTime.byDay == sTime.byDay
				   )
				{   //××××天统计
		     		if (ram_Data.Utemp[i] > g_sVoltStat.dwMaxU[i] || g_sVoltStat.dwMaxU[i]== 0)
					{			  
						g_sVoltStat.dwMaxU[i] = ram_Data.Utemp[i];

						g_sVoltStat.dwMaxT[i] = sTime.byDay;
						g_sVoltStat.dwMaxT[i] <<= 8;
						g_sVoltStat.dwMaxT[i] |= sTime.byHour;
						g_sVoltStat.dwMaxT[i] <<= 8;
						g_sVoltStat.dwMaxT[i] |= sTime.byMinute;
  
						g_sTransFormerState.dwMaxU[i] = ram_Data.Utemp[i];
						g_sTransFormerState.dwMaxUT[i] = g_sVoltStat.dwMaxT[i];
					}
					if (ram_Data.Utemp[i]< g_sVoltStat.dwMinU[i] || g_sVoltStat.dwMinU[i] == 0)
					{				    
						g_sVoltStat.dwMinU[i] = ram_Data.Utemp[i];
						g_sVoltStat.dwMinT[i] = sTime.byDay;
						g_sVoltStat.dwMinT[i] <<= 8;
						g_sVoltStat.dwMinT[i] |= sTime.byHour;
						g_sVoltStat.dwMinT[i] <<= 8;
						g_sVoltStat.dwMinT[i] |= sTime.byMinute;
						g_sTransFormerState.dwMinU[i] = g_sVoltStat.dwMinU[i];
						g_sTransFormerState.dwMinUT[i] = g_sVoltStat.dwMinT[i];
					}
				}
			}
			//配变统计的
		    g_sTransFormerState.dwOverUT[i] = g_sVoltStat.dwOverT[i];
            g_sTransFormerState.dwLoseUT[i] = g_sVoltStat.dwLoseT[i];
			if (ram_Data.Utemp[i] > ram_Data.Udown2[i] &&  ram_Data.Utemp[i] < ram_Data.Uup2[i])
			{   // ××天
				g_sVoltageCompute.dwTimeCnt[i] ++;
                g_sVoltageCompute.dwU[i] +=  ram_Data.Utemp[i];
                g_sVoltStat.dwAvgU[i] = g_sVoltageCompute.dwU[i] / g_sVoltageCompute.dwTimeCnt[i];
 		    }
			//*********对直流量的统计***********
			if(i == 0)
			{
				if(iDcTemp < psRestrict->wAnalogDCMin)
				{ 
					g_sVoltStat.dwDCLowerT ++;
				}
				else if(iDcTemp > psRestrict->wAnalogDCMin)
				{
					 g_sVoltStat.dwDCUperT ++;
				}
				if(iDcTemp > g_sVoltStat.dwDCMax || g_sVoltStat.dwDCMax==0)
				{
					 g_sVoltStat.dwDCMaxT = iDcTemp;
					 g_sVoltStat.dwDCMaxT = sTime.byDay;
					 g_sVoltStat.dwDCMaxT <<= 8;
					 g_sVoltStat.dwDCMaxT |= sTime.byHour;
					 g_sVoltStat.dwDCMaxT <<= 8;
					 g_sVoltStat.dwDCMaxT |= sTime.byMinute;
				}
				if(iDcTemp <g_sVoltStat.dwDCMin || g_sVoltStat.dwDCMin==0)
				{
					 g_sVoltStat.dwDCMinT = iDcTemp;
					 g_sVoltStat.dwDCMinT = sTime.byDay;
					 g_sVoltStat.dwDCMinT <<= 8;
					 g_sVoltStat.dwDCMinT |= sTime.byHour;
					 g_sVoltStat.dwDCMinT <<= 8;
					 g_sVoltStat.dwDCMinT |= sTime.byMinute;
				}
			}
			   // 计算合格率
 		    g_sVoltRate.dwUperRate[i] =  g_sVoltStat.dwUperT[i] *10000 / g_sVoltageCompute.dwTimeCnt[i];
 		    g_sVoltRate.dwLowRate[i] =  g_sVoltStat.dwLower[i] *10000 / g_sVoltageCompute.dwTimeCnt[i];
 		    g_sVoltRate.dwGoodRate[i] =  g_sVoltStat.dwGoodT[i] *10000 / g_sVoltageCompute.dwTimeCnt[i];
		 }
		 if(bySaveFlag ==1 && i==0)  
		 {
		     //判断是否到保存 天 数据的时间
			if (   sTime.byDay != ram_Data.sLastSamTime.byDay
				|| sTime.wYear != ram_Data.sLastSamTime.wYear
				|| sTime.byMonth != ram_Data.sLastSamTime.byMonth
			   )
			{
			   SaveDayData(&g_sVoltStat, &ram_Data.sLastSamTime,&sTime);//保存天电压合格数据
			   SaveTransData(&ram_Data.sLastSamTime,&sTime);//保存配变统计的数据
			   g_sVoltageCompute.dwTimeCnt[0] = 0 ;
			   g_sVoltageCompute.dwTimeCnt[1] = 0 ;
			   g_sVoltageCompute.dwTimeCnt[2] = 0 ;
			   g_sVoltageCompute.dwU[0] = 0 ;
			   g_sVoltageCompute.dwU[1] = 0 ;       
			   g_sVoltageCompute.dwU[2] = 0 ;
			}
			memcpy(&ram_Data.sLastSamTime, &sTime,  sizeof(SDateTime));		
		    g_sVoltageCompute.sLastSamTime.dwYear = sTime.wYear;
	        g_sVoltageCompute.sLastSamTime.dwMonth = sTime.byMonth;
	        g_sVoltageCompute.sLastSamTime.dwDay = sTime.byDay;
	        g_sVoltageCompute.sLastSamTime.dwHour = sTime.byHour;
	        g_sVoltageCompute.sLastSamTime.dwMinute = sTime.byMinute;
            g_sVoltageCompute.sLastSamTime.dwSecond = sTime.bySecond;
		 }
	}
	 //***********月统计***************
	 
	sec = GetSecondSinceEpoch(&sTime);
	bySaveFlag = 0;
	 for (i=0;  i<MAX_SHOW_LU_NUM;  i++)
	{   
		 sec1 = GetSecondSinceEpoch(&ram_Data.sMonthLastTime);
		 if ((sec >= sec1+60 || sec < sec1) && (i==0))// && sec1 > 946080000)
         {	
            bySaveFlag = 1;
         }  
         if(bySaveFlag == 1)
         {
			 if(i == 0)
			 {
				iDcTemp = ram_Data.dwDcValue_m / ram_Data.stat_time[0].dwStateNum_m;
				ram_Data.dwDcValue_m = 0;
			 }

			ram_Data.Utemp[i] = ram_Data.stat_time[i].dwStateValue_m / ram_Data.stat_time[i].dwStateNum_m;
			if(ram_Data.stat_time[i].dwStateNum_m ==0)
			    ram_Data.Utemp[i] =0;
			ram_Data.stat_time[i].dwStateValue_m = 0;
			ram_Data.stat_time[i].dwStateNum_m = 0;
			byTemp = SetVstatus(i);
			if(byTemp == EXCEED_DOWN_STATIC)//欠压
			{
                g_sVoltStat_m.dwLoseT[i] ++;
			}
			else if(byTemp == EXCEED_UP_STATIC)//过压
			{
			   g_sVoltStat_m.dwOverT[i] ++;
			}
			else if (byTemp == EXCEED_UP_LIMIT)
			{
                g_sVoltStat_m.dwUperT[i] ++;
			}
			else if (byTemp == EXCEED_DOWN_LIMIT)
			{
				g_sVoltStat_m.dwLower[i] ++;
			}
			else if (byTemp == VOLTAGE_REGULAR)
			{
				g_sVoltStat_m.dwGoodT[i] ++;
			}
			if (byTemp == EXCEED_UP_LIMIT || byTemp == VOLTAGE_REGULAR || byTemp==EXCEED_DOWN_LIMIT)
			{

⌨️ 快捷键说明

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