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

📄 commpublic.c

📁 此源代码为电力系统中的RTU终端反馈!具有GPRS通讯功能!
💻 C
📖 第 1 页 / 共 2 页
字号:
              Read1024(ptr_1024,AddrInPage,&pdata[m],4);
              if((pdata[m+2]!=(*st).month)||((pdata[m+1]&0x1f)!=(*st).week_date))
              {
                pdata[m]=0;pdata[m+1]=0;
              }
              else
              { 
                Read1024(ptr_1024,AddrInPage+16,&pdata[m],2);    
              }  
              AddrInPage+=128; m+=2; (*len)+=2;                   
          }
          ptr_1024+=1; 
          AddrInPage=0;
        }
          break;  
     case 29:                   //st对应的日曲线q                       
           for(i=0;i<12;i++)    
         { 
           for (j=0;j<2;j++)
           {  
              Read1024(ptr_1024,AddrInPage,&pdata[m],4);
              if((pdata[m+3]!=(*st).month)||((pdata[m+1]&0x1f)!=(*st).week_date))
              {
                pdata[m]=0;pdata[m+1]=0;
              }
              else
              { 
                Read1024(ptr_1024,AddrInPage+18,&pdata[m],2);    
              }  
              AddrInPage+=64; m+=2; (*len)+=2;                   
          }
          ptr_1024+=1; 
          AddrInPage=0;
        }
           break;  
      default:
           break;
   }      
  if((*len>maxlen)||(*len==0))
    return FALSE;
  else 
    return TRUE;        
}





void RefreshData(void)//统计数据实时刷新
{ 
  if(Psum >10 )
   {    
      AddedPQ[0] += Psum;          //正向有功
   }
  if(Psum <-10)
   {
      AddedPQ[1] += -Psum;       //反向有功
   }    

   if(Qsum > 10)
   {     
      AddedPQ[2] += Qsum ;
   }
   
   if(Qsum < -10)
   {
      AddedPQ[3]+= -Qsum;        //反向无功
   }
    
}



void RefreshTimer(void)
{
    stDateTime.second++;
      
    if( stDateTime.second==0 || stDateTime.second==10 ||stDateTime.second==20 ||
        stDateTime.second==30|| stDateTime.second==40 ||stDateTime.second==50 )  
    {
       DeviceState.TenSecf =1;
    } 
   
   if((stDateTime.hour ==23 )&& (stDateTime.minute == 59)  && (stDateTime.second == 59)  ) 
   {
       ptr_1024=Get1024Page(stDateTime,1); //保存统计数据时间到 
       if(RunState.nAOffNums == 0 && RunState.ARunTime > 1435)RunState.ARunTime = 1440;
       if(RunState.nBOffNums == 0 && RunState.BRunTime > 1435)RunState.BRunTime = 1440;
       if(RunState.nCOffNums == 0 && RunState.CRunTime > 1435)RunState.CRunTime = 1440;
       if(RunState.nSOffNums == 0 && RunState.SRunTime > 1435)RunState.SRunTime = 1440;
       WriteStaticsData(0xff);  
   }
    if(stDateTime.second <60) 
      return ;                                             //满1分钟进位
    stDateTime.second = 0;
    stDateTime.minute +=1; 
    if((stDateTime.minute%(15*HisCate))==0)
    {
      DeviceState.doSaveHisdata = 1;
    }       
   // DeviceState.Minutef=1;                       //模块通讯开始标志置1  
   if((stDateTime.hour ==23 )&& (stDateTime.minute == 59)  )                     //满1天进位
       DeviceState.Datef=1;         
   if ( (stDateTime.hour==2 )  && (stDateTime.minute == 8)   ) 
        DeviceState.Timef=1;    
   if(stDateTime.minute <60) 
      return;                                     //满1小时进位 
    stDateTime.minute =0;
    stDateTime.hour +=  1;
    DeviceState.Hourf=1; 
    if(stDateTime.hour <24)                     //满1天进位
      return;     
     stDateTime.hour = 0;
     DeviceState.NewData=1;//清数据
      ClearDayData();     //清数据
     
     //保存统计数据时用到
     //nDate=(stDateTime.week_date&0x1f);
   // nMonth=stDateTime.month;       
     
     if( ((stDateTime.week_date&0xe0)>>5)>=7)  //星期更新
        stDateTime.week_date &= 0x3f;
     else
        stDateTime.week_date +=0x20;
             
     if ( (stDateTime.week_date&0x1f) < 28 )     //如果大于等于28天,进行判断
     {
        stDateTime.week_date += 1;               //天数加    
        return;
     }      
       clr_watchdog();               
     switch (stDateTime.week_date&0x1f)
     { 
       case 28:
        if((stDateTime.month)!=2)
        {
          stDateTime.week_date+=1;
          return;
        }
        else if (  ((stDateTime.year&0x3)==0)&& (stDateTime.year!=100) )    // 闰年
        {
          stDateTime.week_date+=1;
          return;
        }
        else 
        {   
         stDateTime.week_date &=0xe0;  //天数由28->1
         stDateTime.week_date+=1;
        }
        break;
    
       case 29:
        if((stDateTime.month)!=2)
        {
          stDateTime.week_date+=1;
          return;
        }
        else
        {
          stDateTime.week_date &=0xe0;
          stDateTime.week_date+=1;
        } 
        break;

      case 30:
       if ((stDateTime.month == 1)||(stDateTime.month == 3)||(stDateTime.month == 5)||(stDateTime.month==7)||(stDateTime.month == 8)||(stDateTime.month == 10)||(stDateTime.month==12))
       {
          stDateTime.week_date+=1;
          return;
       }
       else
       { 
         stDateTime.week_date &=0xe0;
         stDateTime.week_date+=1;  
       }
       break;
      case 31:
         stDateTime.week_date &=0xe0;
         stDateTime.week_date+=1;
      break;
     }
     
     if(stDateTime.month<12)
     {
      stDateTime.month += 1;
      return;
     }
     else
     {
      stDateTime.month = 1;
      if(stDateTime.year < 99)
      {
        stDateTime.year += 1;
      }
      else
      {
        stDateTime.year = 0;
      }
     }
}







