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

📄 protectzero_seq1.c

📁 电力系统中的保护装置全部代码
💻 C
字号:
/********************************************************************************/
/*                                                                              */
/* 程序名:							                */
/*                                                                              */
/*      Zero_seq1.C		                               		        */
/*                                                                              */
/* 功能:	                  		                           		*/
/*                                                                              */
/*                                                                              */
/********************************************************************************/

#include        "BaseVariable.h" 
#include	"ProZero1.h"
/*****************************************/

///////////////////////////////////////////
////////////////保护初始化函数///////////////
///////////////////////////////////////////

VOID    Zero_I_Initialize(PROTECT *ptr)
{
PROTECT         *pProtect;
SETTING         *pSets;
SOE             *pSoe;
VALUE           *pValue;
JUMPER          *pJumper; 
REPORT	        *pReport;
int i;

// ----------------------------------------------------- // 
//保护结构体指针赋值
    pProtect = ptr;            
//保护缓冲区指针赋值
    pProtect->pro_jumper      =    Zero1_jumper;
    pProtect->pro_setting     =    Zero1_setting;		
    pProtect->pro_run_data    =    Zero1_rundata;
//保护ID号
    pProtect->pro_id = PRO_Total_Protect;
//保护装置名
    pProtect->ppro_device_name = "WXH-821";     
//保护名
    pProtect->ppro_name = "零序电流保护";
//跳闸位
    pProtect->pro_trip = 0x1;

//////模拟通道  
// ----------------------------------------------------- //
//相电流                       	
    pProtect->pro_analog_channel[0]    =    PI0_Chn;
    pProtect->pro_analog_channel[1]    =    U0_Chn;
        
//////压板
// ----------------------------------------------------- //
//压板个数
    pProtect->pro_jumper_number    =    0;
//指针赋值            
    pJumper = pProtect->pro_jumper;  
//ID号
    pJumper->pro_id     =    pProtect -> pro_id;	
//序号
    pJumper->jum_id     =    pProtect -> pro_jumper_number;                                         
//INF
    pJumper->jum_inf    =    184;   
//CONTROLINF
    pJumper->jum_ctrl   =    42;   //modify 6.11                                        
//压板名称
    pJumper->pjum_name     =    "零序电流投退";
    pJumper->pjum_alias    =    "LX";
//压板状态
    pJumper->jum_status    =    1; 
//赋值增量
    pJumper++;  
    pProtect -> pro_jumper_number++;

//////定值 
// ----------------------------------------------------- //
//定值个数                        
    pProtect->pro_setting_number = 0;
    pSets = pProtect->pro_setting;                       
   //------------------------------------------------//
//电流      
    pSets->pro_id    =    pProtect->pro_id;       
    pSets->set_id    =    ++(pProtect->pro_setting_number);
    pSets->pset_name = (CHAR *)strcpy(pSets->set_name,"零序电流值");                                                 
    pSets->pset_alias 	       = "I0zd";	                                                                               
    pSets->pset_dimension      =    "A";
    pSets->set_lower_limit     =    0.2;
    pSets->set_high_limit      =    20;
    pSets->set_calculate_style = CHL_FOURIER1_;
    pSets->set_calculate_coefficient = CHL_CONSTANT_1; 
    for(i=0;i<SET_ZONE;i++)
    pSets->set_value_zone[i]   =    0.25*CHL_CONSTANT_1; 
    pSets++;
   //------------------------------------------------//
//时限      
    pSets->pro_id    =    pProtect->pro_id;       
    pSets->set_id    =    ++(pProtect->pro_setting_number);
    pSets->pset_name = (CHAR *)strcpy(pSets->set_name,"零序时间值");                                                 
    pSets->pset_alias          =    "T0";	                                                                           
    pSets->pset_dimension      =    "S";
    pSets->set_lower_limit     =    0.00;
    pSets->set_high_limit      =    100.0;
    pSets->set_calculate_style =    CHL_MUL_;
    pSets->set_calculate_coefficient = CHL_CONSTANT_1; 
    for(i=0;i<SET_ZONE;i++)
    pSets->set_value_zone[i]   =    2.0*CHL_CONSTANT_1;
    pSets++;                                                      
                                                       
//////保护投退控制字
// ----------------------------------------------------- //	
    pSets->pro_id    =    pProtect->pro_id;       
    pSets->set_id    =    ++(pProtect->pro_setting_number);
    pSets->pset_name = (CHAR *)strcpy(pSets->set_name,"跳闸控制字");
    pSets->pset_alias          =    "L0t";                                                  
    pSets->pset_dimension      =    " ";
    pSets->set_lower_limit     =    0.00;
    pSets->set_high_limit      =    1.00;
    pSets->set_calculate_style =    MODE_;
    pSets->set_calculate_coefficient = CHL_CONSTANT_1;
    for(i=0;i<SET_ZONE;i++)
    pSets->set_value_zone[i]   =    1.0*CHL_CONSTANT_1; 
    pSets++;

//////实时参数
// ----------------------------------------------------- //
    pProtect->pro_run_data_number    =    0;
    pValue    =    pProtect->pro_run_data;
   //------------------------------------------------//
    pValue->value_index_number    =    ++(pProtect->pro_run_data_number); 	
    pValue->pvalue_name = (CHAR *)strcpy(pValue->value_name,"零序电流");       	                                  
    pValue->pvalue_alias     =    "I0";	
    pValue->value_calculate_style =   	CHL_FOURIER1_;  
    pValue->pvalue_dimension      =    "A";  
    pValue->value_calculate_coefficient = 1; 
    pValue->value_measure    =    0.0; 
    pValue++;
   //------------------------------------------------//
    pValue->value_index_number    =    ++(pProtect->pro_run_data_number); 
    pValue->pvalue_name = (CHAR *)strcpy(pValue->value_name,"零序电压");       	                                  
    pValue->pvalue_alias     =    "U0";	
    pValue->value_calculate_style =   	CHL_FOURIER1_;  
    pValue->pvalue_dimension      =    "V";  
    pValue->value_calculate_coefficient = 1; 
    pValue->value_measure    =    0.0;
    pValue++;
   //------------------------------------------------//
    pValue->value_index_number    =    ++(pProtect->pro_run_data_number); 
    pValue->pvalue_name = (CHAR *)strcpy(pValue->value_name,"A相电压");       	                                  
    pValue->pvalue_alias     =    "Ua";	
    pValue->value_calculate_style =   	CHL_FOURIER1_;  
    pValue->pvalue_dimension      =    "V";  
    pValue->value_calculate_coefficient = 1; 
    pValue->value_measure    =    0.0;
    pValue++;

   //------------------------------------------------//
    pValue->value_index_number    =    ++(pProtect->pro_run_data_number); 
    pValue->pvalue_name = (CHAR *)strcpy(pValue->value_name,"B相电压");       	                                  
    pValue->pvalue_alias     =    "Ub";	
    pValue->value_calculate_style =   	CHL_FOURIER1_;  
    pValue->pvalue_dimension      =    "V";  
    pValue->value_calculate_coefficient = 1; 
    pValue->value_measure    =    0.0;
    pValue++;

   //------------------------------------------------//
    pValue->value_index_number    =    ++(pProtect->pro_run_data_number); 
    pValue->pvalue_name = (CHAR *)strcpy(pValue->value_name,"C相电压");       	                                  
    pValue->pvalue_alias     =    "Uc";	
    pValue->value_calculate_style =   	CHL_FOURIER1_;  
    pValue->pvalue_dimension      =    "V";  
    pValue->value_calculate_coefficient = 1; 
    pValue->value_measure    =    0.0;
    pValue++;


//////报告
// ----------------------------------------------------- //
    pReport = &Zero1_Report;
    pReport->pro_report_flag = 2;
//SOE				    	
    pSoe = &pReport->pro_report_soe;
   //------------------------------------------------//            	  	
    pSoe->pSOE_name = "零序跳闸"; 
    pSoe->SOE_Inf = 54;
    pSoe->DPI = 2; 
//动作值
    pReport->pro_report_data_number = 0;
    pReport->pro_report_data = Zero1_reportdata;
    pValue = pReport->pro_report_data;
   //------------------------------------------------// 
    pValue->pvalue_name = (CHAR *)strcpy(pValue->value_name,"零序动作电流");
    pValue->pvalue_alias     =    "I0";    			
    pValue->value_calculate_style = CHL_FOURIER1_;
    pValue->pvalue_dimension  =       "A";
    pValue->value_calculate_coefficient = CHL_FOURIER_CURRENT;
//    pValue->value_measure     =       I0_Value;
    pValue->value_index_number=	0;
    pValue++; 
    pReport->pro_report_data_number++; 
   //------------------------------------------------//
    pValue->pvalue_name = (CHAR *)strcpy(pValue->value_name,"零序动作电压");
    pValue->pvalue_alias     =    "U0";       	                     	
    pValue->value_calculate_style = CHL_FOURIER1_;
    pValue->pvalue_dimension  =       "V";
    pValue->value_calculate_coefficient = CHL_FOURIER_CURRENT;
//    pValue->value_measure     =       U0_Value;
    pValue->value_index_number=	1;
    pValue++;
    pReport->pro_report_data_number++;   
   //------------------------------------------------// 
//报告通道
    //pReport->pro_channel_number = 1;      
   //------------------------------------------------//
   
//////保护私用变量    
// ----------------------------------------------------- // 
    pProtect->pro_startup_flag    =    0;
    pProtect->pro_pickup_flag     =    0;	
    pProtect->pro_reserve1    =    0; 
    pProtect->pro_reserve4    =    TMD_System_Clock; 
   
}

