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

📄 101.c

📁 此源代码为电力系统中的RTU终端反馈!具有GPRS通讯功能!
💻 C
📖 第 1 页 / 共 4 页
字号:
       //the reset manipulation to the data block of substation is here......//      
        nFuction=0;
       nCause=7;               
       break;

     case P_ME_NA_1:                                     //parameter configuer (set dian du biao di and ttu param ) !!!!!!!修改 12/11
         nVarQualifier.SQ=0;
         if((pRecData[10]>=0x81)&&(pRecData[10]<=0xA0))  //9E
         {   
         CommState.DoWrParm=1;
          if(pRecData[10]>=0x81 &&pRecData[10]<=0x83)//参数  UHighV;CTRate;  YKSelectTime ;
          {         
           Write1024(0,PUHIGHV+((pRecData[10]-0x81)<<1),&pRecData[12],2,TRUE);
           Write1024(505,PUHIGHV+((pRecData[10]-0x81)<<1),&pRecData[12],2,TRUE);//写到备份区
          }
          if(pRecData[10]>=0x84 &&pRecData[10]<=0x8C)//参数 ULowV;...CheckBit1; 
          {
            Write1024(0,PULOWV+(pRecData[10]-0x84), &pRecData[12],1,TRUE);
            Write1024(505,PULOWV+(pRecData[10]-0x84), &pRecData[12],1,TRUE);  //写到备份区   
            if(pRecData[10]==0x89 )CommState.DoIniCom0=1;
            if(pRecData[10]==0x8b )CommState.DoIniCom1=1;          
          }
    
          if(pRecData[10]>=0x8D &&pRecData[10]<=0x92)//参数  KV_A...KI_C0; 
          {  
              
            Write1024(0,PKV_A+((pRecData[10]-0x8D)<<1), &pRecData[12],2,TRUE);
            Write1024(505,PKV_A+((pRecData[10]-0x8D)<<1), &pRecData[12],2,TRUE);//写到备份区  
          }
          
           if(pRecData[10]>=0x93 && pRecData[10]<0x96)//参数   不包括版本号
           {
            Write1024(0,PYKE_TIME+(pRecData[10]-0x93), &pRecData[12],1,TRUE);
            Write1024(505,PYKE_TIME+(pRecData[10]-0x93), &pRecData[12],1,TRUE);//写到备份区 
           }
           
           if(pRecData[10]==0x95)  // TTU控制 TTU_Control_Param
           {  
              if(pRecData[12]& BIT7) DeviceState.DoClearDay=1;
              if(pRecData[12]& BIT6 ) DeviceState.DoClearAll=1;
            }
          if(pRecData[10]>=0x97 && pRecData[10]<=0x99)//参数 int  KI_A1 int  KI_C1
          { 
           Write1024(0,PKI_A1+((pRecData[10]-0x97)<<1),&pRecData[12],2,TRUE);
           Write1024(505,PKI_A1+((pRecData[10]-0x97)<<1),&pRecData[12],2,TRUE);//写到备份区
          }          
          if(pRecData[10]>=0x9B   && pRecData[10]<=0x9E )//电度量 正反有功、无功电度
          {
           Write1024(0,PVPOWERB+((pRecData[10]-0x9B)<<2),&pRecData[12],4,TRUE);
           Write1024(505,PVPOWERB+((pRecData[10]-0x9B)<<2),&pRecData[12],4,TRUE);//写到备份区
           AddedPQ[pRecData[10]-0x9B]=0;  //twq               
          }
          if(pRecData[10]>=0x9F   && pRecData[10]<=0xA0 )//电度量 YM电度
          {    
            Write1024(0,PVPOWERB+((pRecData[10]-0x9B)<<2),&pRecData[12],4,FALSE);
            Write1024(505,PVPOWERB+((pRecData[10]-0x9B)<<2),&pRecData[12],4,FALSE);//写到备份区
            AddedYM[pRecData[10]-0x9F]=0;                      
          }  

          WriteCheckParam(0,PUHIGHV,sizeof(TTU_RunParam));  //写校验符到1024
          WriteCheckParam(505,PUHIGHV,sizeof(TTU_RunParam));//写校验符到备份区
          CommState.DoWrParm=0;
          nFuction=0;
          nCause=7; 
          nGroup=pRecData[10];                          //information addr look as group num 
       }
       else
       { 
          return FALSE;
       }
       break;
     case P_AC_NA_1:                                //参数激活
       if((pRecData[10]>=0x81)&&(pRecData[10]<=0x9E))   //information addr arrange      ---new---( + PassWord )
       {
         SpecialFlag.TTUParamChangeFlag=1;                
         nCause=7;
        }  
         else
        {
          return FALSE;
        }
        break;
      case F_AF_NA_1: //文件确认或节确认的响应帧
        if(pRecData[15]==1) //文件传输肯定确认
        {
         //子站不响应
          return FALSE ;
        }
        if(pRecData[15]==2) //文件传输否定确认
        {     
        }
        if(pRecData[15]==3) //节传输的正确认可       
        {
            nFuction=0; 
            nCause=13;
            nTypeIdentity=123; 
            SpecialFlag.LSQ =2;
         }
        if(pRecData[15]==3) //节传输的否定认可 
        {
        }
        break;
     case F_SC_NA_1:                  //file transfer(read ttu runing param ,hour records,maxmin records,daily records,hisevent,var event)
      if( ((pRecData[13]&0xC0)>>6 )==0)
        {
        nFuction=0; 
        nCause=13;
        nTypeIdentity=125;       
        nGroup=pRecData[14];                        //set  sectionname as group name   14        
        stFileName.month= BCDtoHex(pRecData[13]);   //pRecData[12]; 
        stFileName.week_date=BCDtoHex(pRecData[12]);//pRecData[13];
        break;
        }
        if(pRecData[8]==5)  //召唤目录
         {
          nFuction=0; 
          nCause=5;
          nTypeIdentity=126; //F_DR_TA_1      
         }
         if(pRecData[8]==13)  //召唤其他
         {
           if(pRecData[15]==1) //选择文件
           {
            nFuction=0; 
            nCause=13;
            nTypeIdentity=120; 
           }
           if(pRecData[15]==2) //召唤文件
           {
            nFuction=0; 
            nCause=13;
            nTypeIdentity=121; 
           }   
           if(pRecData[15]==6) //召唤节
           {
            nFuction=8; 
            nCause=13;
            nTypeIdentity=F_SG_NA_1;   //125
            SpecialFlag.nSGCount=0;
            stFileName.week_date=BCDtoHex(pRecData[12]);//pRecData[12];
            stFileName.month= BCDtoHex(pRecData[13]&0x3F);//pRecData[13];            
            SpecialFlag.DataType =( pRecData[13]&0xc0 )>>6;   
			if((SpecialFlag.DataType==1) || (SpecialFlag.DataType==2) ||
				(SpecialFlag.DataType==3)   )  SpecialFlag.FileTxFlag=1;						//05-11-5
           }      
         }
        break;
    }
    EncodeVariableLenFrame(nTypeIdentity,nCause,nFuction,nGroup);        
    return TRUE ;
  } 
  return FALSE;    
 
}

