📄 pt.c
字号:
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 + -