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

📄 commpublic.c

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

void  ClearDayData();//清当天的历史数据和统计数据
BYTE CheckSum(BYTE* pBuffer, int nLength)
{
  int i;
  BYTE byteRet = 0;
  for( i=0; i<nLength; i++)
      byteRet += pBuffer[i];

  return byteRet;
}

BYTE BCDtoHex(BYTE bcd)//一个字节的bcd转换
{
  BYTE result;
  result=(((bcd&0xF0)>>4)*10);
  result+=(bcd&0xF);
 
  return result;
}

BYTE HextoBCD(BYTE hex) //right
{
  BYTE result;
  if(hex>9)
  result=((hex/10)<<4)+(hex%10);
  else
  result=hex;
  
  return result;  
}

void SaveHisData(void)//从RAM写到FLASH  76个BYTE
{ 
   
   BYTE AddrInPage=0,c[24];  
   ptr_1024=Get1024Page(stDateTime,0);
   if(ptr_1024==0) return;
   if(ptr_1024==505) return; 
   if(ptr_1024>511) return;    
   AddrInPage=GetAddrInPage(stDateTime);               

   Write1024(ptr_1024,AddrInPage,(BYTE*)(&stDateTime.second+1),4,TRUE);   //minute,hour ,date_week,month
   AddrInPage+=4; 
   Write1024(ptr_1024,AddrInPage,(BYTE*)&BD_data.Ua,56,TRUE);  
   
   AddrInPage+=56; 
   Read1024(0,PVPOWERB,c,MAXDD*sizeof(long));   
   Write1024(ptr_1024,AddrInPage,c,MAXDD*sizeof(long),TRUE);//电能    
}


