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

📄 pt.c

📁 电力系统中的保护装置全部代码
💻 C
📖 第 1 页 / 共 2 页
字号:
    Uar   =    AIChn[Ua_Chn].chla_fundamental_real;
    Uai   =    AIChn[Ua_Chn].chla_fundamental_imaginary;
    
    Ub    =    AIChn[Ub_Chn].chl_value1;
    Ubr   =    AIChn[Ub_Chn].chla_fundamental_real;
    Ubi   =    AIChn[Ub_Chn].chla_fundamental_imaginary;
    
    Uc    =    AIChn[Uc_Chn].chl_value1;
    Ucr   =    AIChn[Uc_Chn].chla_fundamental_real;
    Uci   =    AIChn[Uc_Chn].chla_fundamental_imaginary;
    
//数据传递
    pValue      =    pProtect->pro_run_data;  
   //------------------------------------------------// 
//A相电流 
    pValue->value_measure    =    Ia_Value;
    pValue++;        
//B相电流 
    pValue->value_measure    =    Ib_Value;
    pValue++;           
//C相电流 
    pValue->value_measure    =    Ic_Value;
    pValue++; 
//AB相电压
    pValue->value_measure    =    Uab;
    pValue++;        
//BC相电压 
    pValue->value_measure    =    Ubc;
    pValue++;           
//CA相电压 
    pValue->value_measure    =    Uca;
    pValue++;     

//////保护逻辑
// ----------------------------------------------------- // 
//PT断线投退
    if(!PT_Plunge)
    {
        *PTDXBZ = 0;
        pProtect->pro_startup_flag    =    0;
        pProtect->pro_pickup_flag     =    0;
        pProtect->pro_reserve3 = 0;	
        pProtect->pro_reserve4 = TMD_System_Clock;
        return;
    }
//有突变量启动
    if(IQD.QDB)
    {
        pProtect->pro_reserve4 = TMD_System_Clock;
        return;
    }
//三相断线
    Phase = Uab <ZEROVOLTAGE && Ubc <ZEROVOLTAGE && Uca <ZEROVOLTAGE && (Ia_Value > ZEROCURRENT || Ib_Value > ZEROCURRENT|| Ic_Value > ZEROCURRENT);
//非三相断线
//    Line  = fabs(Uab - Ubc) >ZEROVOLTAGE || fabs(Ubc - Uca) >ZEROVOLTAGE || fabs(Uca - Uab) >ZEROVOLTAGE;
    U12 = FSQRT(Uar - Ubr,Uai - Ubi);
    U23 = FSQRT(Ubr - Ucr,Ubi - Uci);
    U31 = FSQRT(Ucr - Uar,Uci - Uai);
    Line  = fabs(U12 - U23) >ZEROVOLTAGE1 || fabs(U23 - U31) >ZEROVOLTAGE1 || fabs(U31 - U12) >ZEROVOLTAGE1;    
//线路状态
    Phase = Phase || Line;
//断线故障返回
    if(Uab >= RETURNVOLTAGE && Ubc >= RETURNVOLTAGE && Uca >= RETURNVOLTAGE)
    {
        *PTDXBZ = 0;
        pProtect->pro_startup_flag    =    0;
        if(!pProtect->pro_reserve3)
        pProtect->pro_pickup_flag     =    0;
        pProtect->pro_reserve4 = TMD_System_Clock;
    }    	
//无断线
    if(!Phase)
    {        
        pProtect->pro_reserve4 = TMD_System_Clock;
        PTl_Test(pProtect); 
        return;		
    }
//有断线
    
    if(pProtect->pro_startup_flag)
        return;
//时间元件
    if(TMD_System_Clock - pProtect->pro_reserve4 < 5000)
        return;
    
    pProtect->pro_startup_flag    =    1;          
    if(*PTDXBZ)
        return;
//动作元件
    *PTDXBZ=1;
    Signal();			    
    pProtect->pro_pickup_flag = 1;
    
//////报告
    pReport = &PT_Report;
// ----------------------------------------------------- //
//SOE		
    pSoe = &pReport->pro_report_soe;
   //------------------------------------------------//		    	
    pSoe->Relative_Time = pProtect->pro_reserve5;
    READ_DEC_TIME(&pSoe->Year);
//动作值
    pValue = pReport->pro_report_data;
   //------------------------------------------------// 
    pValue -> value_measure     =       Ua;
    pValue++; 

    pValue -> value_measure     =       Ub;
    pValue++;

    pValue -> value_measure     =       Uc;
    pValue++; 
   //------------------------------------------------//
    pReport->mmi_flag = MMIDISPLAY + MMIPICKUP;
    Fill_Report(pReport);

}