// 极值的更新
void  GetMaxMinValue()  
{
 BYTE i;
 int* ptemp = 0;
 ptemp = (int*) &BD_data.Ua;    
 for(i = 0; i < 8; i ++)//ua ia ub ib uc ic p q   max value
     {
          if((*ptemp) > value_time[i].value) // max value
          {
              SpecialFlag.YCChangeFlag = 1;
              value_time[i].value = *ptemp;
              value_time[i].time = stDateTime.hour;//小时
              value_time[i].time <<= 8;
              value_time[i].time += stDateTime.minute;//分钟
          }
      ptemp ++ ;
     }
  
 //统计数据的极小值
 ptemp = (int*)&BD_data.Ua;
 for(i = 0; i < 3; i ++)             //ua ub uc min value 
     {
        if(((*ptemp) < value_time[i+8].value) || (value_time[i+8].value == 0))//mim value
          {
             SpecialFlag.YCChangeFlag = 1;
             value_time[i+8].value = *ptemp;
             value_time[i+8].time = stDateTime.hour;//小时  
             value_time[i+8].time <<= 8;
             value_time[i+8].time += stDateTime.minute;//分钟
          }
      ptemp += 2;
     }
}
 


void  SavePower()  //电度量保存
{ 
   int t,num,wr;
     long  *pdd;
   pdd= fi;
     clr_watchdog();               //看门狗计数清零           
     Read1024(0,PVPOWERB,(BYTE*)(pdd),24);  
     wr=0;
    for(num=0;num<6;num++)
    {
     t=GetAddedPQ(num);    
      if(t)    
      {
        pdd[num] +=t;   
        wr=1;        
       clr_watchdog();               //看门狗计数清零        
      }
     }    
     
     if(wr)
     {
      memcpy(pdd+24, (BYTE*)AddedPQ,20);    
      CommState.DoWrParm=1;  
      Write1024(0,PVPOWERB,(BYTE*)(pdd),24+20,TRUE);   
      CommState.DoWrParm=0;  
     }
     clr_watchdog();               //看门狗计数清零     
}


void ReadPower()  //读取电量
{

    Read1024(0,PVPOWEREND,(BYTE*)AddedPQ,20);  
    if(AddedPQ[0]<0 || AddedPQ[0] > 360000L  )  AddedPQ[0]=0;
    if(AddedPQ[1]<0 || AddedPQ[1] > 360000L  )  AddedPQ[1]=0;
    if(AddedPQ[2]<0 || AddedPQ[2] > 360000L  )  AddedPQ[2]=0;
    if(AddedPQ[3]<0 || AddedPQ[3] > 360000L  )  AddedPQ[3]=0; 
    if(AddedYM[0]>YM_CONST)AddedYM[0]=0;
    if(AddedYM[1]>YM_CONST)AddedYM[1]=0; 

}

void  PowerONHand()  //来电处理
{
    
}

int GetAddedPQ(int i)
{  
    int t=0;
    if(i>=0  && i<4) 
    while( AddedPQ[i]  >360000L )
       {
          t++;
          AddedPQ[i]  -= 360000L ;       
       }
 
    if(i==4  || i==5)  //YM handle
    while( AddedYM[i-4]  >YM_CONST )
       {
          t++;
          AddedYM[i-4]  -= YM_CONST ;       
       }              
    return t;       
}


long  ReadOneDD(BYTE num) //电度量读取
{ 
   long dd;
   clr_watchdog();            
   Read1024(0,PVPOWERB+(num<<2),(BYTE*)(&dd),4);  
   clr_watchdog();                
   return dd;
}


long  ReadOneD2(BYTE num) //电度量通讯
{ 
    long dd;
    clr_watchdog();               //看门狗计数清零    
    Read1024(0,PVPOWERB+(num<<2),(BYTE*)(&dd),4);  
    if( num<4)dd += AddedPQ[num] /360000L;  
    if(num==4 || num==5)dd += AddedYM[num-4]/YM_CONST ;  
    clr_watchdog();              
    return dd;
}

⌨️ 快捷键说明

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