///////////////////////////////////////////
/////////////// 保护执行函数 ////////////////
///////////////////////////////////////////

VOID    Zero_I_Routine(PROTECT *ptr)
{
PROTECT         *pProtect; 
SETTING         *pSets; 
SOE             *pSoe; 
VALUE           *pValue;
REPORT          *pReport;
JUMPER          *pJumper; 
TIME            *pTime;
INT             SetZoneNum;

float           I0_Value,U0_Value,f1,f2;
float           Current_Set,Time_Set,Mode_Set;
// ----------------------------------------------------- // 

    pProtect = ptr;

//////取定值
// ----------------------------------------------------- // 
//定值区号
    SetZoneNum    =    iLONC_SetZoneNum;
    pSets         =    pProtect->pro_setting; 
//零序电流          
    Current_Set   =    pSets->set_value_zone[SetZoneNum];
    pSets++;
//时间定值        
    Time_Set      =    pSets->set_value_zone[SetZoneNum];
    pSets++;
//跳闸告警        
    Mode_Set      =    pSets->set_value_zone[SetZoneNum];
    pSets++;
    
    pProtect->pro_trip = Mode_Set;
//////实时数据
// ----------------------------------------------------- // 
//数据通道
    I0_Value = AIChn[PI0_Chn].chl_value1;
    
    f1 = (AIChn[Ua_Chn].chla_fundamental_real + 
         AIChn[Ub_Chn].chla_fundamental_real +
         AIChn[Uc_Chn].chla_fundamental_real) / 3;
    f2 = (AIChn[Ua_Chn].chla_fundamental_imaginary +
          AIChn[Ub_Chn].chla_fundamental_imaginary +
          AIChn[Uc_Chn].chla_fundamental_imaginary) / 3;

    U0_Value = f1 * f1 + f2 * f2;
   //------------------------------------------------//
//数据传递
    pValue   =  pProtect->pro_run_data;  
   //------------------------------------------------// 
// 零序电流 
    pValue->value_measure   =	I0_Value;
    pValue++;        
// 零序电压 
    pValue->value_measure 	=	U0_Value;
    pValue++;           
             
    pValue->value_measure 	=	AIChn[Ua_Chn].chl_value1;
    pValue++;           
             
    pValue->value_measure 	=	AIChn[Ub_Chn].chl_value1;
    pValue++;           
             
    pValue->value_measure 	=	AIChn[Uc_Chn].chl_value1;
    pValue++;           
             
    
//////保护逻辑
// ----------------------------------------------------- // 

//压板指针
    pProtect->pro_jumper = Zero1_jumper;
    pJumper = pProtect->pro_jumper; 

//保护退
    if(!pJumper->jum_status)				
    {
        ClearFlag(ptr);
        pProtect->pro_reserve6 = 0;
        return; 
    }

//保护投
//电流元件
    if(I0_Value < Current_Set)
    {
        NoStartup(ptr);
	pProtect->pro_reserve5 = TMD_System_Clock;
        if(ptr->pro_startup_flag == 0)       
            pProtect->pro_reserve6 = 0;        
        return;
           
    }      

//去干扰
    if(EraseBurr(ptr))
        return;
		
//启动
    if(StartPro(pProtect))
        return;

//时间元件
    if(TimeWait(pProtect,Time_Set)) 
        return;

//已告警	        	
    if(pProtect->pro_reserve6)
        return;	        	

//动作元件
    pProtect->pro_reserve5 = TMD_System_Clock - pProtect->pro_reserve5;
    pProtect->pro_pickup_flag = 1;

//报告
    pReport = &Zero1_Report;
//SOE				    	
    pSoe = &pReport->pro_report_soe;
    pSoe->pSOE_name = "零序电流跳闸"; 
    strcpy(pSoe->SOE_name,pSoe->pSOE_name);
    pSoe->SOE_Inf = 54;
    pSoe->DPI = 2;                 	  	
   //------------------------------------------------// 
    pSoe->Relative_Time = pProtect->pro_reserve5;
    READ_DEC_TIME(&pSoe->Year);
//    pSoe->Fault_Number = SOENumber++;
    
//动作值
    pValue = pReport->pro_report_data;
   //------------------------------------------------// 
    pValue -> value_measure     =       I0_Value;
    pValue++; 

    pValue -> value_measure     =       U0_Value;
    pValue++;
   //------------------------------------------------//
    if(!Mode_Set)
    { 
        pSoe->pSOE_name = "零序电流告警"; 
        strcpy(pSoe->SOE_name,pSoe->pSOE_name); 
        pSoe->SOE_Inf = 218;
        pSoe->DPI = 2;
        Signal(); 
        pProtect->pro_reserve6 = 1;
    }
    else
    {
    	Qdj();			//跳闸子程序
    	Tzj();
    }	            
    pReport->mmi_flag = MMIDISPLAY + MMIPICKUP;
    Fill_Report(pReport);

}

⌨️ 快捷键说明

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