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

📄 fft.c

📁 此源代码为电力系统中的RTU终端反馈!具有GPRS通讯功能!
💻 C
📖 第 1 页 / 共 2 页
字号:
     }
     else
     {
     temp_r = Ia_base_r - ((Ib_base_r + Ic_base_r) >> 1)
      +((Ib_base_i - Ic_base_i) >> 1) + ((Ib_base_i - Ic_base_i) >> 2) + ((Ib_base_i - Ic_base_i) >> 3) - ((Ib_base_i - Ic_base_i) >> 7);
     temp_i = Ia_base_i - ((Ib_base_i + Ic_base_i) >> 1)
      +((Ic_base_r - Ib_base_r )>> 1) + ((Ic_base_r - Ib_base_r) >> 2) + ((Ic_base_r - Ib_base_r) >> 3) - ((Ic_base_r - Ib_base_r) >> 7);
     BD_data.UnbalRateofI  = 1000 * sqrt((unsigned long ) temp_r * temp_r + (unsigned long) temp_i * temp_i)/ltemp;  
     if(BD_data.UnbalRateofI >1000) BD_data.UnbalRateofI =1000;
     }
     }
     if(i==2)
     {
     // 零序电流计算
     temp_r=Ia_base_r + Ib_base_r + Ic_base_r ;
     temp_i = Ia_base_i + Ib_base_i + Ic_base_i ;
    
     ltemp= sqrt((unsigned long ) temp_r * temp_r + (unsigned long) temp_i * temp_i);

     if((P1OUT & (BIT5 +BIT6+BIT7)) ==(BIT5 +BIT6+BIT7) )
       ltemp=       ltemp* TTU_RunParam.KI_A1>>10;  
     else ltemp=       ltemp* TTU_RunParam.KI_A0>>10;
     BD_data.I0=  ltemp;
     }
     
}


 void CalPowerpara(void)
 {       
     
     static int  Ua[4],Ub[4],Uc[4];
     static int  Ia[4],Ib[4],Ic[4];    
    static    long Pasum=0 , Pbsum=0, Pcsum=0;
    static    long Qasum=0,  Qbsum=0, Qcsum=0;
    static   BYTE nCounter = 0;
    unsigned long ltemp;
    long sum;
    int i;
    BYTE mode;
   // unsigned int  UsumNew=0;
    Calc(Ua_Data,Ia_Data);                   //计算A相的电度量值
     //计算系数   
     sum=(unsigned long)U*TTU_RunParam.KV_A;
     sum >>=10;     
     Uabc.Ua=(int)sum;
      mode=P1OUT & BIT5  ;
   if( mode== 0)   
     { 
           sum=  (unsigned long)I * TTU_RunParam.KI_A0>>10;           //        Ia[nCounter] = (unsigned long)I * TTU_RunParam.KI_A0>>4;  
       if( sum<  I_THRESHOLD_LOW )   //I_THRESHOLD_LOW
         P1OUT |= BIT5;        
       Pasum += (Ps * KP_A0)>>8; 
       Qasum += (Qs * KP_A0)>>9; 
     }
    else 
       {
        sum = (unsigned long)I * TTU_RunParam.KI_A1>>10;          
        if(sum >=  I_THRESHOLD_HIGH   ) //; Ia[nCounter] >= I_THRESHOLD_HIGH    
          P1OUT &= ~BIT5;          
        Pasum += (Ps * KP_A1)>>8; 
        Qasum += (Qs * KP_A1)>>9;
       }   
       Ia[nCounter] = (int)sum;       
       for(i=0, sum=0;i<4;i++)
       {  
        if(MCUState &BIT7)  sum += Ia[i];    
         else sum += Ia[nCounter];          
       }
        sum >>= 2; 
        BD_data.Ia = (int)sum;    
       Ua[nCounter]=U;
      for(i=0, sum=0;i<4;i++)
       {
       if(MCUState &BIT7) sum += Ua[i];  
        else sum +=U;       
       }
       sum *= TTU_RunParam.KV_A;        
       sum >>= 12; 
        BD_data.Ua = (int)sum;
      
       Ua_base = U_base; Ia_base = I_base; Uan = Un;  Ian  = In;
        Ua_base_r = U1R; Ua_base_i = U1I; Ia_base_r = I1R; Ia_base_i = I1I;       
  
     //   UsumNew +=U;
        if(U<50) BD_data.Ua=0;
        //计算B相
          Calc(Ub_Data,Ib_Data);            
               
     sum=(unsigned long)U*TTU_RunParam.KV_B;
     sum >>=10;       
     Uabc.Ub=(int)sum; 
     mode=P1OUT & BIT6  ;
   if( mode== 0)   
     { sum = (unsigned long)I * TTU_RunParam.KI_B0>>10;  
       if(  sum <  I_THRESHOLD_LOW )   //I_THRESHOLD_LOW
         P1OUT |= BIT6;          
       Pbsum += (Ps * KP_B0)>>8; 
       Qbsum += (Qs * KP_B0)>>9; 
     }
    else 
       {
          sum= (unsigned long)I * TTU_RunParam.KI_B1>>10;          
        if(sum >=  I_THRESHOLD_HIGH   ) //; Ia[nCounter] >= I_THRESHOLD_HIGH    
          P1OUT &= ~BIT6;   
        Pbsum += (Ps * KP_B1)>>8; 
        Qbsum += (Qs * KP_B1)>>9;
       }     
 
       Ib[nCounter] = (int)sum;    
      for(i=0, sum=0;i<4;i++)
      {
        if(MCUState &BIT7)  sum += Ib[i];    
        else sum += Ib[nCounter];   
        }
        sum >>= 2; 
        BD_data.Ib = (int)sum;          

       Ub[nCounter]=U;
      for(i=0, sum=0;i<4;i++)
       { if(MCUState &BIT7) sum += Ub[i];  
         else sum += U;  
       }
       sum *= TTU_RunParam.KV_B;        
       sum >>= 12; 
       BD_data.Ub = (int)sum;

         Ub_base = U_base; Ib_base = I_base; Ubn = Un;  Ibn  = In;
        Ub_base_r = U1R; Ub_base_i = U1I; Ib_base_r = I1R; Ib_base_i = I1I;       
     //   if( UsumNew <U ) UsumNew =U ;
        if(U<50) BD_data.Ub=0;
        
        Calc(Uc_Data,Ic_Data); 
         
        sum=(unsigned long)U*TTU_RunParam.KV_C;
        sum >>=10;       
        Uabc.Uc=(int)sum; 
        
      //   if( UsumNew <U ) UsumNew =U ;
      /*   if( (UsumNew<50)&& (Usumold >100))
         {   
           doSavePowerOff=1;                    
         }*/
      //   Usumold=UsumNew;
         
          //计算C相      
     mode=P1OUT & BIT7  ;
   if( mode== 0)   
     { 
     sum=(unsigned long)I * TTU_RunParam.KI_C0>>10;
       if( sum <  I_THRESHOLD_LOW )   //I_THRESHOLD_LOW
         P1OUT |= BIT7;          
       Pcsum += (Ps * KP_C0)>>8; 
       Qcsum += (Qs * KP_C0)>>9; 
     }
    else 
       {
         sum=(unsigned long)I * TTU_RunParam.KI_C1>>10;    
        if(sum >=  I_THRESHOLD_HIGH   ) //; Ia[nCounter] >= I_THRESHOLD_HIGH    
          P1OUT &= ~BIT7;   
        Pcsum += (Ps * KP_C1)>>8; 
        Qcsum += (Qs * KP_C1)>>9;
       }     
       
       Ic[nCounter] = (int)sum;  
     for(i=0, sum=0;i<4;i++)
       {   if(MCUState &BIT7) sum += Ic[i];   
          else  sum += Ic[nCounter] ;
       
       }
       sum >>= 2; 
        BD_data.Ic = (int)sum;    
         
       Uc[nCounter]=U;
     for(i=0, sum=0;i<4;i++)
     {
        if(MCUState &BIT7)  sum += Uc[i];  
        else sum +=U;
      }
       sum *= TTU_RunParam.KV_C;        
       sum >>= 12; 
        BD_data.Uc = (int)sum;       

        if(U<50) BD_data.Uc=0;
         Uc_base = U_base; Ic_base = I_base; Ucn = Un;  Icn  = In;
        Uc_base_r = U1R; Uc_base_i = U1I; Ic_base_r = I1R; Ic_base_i = I1I;      

    nCounter++;
    if(nCounter >=4)  
     {  nCounter=0;   
       MCUState |= BIT7;
        BD_data.Pa= (Pasum>>10);
        BD_data.Qa= (Qasum>>10); 
         ltemp = (long)BD_data.Pa*BD_data.Pa +(long)BD_data.Qa*BD_data.Qa ;
         ltemp = sqrt(ltemp);        
         if(ltemp > 50)
           {
           BD_data.COSA =  (long)BD_data.Pa *1000 /(int)ltemp;
           } 
           else
            BD_data.COSA = 1000;      
            
            
         BD_data.Pb= (Pbsum>>10);
        BD_data.Qb= (Qbsum>>10); 
         ltemp = (long)BD_data.Pb*BD_data.Pb +(long)BD_data.Qb*BD_data.Qb ;
         ltemp = sqrt(ltemp);        
         if(ltemp > 50)
           {
           BD_data.COSB =  (long)BD_data.Pb *1000 /(int)ltemp;
           } 
           else
            BD_data.COSB = 1000;     
            
             BD_data.Pc= (Pcsum>>10);
        BD_data.Qc= (Qcsum>>10); 

         ltemp = (long)BD_data.Pc*BD_data.Pc +(long)BD_data.Qc*BD_data.Qc ;
         ltemp = sqrt(ltemp);        
         if(ltemp > 50)
           {
           BD_data.COSC =  (long)BD_data.Pc *1000 /(int)ltemp;
           } 
           else
            BD_data.COSC = 1000;    
             
        Psum = (Pasum + Pbsum + Pcsum)>>10;
        Qsum = (Qasum + Qbsum + Qcsum)>>10 ;  
         BD_data.P =  Psum/10;
         BD_data.Q =  Qsum/10; 
         ltemp = (long)BD_data.P*BD_data.P +(long)BD_data.Q*BD_data.Q ;
         ltemp = sqrt(ltemp);        
         if(ltemp > 50)
           {
           BD_data.COS =  (long)BD_data.P *1000 /(int)ltemp;
           } 
           else
            BD_data.COS = 1000;
           Pasum = 0; Pbsum = 0;  Pcsum = 0;
           Qasum = 0; Qbsum =0;   Qcsum = 0;       
       }
       CalUnballrate(nCounter);
}

⌨️ 快捷键说明

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