📄 protectlflsh_protect.c
字号:
//频率
pValue->pvalue_name = (CHAR *)strcpy(pValue -> value_name,"动作频率");
pValue->pvalue_alias = "f";
pValue->value_calculate_coefficient = 1.0;
pValue->value_calculate_style = CHL_MUL_;
pValue->pvalue_dimension = "Hz";
// pValue->value_measure = Frenq_Value;
pValue->value_index_number = pReport->pro_report_data_number;
pReport->pro_report_data_number++;
pValue++;
//------------------------------------------------//
//报告通道
//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 LFLSH_Routine(PROTECT *ptr)
{
PROTECT *pProtect;
SETTING *pSets;
SOE *pSoe;
VALUE *pValue;
REPORT *pReport;
JUMPER *pJumper;
TIME *pTime;
INT SetZoneNum;
float Ia_Value,Ib_Value,Ic_Value;
float Frenq_Set,Time_Set,Voltage_Set,DeltaF_Set,DeltaF_Plunge;
extern float Uab,Ubc,Uca;
extern float *CalculatePtr;
extern UNSIGNED SampleInterval;
static float Frenq_Value = 50.0,Start_Frenq;
static UNSIGNED Start_Flag,Start_Ptr,DF_Time,DFLock_Num,DFLock_Flag;
UNSIGNED i;
UNSIGNED Delta_Time;
float Delta_Frenq;
extern PROTECT protect_Reclose;
UNSIGNED *Charge_Flag;
// ----------------------------------------------------- //
pProtect = ptr;
//指针赋值
Charge_Flag = &protect_Reclose.pro_reserve3;//充电标
//////取定值
// -----------------------------------------------------//
//定值区号
SetZoneNum = iLONC_SetZoneNum;
pSets = pProtect->pro_setting;
//动作频率定值
Frenq_Set = pSets->set_value_zone[SetZoneNum];
pSets++;
//低频减载动作时限
Time_Set = pSets->set_value_zone[SetZoneNum];
pSets++;
//低频减载电压闭锁定值
Voltage_Set = pSets->set_value_zone[SetZoneNum];
pSets++;
//滑差闭锁定值
DeltaF_Set = pSets->set_value_zone[SetZoneNum];
pSets++;
//滑差闭锁控制字
DeltaF_Plunge = pSets->set_value_zone[SetZoneNum];
pSets++;
//////实时数据
// ----------------------------------------------------- //
//数据通道
Frenq_Value = samp_f;
Ia_Value = AIChn[PIa_Chn].chl_value1;
Ib_Value = AIChn[PIb_Chn].chl_value1;
Ic_Value = AIChn[PIc_Chn].chl_value1;
//------------------------------------------------//
//数据传递
pValue = pProtect->pro_run_data;
//------------------------------------------------//
// 频率
pValue->value_measure = Frenq_Value;
pValue++;
// A相电流
pValue->value_measure = Ia_Value;
pValue++;
// B相电流
pValue->value_measure = Ib_Value;
pValue++;
// C相电流
pValue->value_measure = Ic_Value;
pValue++;
pValue->value_measure = Uab;
pValue++;
pValue->value_measure = Ubc;
pValue++;
pValue->value_measure = Uca;
pValue++;
//////保护逻辑
// ----------------------------------------------------- //
//压板指针
pProtect->pro_jumper = LF_jumper;
pJumper = pProtect->pro_jumper;
//保护退
if(!pJumper->jum_status)
{
ClearFlag(ptr);
DFLock_Num = 0;
DFLock_Flag = 0;
Start_Flag = 0;
return;
}
//保护投
if(samp_f > 45.00 && samp_f < 50.5)
Frenq_Value = samp_f;
else
return;
if(Frenq_Value < START_FRENQ)
{
if(Start_Flag == 0) //滑差计时起点,取频率
{
DF_Time = 0;
Start_Ptr = (UNSIGNED)CalculatePtr;
Start_Frenq = Frenq_Value;
Start_Flag = 1;
DFLock_Num = 0;
DFLock_Flag = 0;
}
}
else
{
Start_Flag = 0;
DFLock_Num = 0;
DFLock_Flag = 0;
NoStartup(ptr);
pProtect->pro_reserve4 = TMD_System_Clock;
pProtect->pro_reserve5 = TMD_System_Clock;
return;
}
//滑差闭锁元件
if(DeltaF_Plunge)
{
if(DFLock_Flag)return;//永久闭锁
i = (UNSIGNED)CalculatePtr - Start_Ptr;
Start_Ptr = (UNSIGNED)CalculatePtr;
if(i >= AD_OneDataSize - 1) i += AD_OneDataSize - 1;
DF_Time += i;
if(DF_Time > 2 * Sample_Point)
{
Delta_Frenq = Start_Frenq - Frenq_Value;
Delta_Time = DF_Time * SampleInterval;
Delta_Frenq = Delta_Frenq * 10000000.0 / Delta_Time;
}
else
return;
if(Delta_Frenq >= DeltaF_Set)
{
DFLock_Num++;
if(DFLock_Num > 2)
{
DFLock_Num = 0;
DFLock_Flag = 1;
}
return;
}
}
else
DFLock_Flag = 0;
//频率元件
if(Frenq_Value > Frenq_Set || Uab < Voltage_Set)
{
NoStartup(ptr);
pProtect->pro_reserve4 = TMD_System_Clock;
pProtect->pro_reserve5 = TMD_System_Clock;
return;
}
//去干扰
if(EraseBurr(pProtect))
return;
//电流闭锁元件
if(Ia_Value < NO_CURRENT && Ib_Value < NO_CURRENT && Ic_Value < NO_CURRENT)
return;
//启动
if(StartPro(pProtect))
return;
//时间元件
if(TimeWait(pProtect,Time_Set))
return;
//动作元件
pProtect->pro_pickup_flag = 1;
Qdj(); //跳闸子程序
Tzj();
pProtect->pro_reserve5 = TMD_System_Clock - pProtect->pro_reserve5;
*Charge_Flag = 0;
Start_Flag = 0;
DFLock_Num = 0;
DFLock_Flag = 0;
//报告
pReport = &LF_Report;
//SOE
pSoe = &pReport->pro_report_soe;
//------------------------------------------------//
pSoe->Relative_Time = pProtect->pro_reserve5;
READ_DEC_TIME(&pSoe->Year);
// pSoe->Fault_Number = SOENumber++;
//动作值
pValue = pReport->pro_report_data;
//------------------------------------------------//
pValue -> value_measure = Frenq_Value;
pValue++;
//------------------------------------------------//
pReport->mmi_flag = MMIDISPLAY + MMIPICKUP;
Fill_Report(pReport);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -