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

📄 static.c

📁 此源代码为电力系统中的RTU终端反馈!具有GPRS通讯功能!
💻 C
📖 第 1 页 / 共 2 页
字号:

#include "msp430x44x.h"
#include "DataDef.h"
#include "8563.h"
#include "CommPublic.h"
#include "static.h"


void ResumeStaticData()
{ 
  BYTE  TMonth,TDay;
  GetPCF8563(2,InitTime,7);                //读出时钟 
  clr_watchdog(); 
  TimerDataHandle();                      
  
  ptr_1024 =Get1024Page(stDateTime,1);
  if(ptr_1024==0)   return ;
  if(ptr_1024==505) return ; 
  if(ptr_1024>511)  return ;   
 
  Read1024(ptr_1024,PMONTH,&TMonth,1);
  Read1024(ptr_1024,PDATE,&TDay,1);
  clr_watchdog(); 
  if((TMonth == stDateTime.month) && (TDay == (stDateTime.week_date & 0x1f)))
  {
   ReadStaticData();
  }
  else
  {
   ClearDayData();//清当天的历史数据和统计数据
  }
}

void ReadStaticData()
{
 char c1;
  clr_watchdog(); 
  ptr_1024 =Get1024Page(stDateTime,1); 
  if(ptr_1024==0)   return ;
  if(ptr_1024==505) return ; 
  if(ptr_1024>511)  return ;   
   
  Read1024(ptr_1024,PYCOVERLIMIT, (BYTE*)(&over_limit[0].YCcode), 64);//越限
  clr_watchdog(); 
  Read1024(ptr_1024,PVALUE_TIME, (BYTE*)(&value_time[0].value), 64);//极值
   clr_watchdog(); 
  Read1024(ptr_1024,PPOWER_SUPPLY_STATE,(BYTE*)(&off_time[0].DomainFlag),54);//停电记录
   clr_watchdog();
   for(c1=0;c1<3;c1++) 
  if(Read1024(ptr_1024,PRTSTATE,(BYTE*)(&RunState.ARunTime),sizeof(RTSTATE))) break;
  
}


void FileReadStaticData(BYTE nSeg , BYTE * pData)  //文件传输时用
{
 
  clr_watchdog(); 
  ptr_1024 =Get1024Page(stFileName,1); 
   if(ptr_1024==0) return ;
   if(ptr_1024==505) return ; 
   if(ptr_1024>511) return ;   
    
  switch(nSeg)
  {
   case 0:
    Read1024(ptr_1024,PVALUE_TIME, pData, 64);//极值
    break;
  case 1:
    Read1024(ptr_1024,PYCOVERLIMIT, pData, 64);//越限记录组
    break;
  case 2:
    Read1024(ptr_1024,PRTSTATE, pData, sizeof(RTSTATE));//供电情况组
    break;
   case 3:
    Read1024(ptr_1024,PPOWER_SUPPLY_STATE, pData,54);//停电记录组
    break;
   case 4:
    Read1024(ptr_1024,PSUMOFPOWER, pData,MAXDD*sizeof(long));//电度记录组
    break;
   default:
    break;
  } 
}