//历史数据打包
void EncodeHistData()
{
  BYTE temp=15,i,j;
  i=(SpecialFlag.nSGCount<<1)+SpecialFlag.nSGCount;
  TCommCode[temp++] =184;
  TCommCode[temp++] = SpecialFlag.nSGCount; //第几段
  if(SpecialFlag.nSGCount==0)
  {
   SpecialFlag.CHS=0;
  }
  
  for(j=i;j<i+3;j++)
  {
    stFileName.hour = (j*HisCate)>>2;
    stFileName.minute = (j&(4/HisCate-1))*(15*HisCate);
    TCommCode[temp++] =stFileName.month;  
    TCommCode[temp++] =stFileName.week_date;
    TCommCode[temp++] =(1<<7)+j*HisCate;                  
    ReadHisData(&TCommCode[temp],&nFileDataLen,&stFileName,0,MAXLENGTH);
    if(nFileDataLen==0)
    {
     memset(&TCommCode[temp-3],0,59);nFileDataLen=56;
    }
      temp += nFileDataLen;
      memset(&TCommCode[temp],0,2);
      temp += 2;  
    }
    SpecialFlag.CHS += CheckSum(&TCommCode[16],TCommCode[15]);
//  SpecialFlag.nSGCount++;  //05-11-5
}
//统计数据打包
BYTE EncodeStaticData()
{  
  BYTE temp=15,len;
  switch(SpecialFlag.nSGCount)
  {
  case 0:  //极值记录组(0段)
     SpecialFlag.CHS=0;
     TCommCode[temp++] =67;
     TCommCode[temp++] = SpecialFlag.nSGCount; //第几段
     TCommCode[temp++] =stFileName.month;  
     TCommCode[temp++] =stFileName.week_date;
     if((stFileName.month==stDateTime.month) && ((stFileName.week_date & 0x1f) == (stDateTime.week_date & 0x1f ) ) )
       memcpy(&TCommCode[temp], (BYTE*)value_time, 64);  //极值时间     
     else
       FileReadStaticData(SpecialFlag.nSGCount,&TCommCode[temp]);
     len =68;    
     break;
  case 1:  //越限记录组(1段)
     TCommCode[temp++] =67;
     TCommCode[temp++] = SpecialFlag.nSGCount; //第几段
     TCommCode[temp++] =stFileName.month;  
     TCommCode[temp++] =stFileName.week_date;
     if((stFileName.month==stDateTime.month) && ((stFileName.week_date & 0x1f) == (stDateTime.week_date & 0x1f ) ) )
       memcpy(&TCommCode[temp], (BYTE*)over_limit, 64);  //遥测越限纪录
     else
     FileReadStaticData(SpecialFlag.nSGCount,&TCommCode[temp]);
     len =68;    
     break;
  case 2:  //供电情况组(2段)
     TCommCode[temp++] =sizeof(RTSTATE)+3;
     TCommCode[temp++] = SpecialFlag.nSGCount; //第几段
     TCommCode[temp++] =stFileName.month;  
     TCommCode[temp++] =stFileName.week_date;
     if((stFileName.month==stDateTime.month) && ((stFileName.week_date & 0x1f) == (stDateTime.week_date & 0x1f ) ) )
        memcpy(&TCommCode[temp], (BYTE*)&RunState, sizeof(RTSTATE));  //供电情况
     else
     FileReadStaticData(SpecialFlag.nSGCount,&TCommCode[temp]);
     len =sizeof(RTSTATE)+4;    
     break;
  case 3:  //停电记录组(3段)
     TCommCode[temp++] =57;
     TCommCode[temp++] = SpecialFlag.nSGCount; //第几段
     TCommCode[temp++] =stFileName.month;  
     TCommCode[temp++] =stFileName.week_date;
     if((stFileName.month==stDateTime.month) && ((stFileName.week_date & 0x1f) == (stDateTime.week_date & 0x1f ) ) )
        memcpy(&TCommCode[temp], (BYTE*)off_time, 54);    //日停电纪录
     else   
     FileReadStaticData(SpecialFlag.nSGCount,&TCommCode[temp]);
     len =58;    
     break;
  case 4:   //电度记录组(4段)
     TCommCode[temp++] =19;
     TCommCode[temp++] = SpecialFlag.nSGCount; //第几段
     TCommCode[temp++] =stFileName.month;  
     TCommCode[temp++] =stFileName.week_date;
     if((stFileName.month==stDateTime.month) && ((stFileName.week_date & 0x1f) == (stDateTime.week_date & 0x1f ) ) )
         Read1024(0,PVPOWERB,&TCommCode[temp],MAXDD*sizeof(long));  
     else     
     FileReadStaticData(SpecialFlag.nSGCount,&TCommCode[temp]);
     len =4+MAXDD*sizeof(long);    
     break;

  }
  SpecialFlag.CHS += CheckSum(&TCommCode[16],TCommCode[15]);
 // SpecialFlag.nSGCount++;  //05-11-5
  return len;
}

