📄 protecttpo_reclosing.c
字号:
pValue->value_calculate_style = CHL_FOURIER1_;
pValue->pvalue_dimension = "V";
pValue->value_calculate_coefficient = CHL_FOURIER_CURRENT;
// pValue->value_measure = Ia_Value;
pValue->value_index_number = pReport->pro_report_data_number;
pValue++;
pReport->pro_report_data_number++;
//------------------------------------------------//
pValue->pvalue_name = (CHAR *)strcpy(pValue->value_name,"线路电压");
pValue->pvalue_alias = "Ux";
pValue->value_calculate_style = CHL_FOURIER1_;
pValue->pvalue_dimension = "V";
pValue->value_calculate_coefficient = CHL_FOURIER_CURRENT;
// pValue->value_measure = Ib_Value;
pValue->value_index_number = pReport->pro_report_data_number;
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;
}
///////////////////////////////////////////
/////////////// 保护执行函数 ////////////////
///////////////////////////////////////////
UNSIGNED Charge_Time;
UNSIGNED CHZ_Delay_Time;
VOID Once_Reclose_Routine(PROTECT *ptr)
{
PROTECT *pProtect;
SETTING *pSets;
SOE *pSoe;
VALUE *pValue;
JUMPER *pJumper;
TIME *pTime;
INT SetZoneNum;
float Time_Set,Voltage_Set,Angle_Set,Mode_Set;
float Ua,Ub,Uc,Ia_Value,Ib_Value,Ic_Value,Um;
float Ux,Angle_Value;
UNSIGNED Syn_Type,i;
extern float Uab,Ubc,Uca;
static UNSIGNED Syn_Time;
static UNSIGNED Twb = 0,Hwb = 0,Change_Flag = 0;
UNSIGNED *ACC_Flag,*Reclose_Flag,*Charge_Flag,*ACC_Time;
extern unsigned Reclosing_Charge_Flag;
extern PROTECT protect_PT;
extern CHECK ControlTest_Check;
// ----------------------------------------------------- //
pProtect = ptr;
//指针赋值
ACC_Flag = &pProtect->pro_reserve1;//加速标
Reclose_Flag = &pProtect->pro_reserve2;//重合闸标
Charge_Flag = &pProtect->pro_reserve3;//充电标
ACC_Time = &pProtect->pro_reserve4;//加速时间
//充电状态
Reclosing_Charge_Flag = *Charge_Flag;
//////取定值
// ----------------------------------------------------- //
//定值区号
SetZoneNum = iLONC_SetZoneNum;
pSets = pProtect->pro_setting;
//时间
Time_Set = pSets->set_value_zone[SetZoneNum];
pSets++;
//无压值
Voltage_Set = pSets->set_value_zone[SetZoneNum];
pSets++;
//重合方式
Mode_Set = pSets->set_value_zone[SetZoneNum];
pSets++;
//重合Ux相别
Syn_Type = pSets->set_value_zone[SetZoneNum];
pSets++;
//////实时数据
// ----------------------------------------------------- //
//数据通道
Ia_Value = AIChn[PIa_Chn].chl_value1;
Ib_Value = AIChn[PIb_Chn].chl_value1;
Ic_Value = AIChn[PIc_Chn].chl_value1;
Ua = AIChn[Ua_Chn].chl_value1;
Ub = AIChn[Ub_Chn].chl_value1;
Uc = AIChn[Uc_Chn].chl_value1;
Ux = AIChn[Ux_Chn].chl_value1;
//------------------------------------------------//
//数据传递
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++;
// A相电压
pValue->value_measure = Ua;
pValue++;
// B相电压
pValue->value_measure = Ub;
pValue++;
// C相电压
pValue->value_measure = Uc;
pValue++;
// 线路电压
pValue->value_measure = Ux;
pValue++;
//母线电压
switch(Syn_Type)
{
case 0:Um = Ua;break;
case 1:Um = Ub;break;
case 2:Um = Uc;break;
case 3:Um = Uab;break;
case 4:Um = Ubc;break;
case 5:Um = Uca;break;
}
//////保护逻辑
// ----------------------------------------------------- //
//压板指针
pProtect->pro_jumper = Reclose_jumper;
pJumper = pProtect->pro_jumper;
//清加速标志
if(TMD_System_Clock - *ACC_Time > 3000)
*ACC_Flag = 0;
//保护标志
if(DIChn[HW].state) //重合闸用
{
Hwb = 1;
Change_Flag = 0;
}
else if(Hwb == 1) //合位变跳位
{
Hwb = 0;
}
if(DIChn[TW].state) //加速保护投3秒用
{
if(!Twb)
{
Change_Flag = 1;
pProtect->pro_reserve5 = CHZ_Delay_Time;
}
Twb = 1;
}
else if(Twb == 1) //跳位变合位
{
Twb = 0;
*ACC_Flag = 1;//加速标
*ACC_Time = TMD_System_Clock;//加速时间
Charge_Time = TMD_System_Clock;
}
//保护退
if(!(DOChn[BSJ].state))return;
if(!pJumper->jum_status)
{
*Reclose_Flag = 0;//重合闸标
*Charge_Flag = 0;//充电标
Charge_Time = TMD_System_Clock;
return;
}
i = DIChn[THWXN].state || DIChn[SDTZ].state ||DIChn[BSCHZ].state || protect_PT.pro_reserve1 ||ControlTest_Check.pickup_flag;
if(i) //放电条件
{
*Charge_Flag = 0;//充电标
Charge_Time = TMD_System_Clock;
return;
}
if(!*Charge_Flag && DIChn[HW].state) //未充电且合位
{
if(TMD_System_Clock - Charge_Time <= CHRG_TIME)
return;
*Charge_Flag = 1;//充电标
*Reclose_Flag = 0;
}
Charge_Time = TMD_System_Clock;
//无跳变
if(!Change_Flag)
return;
//未充电
if(!*Charge_Flag)
{
Change_Flag = 0; //清变位标
return;
}
//有电流
if(Ia_Value > 0.09 || Ib_Value > 0.09 || Ic_Value > 0.09)
{
if(TMD_System_Clock - pProtect->pro_reserve5 > 20)
{
CHZ_Delay_Time = TMD_System_Clock - 20;
}
if(TMD_System_Clock - pProtect->pro_reserve5 > 10000)
{
*Charge_Flag = 0;
Change_Flag = 0;
}
return;
}
//启动重合
i = (UNSIGNED)(Mode_Set + 0.1);
switch(i)
{
case 0:
if(!ptr->pro_startup_flag)
{
ptr->pro_startup_flag = 1;
Start_up();
return;
}
if(TMD_System_Clock - CHZ_Delay_Time <= Time_Set*1000)//延时未到
return;
if(DOChn[HZJ].state)
return;
StartClose(ptr,&Change_Flag,Um,Ux);
break;
case 1:
if(Ux >= Voltage_Set)
{
CHZ_Delay_Time = TMD_System_Clock;
if(TMD_System_Clock - pProtect->pro_reserve5 > 10000)
{
*Charge_Flag = 0;
Change_Flag = 0; //清变位标
ptr->pro_startup_flag = 0;
}
return;
}
if(!ptr->pro_startup_flag)
{
ptr->pro_startup_flag = 1;
Start_up();
return;
}
if(TMD_System_Clock - CHZ_Delay_Time <= Time_Set * 1000)//延时未到
return;
if(DOChn[HZJ].state)
return;
StartClose(ptr,&Change_Flag,Um,Ux);
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -