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

📄 ddj.c

📁 电动机保护测量程序,用的是DSP2407,
💻 C
📖 第 1 页 / 共 5 页
字号:
          
     temp1=(DingZhi[0]&0x0040)>>6;/* 欠压压板 */
     temp2=(DingZhi[1]&0x0040)>>6;
     if (temp1==temp2)
      {
     	DingZhiError_flag=1;
      }
     else
      {
     	QY_YaBan=temp1;    
      }     

     temp1=(DingZhi[0]&0x0080)>>7;
     temp2=(DingZhi[1]&0x0080)>>7;
     if (temp1==temp2)
      {
     	DingZhiError_flag=1;    /*保护定值出错标志*/
      }
     else
      {
     	GY_YaBan=temp1;       /* 过压压板 */
      }
     
     temp1=(DingZhi[0]&0x0100)>>8;
     temp2=(DingZhi[1]&0x0100)>>8;
     if (temp1==temp2)
      {
     	DingZhiError_flag=1;    /*保护定值出错标志*/
      }
     else
      {
     	SXDLB_YaBan=temp1;         /* 三相电流不平衡压板 */
      }
     
     temp1=(DingZhi[0]&0x0200)>>9;
     temp2=(DingZhi[1]&0x0200)>>9;
     if (temp1==temp2)
      {
     	DingZhiError_flag=1;    /*保护定值出错标志*/
      }
     else
      {
     	SXDYB_YaBan=temp1;         /* 三相电压不平衡压板 */
      }

     /* 电流电压和时间定值都是乘以100后由后台发给装置的,
     又因为有效值计算中计算的是电流和电压平方,故电压电流定值要平方
     时间定值乘以10后就化为毫秒,除6后即为6毫秒中断的累加数 */
      XDLYXQDDingZhi2=DingZhi[2]*DingZhi[2];     // 相电流有效值启动定值
      DLSDHDingZhi2=DingZhi[3]*DingZhi[3];         // 过流I段电流定值 
      DLSDTDingZhi2=(5*DingZhi[4])/3;              // 过流I段时间定值
      DLYSDHDingZhi2=DingZhi[5]*DingZhi[5];        // 延时速断电流定值 
      DLYSDTDingZhi2=(5*DingZhi[6])/3;             // 延时速断时间定值 
      DLDSDHDingZhi2=DingZhi[7]*DingZhi[7];        // 定时限过流保护电流定值  
      DLSDHFanHuiZhi=ex_feedbk(DLSDHDingZhi2);     // 速断保护电流返回值  
      DLYSDHFanHuiZhi=ex_feedbk(DLYSDHDingZhi2);   // 延时速断保护电流返回值  
      GLFSXJZDingZhi2=DingZhi[8]*DingZhi[8];        // 反时限过流基准电流值 
      QYDYHDingZhi2=DingZhi[9]*DingZhi[9];          //欠压电压定值
      QYDYTDingZhi2=(5*DingZhi[10])/3;               //欠压时间定值
      GYDYHDingZhi2=DingZhi[11]*DingZhi[11];        //过压电压定值
      GYDYTDingZhi2=(5*DingZhi[12])/3;              //过压时间定值
      SXDLBHDingZhi2=DingZhi[13]*DingZhi[13];       //三相电流不平衡度
      SXDLBTDingZhi2=(5*DingZhi[14])/3;             //三相电流不平衡时间
      SXDYBHDingZhi2=DingZhi[15]*DingZhi[15];       //三相电压不平衡度
      SXDYBTDingZhi2=(5*DingZhi[16])/3;             //三相电压不平衡时间
}

unsigned long ex_feedbk(unsigned long int dingzhi)            
{
  unsigned long int fbvalue;

 // fbvalue=dingzhi*243;/*计算过量返回值=0.95*dingzhi*/
  fbvalue=dingzhi*218;/*计算过量返回值=0.85*dingzhi*/ 
  fbvalue=fbvalue>>8;
  return(fbvalue);
} 

unsigned int Calculate_InversTime(unsigned long  int multiple,unsigned int value)
{
  unsigned long timetemp=0;
  unsigned int xxx = 0xffff,inverstime = 0,yyy,tempnum_value;
  yyy=multiple/100;
  if(yyy == 0)
   {
    yyy = multiple/10;
    if(yyy < 2)
     {
      xxx = 0;
     }
    else if(yyy > 5)
     {
      xxx = (multiple - 50)/5 +15;
     }
    else
     {
      xxx = (multiple - 20)/2;
     }
    }
  else if(yyy >= 3)
    {
     xxx = 35;
    }
  else
    {
     xxx = (multiple - 100)/20 + 25;
    }
  if(xxx <= 35)
    {
     if (value==0)  tempnum_value=GLFSXCSDingZhi;
//     else if (value==1) tempnum_value=LXFSXCSDingZhi;
     switch (tempnum_value)
       {
        case 1:
               timetemp = (unsigned long)(Invers_Coef1[xxx]);
               break;
        case 2: 
               timetemp = (unsigned long)(Invers_Coef2[xxx]);
               break;  
        case 3:
               timetemp = (unsigned long)(Invers_Coef3[xxx]);
               break;
        case 4:
               timetemp = (unsigned long)(Invers_Coef4[xxx]);
               break; 
        default:break;
       }       
     if(timetemp >= 60000)      timetemp = 60000;
     if(timetemp <= 2)		timetemp = 2;
     inverstime=timetemp; 
    }
return inverstime;
}
void FSXBaoHu(unsigned int value)
{
  int i;
  long int Imax,kk;  
   if (value==0) 
    { 
     if  (IamVal>=IbmVal) 
       {
        Imax=IamVal;
       }
     else  
       {
        Imax=IbmVal;
       }
     if  (Imax<=IcmVal) 
       {
        Imax=IcmVal;
       }
     kk=(unsigned long int)(Imax/GLFSXJZDingZhi2)*10;
    }
  
  FSdYanShi_time=Calculate_InversTime(kk,0)*5/3;
  if (fsx_flag==0)
   {
    fsx_flag=1;   
    FSdYanShi_oldtime=FSdYanShi_time;
   }      
}

void GZJCSuanFaLJ(void)/*故障检测算法逻辑*/
{  
    if (GLSD_YaBan==0x01) // 速断保护
      {   
         if ((IamVal>=DLSDHDingZhi2)||(IbmVal>=DLSDHDingZhi2)||(IcmVal>=DLSDHDingZhi2))
           {
            GZJCQiDong_flag=1;
           }
         else if ((IamVal<DLSDHFanHuiZhi)&&(IbmVal<DLSDHFanHuiZhi)&&(IcmVal<DLSDHFanHuiZhi))
           {
            GZJCQiDong_flag=0;
           }
      }
   if (GLYSD_YaBan==0x01) // 延时速断保护
     {
      if ((IamVal>=DLYSDHDingZhi2)||(IbmVal>=DLYSDHDingZhi2)||(IcmVal>=DLYSDHDingZhi2))
        {
         if (GZJCQiDong_flag==0)
          {
           GZJCQiDong_flag=1;
          }
        }
      else if ((IamVal<DLYSDHFanHuiZhi)&&(IbmVal<DLYSDHFanHuiZhi)&&(IcmVal<DLYSDHFanHuiZhi))
        {
         GZJCQiDong_flag=0;
        }         
     }
   if (GLYSD_YaBan==0x01)  //过流三段压板
     {
       if (DLIIDFYS_YaBan==1) //选择定时限
       {
         if ((IamVal>=DLDSDHDingZhi2)||(IbmVal>=DLDSDHDingZhi2)||(IcmVal>=DLDSDHDingZhi2))
           {
            if (GZJCQiDong_flag==0)
             { 
              GZJCQiDong_flag=1;
             }
           }
         else if ((IamVal<DLDSDHFanHuiZhi)&&(IbmVal<DLDSDHFanHuiZhi)&&(IcmVal<DLDSDHFanHuiZhi))
           {
            GZJCQiDong_flag=0;
           }        	     
       }
     }
     /*
    if (LXSD_YaBan==0x01) // 零序速断保护
      {  
    	if (I0mVal>=LXSDHDingZhi2)
          {
           GZJCQiDong_flag=1;
          }
        else if (I0mVal<LXSDHFanHuiZhi)
          {
           GZJCQiDong_flag=0;
          }  
      }
    if (LXYSD_YaBan==0x01) // 零序延时速断保护 
     {
      if (I0mVal>=LXYSDHDingZhi2)
        {
         if (GZJCQiDong_flag==0)
          {
           GZJCQiDong_flag=1;
          }
        }
      else if (I0mVal<LXYSDHFanHuiZhi)
        {
         GZJCQiDong_flag=0;
        }
      }
     if (LXIIIDFYS_YaBan==0x01)
      { 
      if (I0mVal>=LXGSDHDingZhi2)
        {
         if (GZJCQiDong_flag==0)
           {
            GZJCQiDong_flag=1;
           }
        }
      else if (I0mVal<LXGSDHFanHuiZhi)
        {
         GZJCQiDong_flag=0;
        }     	
      }     

    */
}
// 101规约-----------------------------------------------------------------------------
void dealdata()
{ /* 处理数据 */
  unsigned int num;
  if(isrepeat())  /* =1重发报文 */
      {
       FuncTab[1].status=0xaaaa; /* 重发数据;*/
      }
  else 
      {
       dealcommand() ;
      }
 FuncTab[6].status=0x5555;
  
}
unsigned int isrepeat()
{/* 是否要求重复发送报文flag=1重发;flag=0不重发 */
 int flag=0;
 if (CSDian_flag==0)
   {
     CSDian_flag=1;//初次上电标记
     if(receive_data[0]==0x10) FCB=receive_data[1]&0x20;
     else if (receive_data[0]==0x68) FCB=receive_data[4]&0x20;
     flag=0;	
   }
 else
   {
    if(receive_data[0]==0x10)
      {
        if(((receive_data[1]&0x20)^(FCB&0x20))!=0)    /*与FCB位比较,相同时值为0,不同时值为1*/
         {
          flag=0;
         }      
        else
         {     
          flag=1;
         }   
        FCB=receive_data[1]&0x20;
      }
    else if(receive_data[0]==0x68)
      {
       if(((receive_data[4]&0x20)^(FCB&0x20))!=0)
          {
           flag=0;
          }
       else 
          {
           flag=1;
          }
       FCB=receive_data[4]&0x20;
      }
   }
 return flag;
}