//录波数据打包]
BYTE EncodeLuboData()
{
  BYTE temp=15,len;
  switch(SpecialFlag.nSGCount)
  {
  case 0:  // 电压(0段)
     SpecialFlag.CHS =0;
     TCommCode[temp++] =193;
     TCommCode[temp++] = SpecialFlag.nSGCount; //第几段
     while(DeviceState.DoGetData);
     CommState.DoSendLubo=1;
     memcpy(&TCommCode[temp], Ua_Data,64);
     temp+=64;
     memcpy(&TCommCode[temp], Ub_Data,64);   
     temp+=64;
     memcpy(&TCommCode[temp], Uc_Data,64);   
     len =194;  
     break;
     
  case 1:  // 电流(1段)
     TCommCode[temp++] =193;
     TCommCode[temp++] = SpecialFlag.nSGCount; //第几段
     memcpy(&TCommCode[temp], Ia_Data,64);
     temp+=64;
     memcpy(&TCommCode[temp], Ib_Data,64);   
     temp+=64;
     memcpy(&TCommCode[temp], Ic_Data,64);   
     CommState.DoSendLubo=0;
     len =194;    
     break;
     }
     SpecialFlag.CHS += CheckSum(&TCommCode[16],TCommCode[15]);
//     SpecialFlag.nSGCount++; //05-11-5
     return len;
}