void WriteStaticsData(BYTE mode)//从RAM写到FLASH
{
  BYTE c[2],n;
  BYTE *pchar;
  pchar=(BYTE *)fr;
  
  ptr_1024 =Get1024Page(stDateTime,1); 
   if(ptr_1024==0) return ;
   if(ptr_1024==505) return ; 
   if(ptr_1024>511) return ;    
   Read1024(ptr_1024,PMONTH, c, 2);   
   if((c[0] !=stDateTime.month) || c[1] !=(stDateTime.week_date & 0x1f) )
   {
     c[0]=stDateTime.month;
     c[1]=(stDateTime.week_date & 0x1f);

     Write1024(ptr_1024,PMONTH, c, 2,TRUE);  
   }
 if(mode & W_SUMOFPOWER) 
    SavePower();  
   
   n=   8*sizeof(OverLimitData) +16* sizeof(SLim_Time)+9* sizeof(OffTimeData)  + sizeof(RTSTATE) ;
   memcpy(pchar+n, fi,24  ); 
   
   memcpy(pchar, over_limit,sizeof(over_limit) );
   n =sizeof(over_limit);
   memcpy(pchar+n, value_time,sizeof(value_time) );
   n+=sizeof(value_time);
   memcpy(pchar+n, off_time,sizeof(off_time) );
   n+=sizeof(off_time);
   memcpy(pchar+n, &RunState,sizeof(RunState) );
   n+=sizeof(RunState);

   // r= 8*sizeof(OverLimitData) +16* sizeof(SLim_Time)+9* sizeof(OffTimeData)  + sizeof(RTSTATE)   ;
  // for(n=0;n<3;n++)
  // {r= Write1024(ptr_1024,PYCOVERLIMIT,(BYTE*)(over_limit),sizeof(OverLimitData)+ sizeof(RTSTATE),TRUE);
   //  if(r) break;   
  // }   
  
  
   Write1024(ptr_1024,PYCOVERLIMIT,(BYTE*)(fr),n+24 ,TRUE); 
    clr_watchdog();       
    
    
    /*
  if(mode & W_SUMOFPOWER)
   { 
      SavePower();   //保存电量  
     Read1024(0,PVPOWERB,c,MAXDD*sizeof(long));                         
     Write1024(ptr_1024,PSUMOFPOWER,c,MAXDD*sizeof(long),TRUE);//电能         
     clr_watchdog();        
   } 
    if(mode & W_POW_OFF)                          //停电记录
    {                        
     for(n=0;n<3;n++)
     if( Write1024(ptr_1024,PPOWER_SUPPLY_STATE,(BYTE*)(&off_time[0].DomainFlag),54,TRUE)) break; 
    } 
     if(mode & W_YC_LIMT)  
    {                  
      Write1024(ptr_1024,PYCOVERLIMIT, (BYTE*)(&over_limit[0].YCcode), 64,TRUE);//越限
    }
     clr_watchdog();  
        
  if(mode & W_OV_V)
    {                         
      Write1024(ptr_1024,PVALUE_TIME, (BYTE*)(&value_time[0].value), 64,TRUE);//极值  
    }*/
     clr_watchdog();
 }