void PTl_Test(PROTECT  *ptr)
{
extern   PROTECT protect_Reclose;
PROTECT         *pProtect;
SETTING         *pSets;
SOE             *pSoe;
VALUE           *pValue;
REPORT          *pReport; 
float    Ux,Uxr,Uxi,Ul,Ulr,Uli;
float    Ia,Ib,Ic;
UNSIGNED Mode,Syn_Type;

//---------------------------------------------------//
//指针赋值
    pProtect = &protect_Reclose;
    pSets  = pProtect->pro_setting;
//重合方式
    pSets += 2;
    Mode   = (UNSIGNED)(pSets->set_value_zone[iLONC_SetZoneNum] + 0.01);
//电压相别
    pSets++;
    Syn_Type = pSets->set_value_zone[iLONC_SetZoneNum];
//电流
    Ia = AIChn[PIa_Chn].chl_value1;
    Ib = AIChn[PIb_Chn].chl_value1;
    Ic = AIChn[PIc_Chn].chl_value1;                
//告警延时返回
    pProtect = ptr;
    if(pProtect->pro_reserve6)
    {
        if(TMD_System_Clock - pProtect->pro_reserve7 >= 6500)
        {
            pProtect->pro_reserve6 = 0;
            pProtect->pro_reserve7 = TMD_System_Clock;
        }
        return;
    }    
//母线PT断线
    if(pProtect->pro_reserve1)
    {
        pProtect->pro_reserve7 = TMD_System_Clock;
        pProtect->pro_reserve3 = 0;	
        return;
    }  
    if(!pProtect->pro_reserve3)
        pProtect->pro_pickup_flag = 0;     
//判合位
    if(!DIChn[HW].state)
    {
        pProtect->pro_reserve7 = TMD_System_Clock;
        return;
    } 
//无检定(重合方式)    
    if(!Mode)
    {
        pProtect->pro_reserve7 = TMD_System_Clock;
        return;
    } 
//无流
    if(Ia < 0.04 && Ib < 0.04 && Ic < 0.04)
    {
        pProtect->pro_reserve7 = TMD_System_Clock;
        return;
    } 
//母线电压
    switch(Syn_Type) 
    {
        case 0:
            Ul  = AIChn[Ua_Chn].chl_value1; 
            Ulr = AIChn[Ua_Chn].chla_fundamental_real;
            Uli = AIChn[Ua_Chn].chla_fundamental_imaginary; 
            break;
        case 1:
            Ul  = AIChn[Ub_Chn].chl_value1; 
            Ulr = AIChn[Ub_Chn].chla_fundamental_real;
            Uli = AIChn[Ub_Chn].chla_fundamental_imaginary; 
            break; 
        case 2:
            Ul  = AIChn[Uc_Chn].chl_value1; 
            Ulr = AIChn[Uc_Chn].chla_fundamental_real;
            Uli = AIChn[Uc_Chn].chla_fundamental_imaginary;
            break;
        case 3:
            Ulr = AIChn[Ua_Chn].chla_fundamental_real - AIChn[Ub_Chn].chla_fundamental_real;
            Uli = AIChn[Ua_Chn].chla_fundamental_imaginary - AIChn[Ua_Chn].chla_fundamental_imaginary;
            Ul  = Ulr * Ulr + Uli * Uli; 
            break;
        case 4:
            Ulr = AIChn[Ub_Chn].chla_fundamental_real - AIChn[Uc_Chn].chla_fundamental_real;
            Uli = AIChn[Ub_Chn].chla_fundamental_imaginary - AIChn[Uc_Chn].chla_fundamental_imaginary;
            Ul  = Ulr * Ulr + Uli * Uli;  
            break;
        case 5:
            Ulr = AIChn[Uc_Chn].chla_fundamental_real - AIChn[Ua_Chn].chla_fundamental_real;
            Uli = AIChn[Uc_Chn].chla_fundamental_imaginary - AIChn[Ua_Chn].chla_fundamental_imaginary;
            Ul  = Ulr * Ulr + Uli * Uli; 
            break; 
    }
    if(Ul < 100)
    {
        return;
    }    
//线路抽取电压
    Ux  = AIChn[Ux_Chn].chl_value1;  
    Uxr = AIChn[Ux_Chn].chla_fundamental_real;
    Uxi = AIChn[Ux_Chn].chla_fundamental_imaginary;
//ABCosφ
    Uxr = Uxr * Ulr + Uxi * Uli;
    Uxr = Uxr * Uxr;
//ABCosφ > 0.9AB
    if(Uxr > 0.81 * Ux * Ul && Ux > 100)
    {
        pProtect->pro_reserve7 = TMD_System_Clock;
        pProtect->pro_reserve3 = 0;	
        return;
    } 
//已告警
    if(pProtect->pro_pickup_flag)
        return;

//延时告警
    if(TMD_System_Clock - pProtect->pro_reserve7 >= 6000)
    {
//动作元件
        pProtect->pro_reserve6 = 1; 
        Signal();
        pProtect->pro_reserve3 = 1;			    
        protect_Reclose.pro_reserve3 = 0; 
        pProtect->pro_pickup_flag    = 1;
//////报告
        pReport = &PTl_Report;
// ----------------------------------------------------- //
//SOE		
        pSoe = &pReport->pro_report_soe;
   //------------------------------------------------//		    	
        pSoe->Relative_Time = pProtect->pro_reserve5;
        READ_DEC_TIME(&pSoe->Year);
//动作值
        pProtect->pro_run_data      =    PTl_rundata; 
        pValue = pReport->pro_report_data;
   //------------------------------------------------// 
        pValue -> value_measure     =       Ux;
        pValue++; 
   //------------------------------------------------//
        pReport->mmi_flag = MMIDISPLAY + MMIPICKUP;
        Fill_Report(pReport); 
        pProtect->pro_run_data      =    PT_rundata;   
    }    	
}	
 
 	 

⌨️ 快捷键说明

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