void WriteCheckParam(UINT ParamPageAdd,UINT ParamAddrInPage,int nLength)//写校验符到1024
{

   BYTE Check_Param;
   ReadParam(ParamPageAdd);               
   Check_Param=GetCheckParam();
   Write1024(ParamPageAdd,CHECK_PARAM,&Check_Param,1,TRUE);
}

BYTE GetCheckParam()
{
  BYTE * pd= (BYTE *) &TTU_RunParam;
  BYTE  chk=0;
  int i;
  for(i=0;i<sizeof(TTU_RunParam);i++)
   { 
     chk +=*pd;
     pd++;
   }
   return chk;
}

void ReadParam(UINT ParamPageAdd)
{
   Read1024(ParamPageAdd,PUHIGHV,(BYTE*)&(TTU_RunParam.UHighV),6); 
       clr_watchdog();
   Read1024(ParamPageAdd,PULOWV,(BYTE*)&(TTU_RunParam.ULowV),9); //参数 ULowV;...CheckBit1;
       clr_watchdog();
   Read1024(ParamPageAdd,PKV_A,(BYTE*)&(TTU_RunParam.KV_A),12);  //参数   KV_A...KI_C0; 
       clr_watchdog();
   Read1024(ParamPageAdd,PYKE_TIME,(BYTE*)&(TTU_RunParam.YKExcecuteTime),4); 
       clr_watchdog();
   Read1024(ParamPageAdd,PKI_A1,(BYTE*)&(TTU_RunParam.KI_A1),6);
       clr_watchdog();
   Read1024(ParamPageAdd,PASS_WORD,(BYTE*)&(TTU_RunParam.PassWord),2);
       TTU_RunParam.VersionOfSoft=SOFTVERSION ;
}

void  CopyParam(UINT ParamPageAdd)
{ 

 CommState.DoWrParm=1;
   Write1024(ParamPageAdd,PUHIGHV,(BYTE*)&(TTU_RunParam.UHighV),6,TRUE);
        clr_watchdog();
  Write1024(ParamPageAdd,PULOWV,(BYTE*)&(TTU_RunParam.ULowV),9,TRUE);
        clr_watchdog();
  Write1024(ParamPageAdd,PKV_A,(BYTE*)&(TTU_RunParam.KV_A),12,TRUE);
        clr_watchdog();
  Write1024(ParamPageAdd,PYKE_TIME,(BYTE*)&(TTU_RunParam.YKExcecuteTime),4,TRUE);
        clr_watchdog();
  Write1024(ParamPageAdd,PKI_A1,(BYTE*)&(TTU_RunParam.KI_A1),6,TRUE);
        clr_watchdog();
  Write1024(ParamPageAdd,PASS_WORD,(BYTE*)&(TTU_RunParam.PassWord),2,TRUE);   
        clr_watchdog();    
  WriteCheckParam(ParamPageAdd,PUHIGHV,sizeof(TTU_RunParam)); //写校验符  
  CommState.DoWrParm=0;
}

⌨️ 快捷键说明

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