BOOL ReadHisData(BYTE * pdata,BYTE *len ,STDATETIME* st,BYTE mode,BYTE maxlen)
{

 BYTE i,j,m;    
 BYTE AddrInPage=0;
 i=0;j=0;m=0;
 ptr_1024=Get1024Page(*st,0);
   if((ptr_1024==0) || (ptr_1024==505)||(ptr_1024>511) )
   {
     (*len)=0;
     return FALSE;
   }
  
 switch(mode)
 {
   case 0:                                                //st的全部运行参数
        AddrInPage= GetAddrInPage(*st);
        Read1024(ptr_1024,AddrInPage,pdata,60);           //时间(4)+运行参数(56)
        if((pdata[3]!=(*st).month)||((pdata[2]&0x1f)!=(*st).week_date)||(pdata[1]!=(*st).hour)||(pdata[0]!=(*st).minute))
        {
          (*len)=0;
        }
        else         
        { 
          memcpy(pdata,pdata+4,56);                                //四个字节的时间去掉
          (*len)=56;                          
        } 
        break;
   case 1:                                                //st的全部数据
        AddrInPage= GetAddrInPage(*st);
        Read1024(ptr_1024,AddrInPage,pdata,76);           //时间(4)+运行参数(56)+电度量(4*4)
        if((pdata[3]!=(*st).month)||((pdata[2]&0x1f)!=(*st).week_date)||(pdata[1]!=(*st).hour)||(pdata[0]!=(*st).minute))
        {
          (*len)=0;
        }
        else         
        { 
          memcpy(pdata,pdata+4,72);                                //四个字节的时间去掉
          (*len)=72;                          
        } 
        break;
   case 11:                               //st的三相电压
        AddrInPage =GetAddrInPage(*st);
        Read1024(ptr_1024,AddrInPage,pdata,4);                 
        if((pdata[3]!=(*st).month)||((pdata[2]&0x1f)!=(*st).week_date)||(pdata[1]!=(*st).hour)||(pdata[0]!=(*st).minute))
        {
           (*len)=0;
        }
        else        
        {
           AddrInPage+=4;
           Read1024(ptr_1024,AddrInPage,pdata,2);           //st对应的ua
           AddrInPage+=4;
           Read1024(ptr_1024,AddrInPage,pdata+2,2);         //st对应的ub
           AddrInPage+=4;
           Read1024(ptr_1024,AddrInPage,pdata+4,2);         //st对应的uc
           (*len)=6;
        }
        break;       
   case 12:                                         //st的电流数据
          AddrInPage =GetAddrInPage(*st);
          Read1024(ptr_1024,AddrInPage,pdata,4);            //st
          if((pdata[3]!=(*st).month)||((pdata[2]&0x1f)!=(*st).week_date)||(pdata[1]!=(*st).hour)||(pdata[0]!=(*st).minute))
          {
            (*len)=0;
          }
          else  
          {
            AddrInPage+=5;
            Read1024(ptr_1024,AddrInPage,pdata,2);           //st对应的ia
            AddrInPage+=4;
            Read1024(ptr_1024,AddrInPage,pdata+2,2);         //st对应的ib
            AddrInPage+=4 ;
            Read1024(ptr_1024,AddrInPage,pdata+4,2);        //st对应的ic
            AddrInPage+=18 ;
            Read1024(ptr_1024,AddrInPage,pdata+6,2);        //st对应的i0
            (*len)=8;
         }  
         break;  
  case 13:                                                   //st的p q
          AddrInPage =GetAddrInPage(*st);
          Read1024(ptr_1024,AddrInPage,pdata,4);              
          if((pdata[3]!=(*st).month)||((pdata[2]&0x1f)!=(*st).week_date)||(pdata[1]!=(*st).hour)||(pdata[0]!=(*st).minute))
          {
             (*len)=0;
          }
          else
          {        
             AddrInPage+=16;
             Read1024(ptr_1024,AddrInPage,pdata,2);          //st对应的p
             AddrInPage+=2;
             Read1024(ptr_1024,AddrInPage,pdata+2,2);        //st对应的q
             (*len )=4;
          }
          break; 
  case 14:                                              //st的各项功率
         AddrInPage = GetAddrInPage(*st);                      //st
         Read1024(ptr_1024,AddrInPage,pdata,4);
         if((pdata[3]!=(*st).month)||((pdata[2]&0x1f)!=(*st).week_date)||(pdata[1]!=(*st).hour)||(pdata[0]!=(*st).minute))
         {
             (*len)=0;
         }
         else
         {           
             AddrInPage+=22;
             Read1024(ptr_1024,AddrInPage,pdata,2);           //st对应的pa
             AddrInPage+=2;
             Read1024(ptr_1024,AddrInPage,pdata+2,2);         //st对应的pb         
             AddrInPage+=2;   
             Read1024(ptr_1024,AddrInPage,pdata+4,2);         //st对应的pc           
             AddrInPage+=2;
             Read1024(ptr_1024,AddrInPage,pdata+6,2);         //st对应的qa           
             AddrInPage+=2;   
             Read1024(ptr_1024,AddrInPage,pdata+8,2);         //st对应的qb          
             AddrInPage+=2;
             Read1024(ptr_1024,AddrInPage,pdata+10,2);        //st对应的qc
             (*len)=12;
         }
         break;
   case 19:                                                  //st的电度
          AddrInPage =GetAddrInPage(*st);
          Read1024(ptr_1024,AddrInPage,pdata,4);              //st
          if((pdata[3]!=(*st).month)||((pdata[2]&0x1f)!=(*st).week_date)||(pdata[1]!=(*st).hour)||(pdata[0]!=(*st).minute))
          {
             (*len)=0; 
          }
          else
          {    
            AddrInPage+=60;
            Read1024(ptr_1024,AddrInPage,pdata,16);          //st对应的A R
            (*len)=16;
         }
         break;      
 
 //曲线数据纪录  
  case 21:
         for(i=0;i<12;i++)                     //st对应的日电压曲线 ua
         { 
           for (j=0;j<2;j++)
           {  
              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+4,&pdata[m],2);     
              }  
              AddrInPage+=128; m+=2; (*len)+=2;                  //******************
          }
          ptr_1024+=1; 
          AddrInPage=0;
        }
    
        break;  
  case 22:                                     //st对应的日电压曲线 ub
          for(i=0;i<12;i++)    
          {  
            for (j=0;j<2;j++)
            {
              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+8,&pdata[m],2);      
              }
              m+=2;(*len)+=2;AddrInPage+=128;  
            }
            ptr_1024+=1; AddrInPage=0;
              
          }
          break;      
 case 23:                        //st对应的日电压曲线uc
          for(i=0;i<12;i++)    
          {  
             for(j=0;j<2;j++)
             {
              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+12,&pdata[m],2);     
              }
               m+=2;(*len)+=2; AddrInPage +=128; 
             }
             ptr_1024+=1; 
             AddrInPage=0;
          }
          break;           
 case 24:                                   //st对应的日电压曲线ia
          for(i=0;i<12;i++)    
         { 
           for (j=0;j<2;j++)
           {  
              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+6,&pdata[m],2);      
              }  
              AddrInPage+=128; m+=2; (*len)+=2;                 
          }
          ptr_1024+=1; 
          AddrInPage=0;
        }
         break;         
  case 25:                          //st对应的日电压曲线ib
         for(i=0;i<12;i++)    
         { 
           for (j=0;j<2;j++)
           {  
              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+10,&pdata[m],2);    
              }  
              AddrInPage+=128; m+=2; (*len)+=2;                   
          }
          ptr_1024+=1; 
          AddrInPage=0;
        }
          break;  
     case 26:                                     //st对应的日电压曲线ic
         for(i=0;i<12;i++)    
         { 
           for (j=0;j<2;j++)
           {  
              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+14,&pdata[m],2);    
              }  
              AddrInPage+=128; m+=2; (*len)+=2;                   
          }
          ptr_1024+=1; 
          AddrInPage=0;
        }
          break;    
    case 27:                                       //st对应的日电压曲线i0
         for(i=0;i<12;i++)    
         { 
           for (j=0;j<2;j++)
           {  
              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+34,&pdata[m],2);    
              }  
              AddrInPage+=128; m+=2; (*len)+=2;                   
          }
          ptr_1024+=1; 
          AddrInPage=0;
        }
          break; 
   case 28:                               //st对应的日曲线p
         for(i=0;i<12;i++)    
         { 
           for (j=0;j<2;j++)
           {  

⌨️ 快捷键说明

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