📄 protectzero_seq1.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 + -