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

📄 voltage.c

📁 应用与电网中电压合格率的统计。经过现场的投运使用
💻 C
📖 第 1 页 / 共 4 页
字号:
				if( ram_Data.sMonthLastTime.byMonth == sTime.byMonth &&
					ram_Data.sMonthLastTime.wYear == sTime.wYear &&
					ram_Data.sMonthLastTime.byDay == sTime.byDay
				   )
				{   
					//××××月统计
		     		if (ram_Data.Utemp[i] > g_sVoltStat_m.dwMaxU[i] || g_sVoltStat_m.dwMaxU[i]== 0)
					{			  
						g_sVoltStat_m.dwMaxU[i] = ram_Data.Utemp[i];
						g_sVoltStat_m.dwMaxT[i] = sTime.byDay;
						g_sVoltStat_m.dwMaxT[i] <<= 8;
						g_sVoltStat_m.dwMaxT[i] |= sTime.byHour;
						g_sVoltStat_m.dwMaxT[i] <<= 8;
						g_sVoltStat_m.dwMaxT[i] |= sTime.byMinute;						
					}
					if (ram_Data.Utemp[i]< g_sVoltStat_m.dwMinU[i] || g_sVoltStat_m.dwMinU[i] == 0)
					{				    
						g_sVoltStat_m.dwMinU[i] = ram_Data.Utemp[i];
						g_sVoltStat_m.dwMinT[i] = sTime.byDay;
						g_sVoltStat_m.dwMinT[i] <<= 8;
						g_sVoltStat_m.dwMinT[i] |= sTime.byHour;
						g_sVoltStat_m.dwMinT[i] <<= 8;
						g_sVoltStat_m.dwMinT[i] |= sTime.byMinute;
					}
				}
			}
			if (ram_Data.Utemp[i] > ram_Data.Udown2[i] &&  ram_Data.Utemp[i] < ram_Data.Uup2[i])
			{  
                //××月
				g_sVoltageCompute.dwTimeCnt_m[i] ++;
                g_sVoltageCompute.dwU_m[i] +=  ram_Data.Utemp[i];
                g_sVoltStat_m.dwAvgU[i] = g_sVoltageCompute.dwU_m[i] / g_sVoltageCompute.dwTimeCnt_m[i];
 		    }
			//*********对直流量的统计***********
			if(i == 0)
			{
				if(iDcTemp < psRestrict->wAnalogDCMin)
				{ 
					g_sVoltStat_m.dwDCLowerT ++;
				}
				else if(iDcTemp > psRestrict->wAnalogDCMin)
				{
					 g_sVoltStat_m.dwDCUperT ++;
				}
				if(iDcTemp > g_sVoltStat.dwDCMax || g_sVoltStat.dwDCMax==0)
				{
					 g_sVoltStat_m.dwDCMaxT = iDcTemp;
					 g_sVoltStat_m.dwDCMaxT = sTime.byDay;
					 g_sVoltStat_m.dwDCMaxT <<= 8;
					 g_sVoltStat_m.dwDCMaxT |= sTime.byHour;
					 g_sVoltStat_m.dwDCMaxT <<= 8;
					 g_sVoltStat_m.dwDCMaxT |= sTime.byMinute;
				}
				if(iDcTemp <g_sVoltStat.dwDCMin || g_sVoltStat.dwDCMin==0)
				{
					 g_sVoltStat_m.dwDCMinT = iDcTemp;
					 g_sVoltStat_m.dwDCMinT = sTime.byDay;
					 g_sVoltStat_m.dwDCMinT <<= 8;
					 g_sVoltStat_m.dwDCMinT |= sTime.byHour;
					 g_sVoltStat_m.dwDCMinT <<= 8;
					 g_sVoltStat_m.dwDCMinT |= sTime.byMinute;
				}
			}
		 }
		 if(bySaveFlag ==1 && i==0)  
		 {
			if(g_bSaveVoltageState_m)
			{
			   g_bSaveVoltageState_m =0;
			   SaveMonthData(&g_sVoltStat_m,byVoltageSaveMonth);//保存月电压合格数据
			}
			memcpy(&ram_Data.sMonthLastTime, &sTime,  sizeof(SDateTime));		
		 }
	}
}

 //***************电压合格率统计*****************