void  GetStaticRecord()
{
  BYTE mode=0;
  BYTE hour=stDateTime.hour ;
  BYTE minu=stDateTime.minute;
  unsigned int time=( int)(hour<<8) + minu;

  if(( Uabc.Ua<POFFVALUE) &&(Uabc.Ub<POFFVALUE) &&(Uabc.Uc<POFFVALUE) )
  { 
     if(RunState.UsS != 0x3)  //上次不是停电状态
     {
      PwOffHand(4, TRUE,time);      
      mode |=W_POW_OFF;
      DeviceState.doSavePowerOff=1;    //停电状态记录          
   
     }    
      RunState.UsS = 0x3;
  }
  else
    {
      if(RunState.UsS !=0)
      { 
        PwOffHand(4, FALSE,time); 
         mode |=W_POW_OFF;
      } 
       RunState.UsS = 0; 
    }
    
//a 相
 if((Uabc.Ua<=nhighV-ULIMIT)&&(Uabc.Ua>=nlowV+ULIMIT))//正常状态 
 {
   if( RunState.UaS!=0x0)
   {
       if( RunState.UaS==0x1||RunState.UaS==0x2 )  //上次越限状态
       {     
          LimitHand(1, FALSE,time,0) ;
          mode |=W_YC_LIMT;
       }
       if(RunState.UaS==0x3)  //上次是停电状态
       {
          PwOffHand(1, FALSE,time);        
          mode |=W_POW_OFF;
       }     
    }  
       RunState.UaS=0x0;  
 }
 
 if((Uabc.Ua<nlowV)&&(Uabc.Ua>=POFFVALUE))//越下限  
 {
   if(RunState.UaS!=0x2)                  //上次状态不为越下限
   {  
     if(RunState.UaS==0x3)                      //上次为停电状态
     {       
        PwOffHand(1, FALSE,time);
        mode |= W_POW_OFF;
     }
     if(RunState.UaS==0x1)                      //上次为越上限
     {
        LimitHand(1, FALSE,time,0 ) ; //上次结束时间保存
        mode |=W_YC_LIMT;
     }       
      clr_watchdog();        
      LimitHand(1, TRUE,time,2 ) ;    
        
   } 
     RunState.UaS=0x2;   
    if(DeviceState.Minutef1) RunState.UaDownSTime ++;   
 }
  
 if(Uabc.Ua>nhighV)                 //越上限
 {
   if(RunState.UaS!=0x1)                //上次不是越上限状态
   {
      if(RunState.UaS==0x3)                      //上次为停电状态
     {
       PwOffHand(1, FALSE,time);
       mode |= W_POW_OFF;
     }     
     if(RunState.UaS==0x2)                      //上次为越下限
     {
        LimitHand(1, FALSE,time,0) ;//上次结束时间保存
        mode |=W_YC_LIMT;         
     }  
     LimitHand(1, TRUE,time,1 );  
       
   } 
    RunState.UaS=0x01;
     if(DeviceState.Minutef1)RunState.UaUpSTime++;
 }
 
 if(Uabc.Ua<POFFVALUE)                             //电压小于POFFVALUE/10伏,认为停电
 { 
     if(RunState.UaS!=0x3)          //上次不是停电
     { 
        if( ((RunState.UaS==0x1)||(RunState.UaS==0x2)))  //越限结束时间保存
        {
            LimitHand(1, FALSE,time,0) ;
            mode |=W_YC_LIMT;
        }
         PwOffHand(1, TRUE,time);                
         RunState.nAOffNums++;  //停电次数            
     }  
       RunState.UaS=0x3;
 }
 else
  if(DeviceState.Minutef1) RunState.ARunTime++; 
  clr_watchdog();     
//b相
if((Uabc.Ub<=nhighV-ULIMIT)&&(Uabc.Ub>=nlowV+ULIMIT))//正常状态 
{
    if(RunState.UbS!=0x0)
    {
       if( RunState.UbS==0x1||RunState.UbS==0x2 )  //上次越限状态
       {
           LimitHand(2, FALSE,time,0) ;        
           mode |=W_YC_LIMT;
       }
       if(RunState.UbS==0x3)                      //上次为停电状态
       {
         PwOffHand(2, FALSE,time);
         mode |= W_POW_OFF;
       }             
     } 
     RunState.UbS=0;
}
 
 if((Uabc.Ub<nlowV)&&(Uabc.Ub>=POFFVALUE))//越下限  
 {
   if(RunState.UbS!=0x2)                  //上次状态不为越下限
   { 
     if(RunState.UbS==0x3)                      //上次为停电状态
     {
      PwOffHand(2, FALSE,time);
      mode |= W_POW_OFF;        
     }     
     if(RunState.UbS==0x1)                      //上次为越上限
     {
        LimitHand(2, FALSE,time,0) ;
        mode |=W_YC_LIMT;
     }
      clr_watchdog();  
     LimitHand(2, TRUE,time,2 ) ; 
      
   }
    RunState.UbS=0x2; 
    //A相电压日越下限时间   
    if(DeviceState.Minutef1) RunState.UbDownSTime++; 
 }
  
 if(Uabc.Ub>nhighV)                 //越上限
 {
   if(RunState.UbS!=0x1)                //上次不是越上限状态
   {
    if(RunState.UbS==0x3)                      //上次为停电状态
     {
       PwOffHand(2, FALSE,time);
       mode |= W_POW_OFF;
     }     
     if(RunState.UbS==0x2)                      //上次为越下限
     {
         LimitHand(2, FALSE,time,0) ;//上次结束时间保存
         mode |=W_YC_LIMT;
     }   
     LimitHand(2, TRUE,time, 1) ;  
       
    }   
    RunState.UbS=0x01;
//日越上限时间   
     if(DeviceState.Minutef1) RunState.UbUpSTime++;

⌨️ 快捷键说明

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