unsigned int dealcommand()
{/* 命令解析 */
   unsigned int ch,temp_time;
   unsigned int i,temp; 
   if(receive_data[0]==0x10)
   {
      ch=receive_data[1]&0x0f;
  
      switch(ch)
         {
           case 0://复位远方链路发送帧
                  CSDian_flag=0;
                  FuncTab[8].status=0xaaaa;
                  break;
           case 8:break;/* 快速-校验-过程收集1级用户数据帧 */
           case 9://请求链路的请求帧
                  FuncTab[10].status=0xaaaa;
                  break;
           case 10://召唤1级用户数据请求帧 
                  
                  if((GUreset_flag==0)&&(BS==0)&&(ADC!=1)) 
                    {          
                     FuncTab[20].status=0xaaaa;
                     break;
                    }
                  else if(ADC==1)
                    {
                     ADC=0;
                     FuncTab[22].status=0xaaaa; 
                     break;
                    }
                  else if ((GUreset_flag!=0)||(BS!=0)) 
                    {
                      GUreset_flag=0;//0-当地电源开关合上;1-当地手动复位;2-远方复位
                      BS=0;//1-改变当地参数的初始化
                      FuncTab[26].status=0xaaaa;                     
                    }
                  break;
           case 11://召唤2级用户数据请求帧
                  {
                    if (ADC==1) 
                       {
                       	FuncTab[20].status=0xaaaa; //有1级数据,发送无所请求帧
                       	break;
                       }
                    else 
                       {
                        cImVala[0]= sqrt(IamVal);      
                        cImVala[1]= sqrt(IbmVal);  
                        cImVala[2]= sqrt(IcmVal);
                        cImVala[3]= sqrt(UamVal)*100;      
                        cImVala[4]= sqrt(UbmVal)*100; 
                        cImVala[5]= sqrt(UcmVal)*100;
                        YCNum=0;
                        for (i=0;i<6;i++)
                         {
     	                  if (abs(cImVala[i]-cImValp[i])>500)
                           {
     	                    temp=cImVala[i];
                            senddata[10+2*YCNum]=0x01+i;
                            senddata[11+2*YCNum]=0x07;
                            senddata[12+2*YCNum]=temp&0x00ff;
                            senddata[13+2*YCNum]=(temp>>8)&0x00ff;                            
                            YCNum++;
                            cImValb[i]=i;
                            TwoData_flag=1;    	 
                           }
                         }                  	
                       	if ((TwoData_flag==0)&&(soe_no==0))
                       	   {
                       	    senddata_length=1;
                       	    senddata[0]=0xe5;
                            //lengthbak=1;
                            //send_length=1;
                            //SCITXBUF=0xe5;
                            send_data(senddata_length);
                            break;
                       	   }
                       	else
                       	   {
                       	    if (fstwo_flag==0xaa) 
                       	     {
                       	      fstwo_flag=0x55;
                       	      if (TwoData_flag==1)
                       	        {
                       	         FuncTab[21].status=0xaaaa; 
                       	         TwoData_flag=0; 
                       	        }
                       	      else
                       	        {
                       	         if (soe_no!=0) FuncTab[23].status=0xaaaa;
                       	        }
                       	      }
                       	     else if (fstwo_flag==0x55) 
                       	      { 
                       	       fstwo_flag=0xaa;
                       	       if (soe_no!=0) 
                       	         {
                       	          FuncTab[23].status=0xaaaa;
                       	         }
                       	       else 
                       	         {
                       	          if (TwoData_flag==1)
                       	           {
                       	            FuncTab[21].status=0xaaaa; 
                       	            TwoData_flag=0; 
                       	           }                       	          
                       	         }                       	      
                       	      } 
                     	                           	    
                       	   } 
                        cImValp[0]= sqrt(IamVal);      
                        cImValp[1]= sqrt(IbmVal);  
                        cImValp[2]= sqrt(IcmVal);
                        cImValp[3]= sqrt(UamVal)*100;      
                        cImValp[4]= sqrt(UbmVal)*100; 
                        cImValp[5]= sqrt(UcmVal)*100;
                       	break;
                       } 
                    break;  
                  }
           default: break;	
         }	
  
   }
   else if(receive_data[0]==0x68)
  {

      ch=receive_data[4]&0xf;
        switch(ch)//功能码
         {
           case 0x1: GUreset_flag=2;
                     FuncTab[9].status=0xaaaa;                      
                     break; //复位终端
           case 0x2: break; //链路测试
           case 0x3:{
           	     switch(receive_data[6]&0xff)//类型标识
                        {
                      	  case 0x64://总召
                      	           {
                      	            ZongZhao_flag=0xaaaa;
                      	            switch (ZongZhao_frame)	
                      	              {
                      	              	case 14:FuncTab[14].status=0xaaaa;ZongZhao_frame=15;break;
                      	              	case 15:FuncTab[15].status=0xaaaa;ZongZhao_frame=16;break;
                      	              	case 16:FuncTab[16].status=0xaaaa;ZongZhao_frame=17;break;
                      	              	case 17:FuncTab[17].status=0xaaaa;ZongZhao_frame=18;break;
                                        case 18:FuncTab[18].status=0xaaaa;ZongZhao_frame=23;break;
                                        case 19:FuncTab[19].status=0xaaaa;ZongZhao_frame=14;ZongZhao_flag=0x5555;break;
                                        case 23:FuncTab[23].status=0xaaaa;ZongZhao_frame=27;break;
                                        case 27:FuncTab[27].status=0xaaaa;ZongZhao_frame=19;break;
                                        default:ZongZhao_frame=14;break;
                      	              }                   	            
                      	            break;
                      	           }  
                      	  case 0x66:break;//读数据  
                      	  case 0x67://对时
                      	           {
                      	            temp_time=(receive_data[13]<<8)|receive_data[12];
                      	            millisecond_set=temp_time%1000;
                      	            millisecond_gewei=millisecond_set%10;
                      	            //millisecond_shiwei=(millisecond%100)-millisecond_gewei;                                    
                                    second_set=temp_time/1000;             
                                    minute_set=receive_data[14]&0x3f;
                                    hour_set=receive_data[15]&0x1f;
                                    week_set=receive_data[16]&0xe0;
                                    day_set=receive_data[16

⌨️ 快捷键说明

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