void VoltageGrade(SRestrict *psRestrict)
{
	BYTE i;
	static BYTE circle = 0;
//	FeedDog(0, 500);
	if (MUST_LOAD_THRESHOLD) ReInitData(psRestrict);
	if (MUST_INITIAL_5460)
	{
	//	InitCS5460();
	}
	interuptserver(psRestrict);
	circle++;
	if (circle>=50)
	{
		circle = 0;
		for (i=0;  i<MAX_SHOW_LU_NUM;  i++)
		{
			if (ram_Data.flag[i]<1)
			{
				//InitCS5460();
				break;
			}
			ram_Data.flag[i] = 0;
		}
	}
}
#define  PTVALUE_100  102
#define  PTVALUE_200  201
//****************工程化数据******************
void ProADData(SCs5460Coef *psCs5460Coef)
{

	DWORD dwTemp;
	SRealVal sRealVal;
	INT32 iValue[20];
	float fRealVal[3];
	DWORD* pdwCode;
	BYTE i;
	BYTE j;
	SRealCode sRealCode;
	DWORD dwDCValue[2]; //直流量,和温度传感器的AD值
	static int k=0;
  /*   dwTemp = 0xfc;
     WriteCom(0,(BYTE*)&dwTemp,1);  
     dwTemp = 0xfc;
      WriteCom(0,(BYTE*)&dwTemp,1);  
      
     dwTemp = g_sRealCode.dwUa;
      PrintHex((BYTE*)&dwTemp,4); 
       dwTemp = g_sRealCode.dwPc;
    PrintHex((BYTE*)&dwTemp,4); 
      dwTemp = g_sRealCode.dwQc;
    PrintHex((BYTE*)&dwTemp,4); 
     dwTemp = g_sRealCode.dwPFc;
    PrintHex((BYTE*)&dwTemp,4); 
   */
    //**********把在AD的原始数据中g_sRealCode,**********
	//以24位二进制补码的数,扩展到32位二进制补码的数
	pdwCode = &g_sRealCode.dwSa; 
	j = 0;
    for(i=0; i<4; i++) //A相视在功率 有功功率 无功功率 功率因数
	{
		iValue[j] = *pdwCode & 0x00ffffff;
		if(*pdwCode & 0x00800000 )  //AD的原始数据为负数
		{
           iValue[j] |= 0xff000000;  //符号位扩展
		}
        pdwCode ++;
		j++;
	} 
    
    pdwCode = &g_sRealCode.dwTemp;
    for(i=0; i<6; i++) //温度 频率 B相视在功率 有功功率 无功功率 功率因数
	{
		iValue[j] = *pdwCode & 0x00ffffff;
		if(*pdwCode & 0x00800000 )  //AD的原始数据为负数
		{
           iValue[j] |=0xff000000;  //符号位扩展
		}
        pdwCode ++;
		j++;
	}
	pdwCode = &g_sRealCode.dwSc;//C相视在功率 有功功率 无功功率 功率因数
    for(i=0; i<4; i++)  
	{
		iValue[j] = *pdwCode & 0x00ffffff;
		if(*pdwCode & 0x00800000 )  //AD的原始数据为负数
		{
           iValue[j] |=0xff000000;  //符号位扩展
		}
        pdwCode ++;
		j++;
	}     
	//***********把电压的数据工程化************
	fRealVal[0]=(float)( g_sRealCode.dwUa & 0x00ffffff);
	fRealVal[1]=(float)( g_sRealCode.dwUb & 0x00ffffff);
	fRealVal[2]=(float)( g_sRealCode.dwUc & 0x00ffffff);
    for(i=0; i<3; i++)
	{
		 fRealVal[i] *= 2500.0 ;  //250*10
		 fRealVal[i] /=10066329.6;	//((2^24)*0.6=10066329.6)=0x999999
	}
	for(i=0; i<3; i++)
	{
	   if(fRealVal[i] <3 )fRealVal[i] =0;
	}
    g_sRealVal.wUa = fRealVal[0];
    g_sRealVal.wUb = fRealVal[1];
    g_sRealVal.wUc = fRealVal[2];

      
	fRealVal[0]=(float)( g_sRealCode.dwU0 & 0x00ffffff);
    fRealVal[0] *= 250.0 * 10.0;  //额定值*系数(x100)?
    fRealVal[0] /=10066329.6;	//((2^24)*0.6=10066329.6)=0x999999
    g_sRealVal.wU0 = fRealVal[0];
 
   /*dwTemp = g_sRealVal.wUa;
    WriteCom(0,(BYTE*)&dwTemp,2);
     dwTemp = g_sRealVal.wUb;
     WriteCom(0,(BYTE*)&dwTemp,2);
     dwTemp = g_sRealVal.wUc;
     WriteCom(0,(BYTE*)&dwTemp,2);
     */
	//***********把电流的数据工程化************
	fRealVal[0]=(float)( g_sRealCode.dwIa & 0x00ffffff);
	fRealVal[1]=(float)( g_sRealCode.dwIb & 0x00ffffff);
	fRealVal[2]=(float)( g_sRealCode.dwIc & 0x00ffffff);
    for(i=0; i<3; i++)
	{
		 fRealVal[i] *= 6000.0;// * 1000;  //额定值5.1A
		 fRealVal[i] /=10066329.6;	//((2^24)*0.6=10066329.6)=0x999999
	}
    g_sRealVal.wIa = fRealVal[0];
    g_sRealVal.wIb = fRealVal[1];
    g_sRealVal.wIc = fRealVal[2];
  
  /*  dwTemp = g_sRealVal.wIa;
     WriteCom(0,(BYTE*)&dwTemp,2);
     dwTemp = g_sRealVal.wIb;
     WriteCom(0,(BYTE*)&dwTemp,2);
     dwTemp = g_sRealVal.wIc;
     WriteCom(0,(BYTE*)&dwTemp,2);
     */
	fRealVal[0]=(float)( g_sRealCode.dwI0 & 0x00ffffff);
    fRealVal[0] *= 6000.0;  //额定值系数x1000
    fRealVal[0] /=10066329.6;	//((2^24)*0.6=10066329.6)=0x999999
    g_sRealVal.wI0 = fRealVal[0];

    j = 0;  
    
     /*dwTemp = g_sRealVal.wU0;
     WriteCom(0,(BYTE*)&dwTemp,2);
     dwTemp = g_sRealVal.wI0;
     WriteCom(0,(BYTE*)&dwTemp,2);
     */
	//***********把A相功率的数据工程化************
	fRealVal[0]=(float)iValue[j++]; //A相视在功率
	fRealVal[1]=(float)iValue[j++]; //有功功率
	fRealVal[2]=(float)iValue[j++]; //无功功率
    for(i=0; i<3; i++)
	{
	   //额定值220*5A*系数(10*1000)  
	   fRealVal[i] *= 250.0 *60.0 ;//wVOLTAGE_STANDARD[i] * 5 *10  ;
	   fRealVal[i] /=3019898.88;	//0.6 * 0.6 * (2~23) = 3019898.88
	}
    g_sRealVal.iSa = fRealVal[0];
    g_sRealVal.iPa = fRealVal[1];
    g_sRealVal.iQa = fRealVal[2];
        
    
	fRealVal[0]=(float)iValue[j++]; //功率因数
    fRealVal[0] *= 1000;  //
	fRealVal[0] /=8388608;	//(2~23) = 8388608
    g_sRealVal.iPFa = fRealVal[0];
    
   //**********温度 频率工程化处理
   fRealVal[0] = (float)iValue[j++]; //温度
   fRealVal[0] *= 100;//系数100
   fRealVal[0] /= 65536; //2~16
   g_sRealVal.wTemper = fRealVal[0];
   fRealVal[0] = (float)iValue[j++]; //频率
   fRealVal[0] *= 100;//系数100
   fRealVal[0] /= 8388608.0; //2~23
   fRealVal[0] *=  4000; //4000 = Mclk/(k*1024)   Mclk =4.096Mhz k =1
     g_sRealVal.wFreq = fRealVal[0];
   //***********把B相功率的数据工程化************
	fRealVal[0]=(float)iValue[j++]; //A相视在功率
	fRealVal[1]=(float)iValue[j++]; //有功功率
	fRealVal[2]=(float)iValue[j++]; //无功功率
    for(i=0; i<3; i++)
	{
	   //额定值220*5A*系数(10*1000)  
	   fRealVal[i] *=250*60.0; // wVOLTAGE_STANDARD[i] * 5 *10  ;
	   fRealVal[i] /=3019898.88;	//0.6 * 0.6 * (2~23) = 3019898.88
	}
    g_sRealVal.iSb = fRealVal[0];
    g_sRealVal.iPb = fRealVal[1];
    g_sRealVal.iQb = fRealVal[2];

	fRealVal[0]=(float)iValue[j++]; //功率因数
    fRealVal[0] *= 1000;  //
	fRealVal[0] /=8388608;	//(2~23) = 8388608
    g_sRealVal.iPFb = fRealVal[0];
    
	//***********把C相功率的数据工程化************
	fRealVal[0]=(float)iValue[j++]; //c相视在功率
	fRealVal[1]=(float)iValue[j++]; //有功功率
	fRealVal[2]=(float)iValue[j++]; //无功功率
    for(i=0; i<3; i++)
	{
	   //额定值220*5A*
	   fRealVal[i] *= 250*60.0;//wVOLTAGE_STANDARD[i] * 5 *10  ;
	   fRealVal[i] /=3019898.88;	//0.6 * 0.6 * (2~23) = 3019898.88
	}
    g_sRealVal.iSc = fRealVal[0];
    g_sRealVal.iPc = fRealVal[1];
    g_sRealVal.iQc = fRealVal[2];

	fRealVal[0]=(float)iValue[j++]; //功率因数
    fRealVal[0] *= 1000;  //
	fRealVal[0] /=8388608;	//(2~23) = 8388608
    g_sRealVal.iPFc = fRealVal[0];
    
    /* dwTemp = g_sRealVal.iSc;
    PrintHex((BYTE*)&dwTemp,4);  
    dwTemp = g_sRealVal.iPc;
    PrintHex((BYTE*)&dwTemp,4);  
     dwTemp = g_sRealVal.iQc;
    PrintHex((BYTE*)&dwTemp,4); 
     dwTemp = g_sRealVal.iPFc;
    PrintHex((BYTE*)&dwTemp,4); 
    */
    //去掉零漂
    if(g_sRealVal.wUa<=2 )
    {
       g_sRealVal.wUa = 0;
    }
    if(g_sRealVal.wIa<=5)//0.01A
    {
       g_sRealVal.wIa =0;
    }
    if( g_sRealVal.wUa==0 || g_sRealVal.wIa==0)
    {
       g_sRealVal.iSa = 0;
       g_sRealVal.iPa = 0;
       g_sRealVal.iQa = 0;
       g_sRealVal.iPFa = 0;
    } 
    //去掉零漂
    if(g_sRealVal.wUb<=2 )
    {
       g_sRealVal.wUb = 0;
    }
    if(g_sRealVal.wIb<=5) //0.01A
    {
       g_sRealVal.wIb =0;
    }
    if( g_sRealVal.wUb==0 || g_sRealVal.wIb==0)
    {
       g_sRealVal.iSb = 0;
       g_sRealVal.iPb = 0;
       g_sRealVal.iQb = 0;
       g_sRealVal.iPFb = 0;
    } 
    //去掉零漂
    if(g_sRealVal.wUc<=2 )
    {
       g_sRealVal.wUc = 0;
    }
    if(g_sRealVal.wIc<=5)//0.01A
    {
       g_sRealVal.wIc =0;
    }
    if( g_sRealVal.wUc==0 || g_sRealVal.wIc==0)
    {
       g_sRealVal.iSc = 0;
       g_sRealVal.iPc = 0;
       g_sRealVal.iQc = 0;
       g_sRealVal.iPFc = 0;       
    } 
	//**********计算总的功率 及 功率因数*********
    g_sRealVal.iS = g_sRealVal.iSa + g_sRealVal.iSb + g_sRealVal.iSc;
    g_sRealVal.iP = g_sRealVal.iPa + g_sRealVal.iPb + g_sRealVal.iPc;
    g_sRealVal.iQ = g_sRealVal.iQa + g_sRealVal.iQb + g_sRealVal.iQc;

    fRealVal[0] = (float)g_sRealVal.iS;
    fRealVal[1] = (float)g_sRealVal.iP * (float)1000;
    if(fRealVal[0] ==0) fRealVal[2]  = 0;
    else fRealVal[2] = fRealVal[1] / fRealVal[0];
    g_sRealVal.iPF = fRealVal[2];
    if(g_sRealVal.iPF >1000)g_sRealVal.iPF =1000;

	//**********以下为直流量 和温度传感器的值
	GetAdcValue_cs5460(dwDCValue);
	iValue[0] = dwDCValue[0] & 0x00ffffff;
	if(dwDCValue[0] & 0x00800000 )  //AD的原始数据为负数
	{
       iValue[0] |= 0xff000000;  //符号位扩展
	}
	iValue[1] = dwDCValue[1] & 0x00ffffff;
	if(dwDCValue[1] & 0x00800000 )  //AD的原始数据为负数
	{
        iValue[1] |= 0xff000000;  //符号位扩展
	}

⌨️ 快捷键说明

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