Smart_Report/CheckFeeder.py
2025-04-17 14:15:10 +08:00

180 lines
15 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Self_defined_functions as SDF
import math
#------------------------------------------------------------------------------------------------------------------------------------
def Check_FDR_PT_Crrnt(pt_mincrrnt,pt_dzcrrnt,checked_preset,checked_fail_reason):
if not all(isinstance(x, (int, float)) for x in [pt_mincrrnt,pt_dzcrrnt]):
reason = '输入参数必须为数字类型'
checked_preset, checked_fail_reason = SDF.checkPresetFlag('低压侧b相过电流动作时限', 2, checked_preset, checked_fail_reason, FailReason=reason)
checked_preset, checked_fail_reason = SDF.checkPresetFlag('高压侧B相过电流动作时限', 2, checked_preset, checked_fail_reason, FailReason=reason)
return checked_preset, checked_fail_reason
if pt_mincrrnt<pt_dzcrrnt:
checked_preset,checked_fail_reason = SDF.checkPresetFlag('PT断线动作电流',1,checked_preset,checked_fail_reason)
checked_preset,checked_fail_reason = SDF.checkPresetFlag('PT断线下限电流',1,checked_preset,checked_fail_reason)
else:
reason = 'PT断线动作电流应大于PT断线下限电流请检查相应定值设置。'
checked_preset,checked_fail_reason = SDF.checkPresetFlag('PT断线动作电流',2,checked_preset,checked_fail_reason,FailReason=reason)
checked_preset,checked_fail_reason = SDF.checkPresetFlag('PT断线下限电流',2,checked_preset,checked_fail_reason,FailReason=reason)
return(checked_preset,checked_fail_reason)
#--------------------------------------------------------------------------------------------------------------------------------------
def Check_FDR_BackAcc_Time(preset,checked_preset,checked_fail_reason):
BackAcc_time = preset['后加速动作时限']
preset_time_max_dict = {key: value for key, value in preset.items() if '时限' in key and value is not None}
if preset_time_max_dict == {} or BackAcc_time is None:
reason = '输入参数错误'
checked_preset,checked_fail_reason = SDF.checkPresetFlag('后加速动作时限',2,checked_preset,checked_fail_reason,FailReason=reason)
return checked_preset,checked_fail_reason
else:
preset_time_max = max(preset_time_max_dict.values())
if BackAcc_time <= preset_time_max:
checked_preset,checked_fail_reason = SDF.checkPresetFlag('后加速动作时限',1,checked_preset,checked_fail_reason)
else:
reason = '后加速动作时限应小于等于其他所有时限,请检查相应定值设置。'
checked_preset,checked_fail_reason = SDF.checkPresetFlag('后加速动作时限',2,checked_preset,checked_fail_reason,FailReason=reason)
return checked_preset,checked_fail_reason
#--------------------------------------------------------------------------------------------------------------------------------------
#def Check_FDR_OvrCrrnt(OvrCrrnt_Sensitivity,checked_preset,checked_fail_reason):
# BackAcc_time = preset['后加速动作时限']
# preset_time_max_dict = {key: value for key, value in preset.items() if '时限' in key and value is not None}
# if preset_time_max_dict == {} or BackAcc_time is None:
# reason = '输入参数错误'
# checked_preset,checked_fail_reason = SDF.checkPresetFlag('后加速动作时限',2,checked_preset,checked_fail_reason,FailReason=reason)
# return checked_preset,checked_fail_reason
# else:
# preset_time_max = max(preset_time_max_dict.values())
# if BackAcc_time <= preset_time_max:
# checked_preset,checked_fail_reason = SDF.checkPresetFlag('后加速动作时限',1,checked_preset,checked_fail_reason)
# else:
# reason = '后加速动作时限应小于等于其他所有时限,请检查相应定值设置。'
# checked_preset,checked_fail_reason = SDF.checkPresetFlag('后加速动作时限',2,checked_preset,checked_fail_reason,FailReason=reason)
# return checked_preset,checked_fail_reason
#--------------------------------------------------------------------------------------------------------------------------------------
def Check_FDR_LwVltg_V(LwVltg_V,LsVltg_V,PT_V,checked_preset,checked_fail_reason):
if not all(isinstance(x, (int, float)) for x in [LwVltg_V,LsVltg_V,PT_V]):
reason = '输入参数必须为数字类型'
checked_preset,checked_fail_reason = SDF.checkPresetFlag('低压启动过电流动作电压',2,checked_preset,checked_fail_reason,FailReason=reason)
return checked_preset,checked_fail_reason
if LwVltg_V > max(LsVltg_V,PT_V):
checked_preset,checked_fail_reason = SDF.checkPresetFlag('低压启动过电流动作电压',1,checked_preset,checked_fail_reason)
else:
reason = '低压启动过电流动作电压应大于PT断线电压和失压保护动作电压请检查相应定值设置。'
checked_preset,checked_fail_reason = SDF.checkPresetFlag('低压启动过电流动作电压',2,checked_preset,checked_fail_reason,FailReason=reason)
return checked_preset,checked_fail_reason
#--------------------------------------------------------------------------------------------------------------------------------------
def Check_FDR_OvrCrrnt_Time(OvrCrrnt_Time,Dist_I_Time,checked_preset,checked_fail_reason):
if not all(isinstance(x, (int, float)) for x in [OvrCrrnt_Time,Dist_I_Time]):
reason = '输入参数必须为数字类型'
checked_preset,checked_fail_reason = SDF.checkPresetFlag('低压启动过电流动作时限',2,checked_preset,checked_fail_reason,FailReason=reason)
return checked_preset,checked_fail_reason
if SDF.are_values_equal_with_tolerance(OvrCrrnt_Time, Dist_I_Time):
checked_preset,checked_fail_reason = SDF.checkPresetFlag('低压启动过电流动作时限',1,checked_preset,checked_fail_reason)
else:
reason = '低压启动过电流保护时限应和距离I段不越区时/距离II段越区时动作时限相等请检查相应定值设置。'
checked_preset,checked_fail_reason = SDF.checkPresetFlag('低压启动过电流动作时限',2,checked_preset,checked_fail_reason,FailReason=reason)
return checked_preset,checked_fail_reason
#--------------------------------------------------------------------------------------------------------------------------------------
def Check_FDR_DeltaCrrnt_Time(DeltaCrrnt_Time,Dist_I_Time,checked_preset,checked_fail_reason):
if not all(isinstance(x, (int, float)) for x in [DeltaCrrnt_Time,Dist_I_Time]):
reason = '输入参数必须为数字类型'
checked_preset,checked_fail_reason = SDF.checkPresetFlag('电流增量动作时限',2,checked_preset,checked_fail_reason,FailReason=reason)
return checked_preset,checked_fail_reason
if SDF.are_values_equal_with_tolerance(DeltaCrrnt_Time, Dist_I_Time):
checked_preset,checked_fail_reason = SDF.checkPresetFlag('电流增量动作时限',1,checked_preset,checked_fail_reason)
else:
reason = '增量保护动作时限应和距离I段不越区时/距离II段越区时动作时限相等请检查相应定值设置。'
checked_preset,checked_fail_reason = SDF.checkPresetFlag('电流增量动作时限',2,checked_preset,checked_fail_reason,FailReason=reason)
return checked_preset,checked_fail_reason
#--------------------------------------------------------------------------------------------------------------------------------------
def Check_FDR_DistanceII_X(Dist_II_X,Dist_I_X,checked_preset,checked_fail_reason):
if not all(isinstance(x, (int, float)) for x in [Dist_II_X,Dist_I_X]):
reason = '输入参数必须为数字类型'
checked_preset,checked_fail_reason = SDF.checkPresetFlag('距离Ⅱ段电抗',2,checked_preset,checked_fail_reason,FailReason=reason)
return checked_preset,checked_fail_reason
if Dist_II_X > Dist_I_X:
checked_preset,checked_fail_reason = SDF.checkPresetFlag('距离Ⅱ段电抗',1,checked_preset,checked_fail_reason)
else:
reason = '距离II段的电抗值应较距离I段更大请检查相应定值设置。'
checked_preset,checked_fail_reason = SDF.checkPresetFlag('距离Ⅱ段电抗',2,checked_preset,checked_fail_reason,FailReason=reason)
return checked_preset,checked_fail_reason
#--------------------------------------------------------------------------------------------------------------------------------------
def Check_FDR_DistanceII_R(Dist_II_R,Dist_I_R,checked_preset,checked_fail_reason):
if not all(isinstance(x, (int, float)) for x in [Dist_II_R,Dist_I_R]):
reason = '输入参数必须为数字类型'
checked_preset,checked_fail_reason = SDF.checkPresetFlag('距离Ⅱ段电阻',2,checked_preset,checked_fail_reason,FailReason=reason)
return checked_preset,checked_fail_reason
if SDF.are_values_equal_with_tolerance(Dist_II_R, Dist_I_R):
checked_preset,checked_fail_reason = SDF.checkPresetFlag('距离Ⅱ段电阻',1,checked_preset,checked_fail_reason)
else:
reason = '距离II段的电抗值应和距离I段相等请检查相应定值设置。'
checked_preset,checked_fail_reason = SDF.checkPresetFlag('距离Ⅱ段电阻',2,checked_preset,checked_fail_reason,FailReason=reason)
return checked_preset,checked_fail_reason
#--------------------------------------------------------------------------------------------------------------------------------------
def Check_FDR_DistanceII_Time(Dist_II_Time,Dist_I_Time,Delta_T,checked_preset,checked_fail_reason):
if not all(isinstance(x, (int, float)) for x in [Dist_II_Time,Dist_I_Time,Delta_T]):
reason = '输入参数必须为数字类型'
checked_preset,checked_fail_reason = SDF.checkPresetFlag('距离Ⅱ段时限',2,checked_preset,checked_fail_reason,FailReason=reason)
return checked_preset,checked_fail_reason
if Dist_II_Time > Dist_I_Time and SDF.are_values_equal_with_tolerance(Dist_II_Time, (Dist_I_Time + Delta_T)):
checked_preset,checked_fail_reason = SDF.checkPresetFlag('距离Ⅱ段时限',1,checked_preset,checked_fail_reason)
else:
reason = '距离II段的动作时限应较距离I段多'+str(Delta_T)+'秒,请检查相应定值设置。'
checked_preset,checked_fail_reason = SDF.checkPresetFlag('距离Ⅱ段时限',2,checked_preset,checked_fail_reason,FailReason=reason)
return checked_preset,checked_fail_reason
#--------------------------------------------------------------------------------------------------------------------------------------
def check_FDR_DistanceX(Preset,checked_preset,checked_fail_reason):
Distance_D_1 = {'第1点距离值': 10, '第2点距离值': 20, '第3点距离值': '傻逼','第4点距离值': 1000}
Distance_X_1 = {'第1点电抗值': 10, '第2点电抗值': 20, '第3点电抗值': 30,'第4点电抗值': 50}
Preset = {'供电臂长度(不含供电线)':100}
Distance_D = {key: value for key, value in Preset.items() if '点距离' in key and value is not None}
Distance_X = {key: value for key, value in Preset.items() if '点电抗' in key and value is not None}
Distance_D_1 = {key: value for key, value in Preset.items() if '点距离' in key}
Distance_X_1 = {key: value for key, value in Preset.items() if '点电抗' in key}
distance_D_keys = [int(key.split('')[0][1:]) for key in Distance_D.keys()]
distance_X_keys = [int(key.split('')[0][1:]) for key in Distance_X.keys()]
if not all(isinstance(x, (int, float)) for x in [Distance_D, Distance_X]):
reason = '输入参数必须为数字类型'
for key in Distance_D_1.keys():
checked_preset,checked_fail_reason = SDF.checkPresetFlag(key,2,checked_preset,checked_fail_reason,FailReason=reason)
for key in Distance_X_1.keys():
checked_preset,checked_fail_reason = SDF.checkPresetFlag(key,2,checked_preset,checked_fail_reason,FailReason=reason)
elif Distance_D == {} or Distance_X == {}:
reason = '输入参数错误 - 定值未键入'
for key in Distance_D_1.keys():
checked_preset,checked_fail_reason = SDF.checkPresetFlag(key,2,checked_preset,checked_fail_reason,FailReason=reason)
for key in Distance_X_1.keys():
checked_preset,checked_fail_reason = SDF.checkPresetFlag(key,2,checked_preset,checked_fail_reason,FailReason=reason)
elif SDF.is_continuous(distance_D_keys) == False or SDF.is_continuous(distance_X_keys) == False:
reason = '输入参数错误 - 距离点数不连续'
for key in Distance_D_1.keys():
checked_preset,checked_fail_reason = SDF.checkPresetFlag(key,2,checked_preset,checked_fail_reason,FailReason=reason)
for key in Distance_X_1.keys():
checked_preset,checked_fail_reason = SDF.checkPresetFlag(key,2,checked_preset,checked_fail_reason,FailReason=reason)
elif SDF.is_increasing(Distance_D) == False or SDF.is_increasing(Distance_X) == False:
reason = '距离值或电抗值非递增'
for key in Distance_D_1.keys():
checked_preset,checked_fail_reason = SDF.checkPresetFlag(key,2,checked_preset,checked_fail_reason,FailReason=reason)
for key in Distance_X_1.keys():
checked_preset,checked_fail_reason = SDF.checkPresetFlag(key,2,checked_preset,checked_fail_reason,FailReason=reason)
elif max(Distance_D.values()) < Preset['供电臂长度(不含供电线)']:
reason = '最远点距离值应超出供电臂长度'
max_key = max(Distance_D, key=Distance_D.get)
checked_preset,checked_fail_reason = SDF.checkPresetFlag(max_key,2,checked_preset,checked_fail_reason,FailReason=reason)
else:
for key in Distance_D_1.keys():
checked_preset,checked_fail_reason = SDF.checkPresetFlag(key,1,checked_preset,checked_fail_reason)
for key in Distance_X_1.keys():
checked_preset,checked_fail_reason = SDF.checkPresetFlag(key,1,checked_preset,checked_fail_reason)
return checked_preset,checked_fail_reason
#--------------------------------------------------------------------------------------------------------------------------------------
def Check_FDR_Reclose_Vltg(Reclose_Vltg,LsVltg_V,PT_V,checked_preset,checked_fail_reason):
if not all(isinstance(x, (int, float)) for x in [Reclose_Vltg,LsVltg_V,PT_V]):
reason = '输入参数必须为数字类型'
checked_preset,checked_fail_reason = SDF.checkPresetFlag('检有压动作电压',2,checked_preset,checked_fail_reason,FailReason=reason)
return checked_preset,checked_fail_reason
if Reclose_Vltg > max(LsVltg_V,PT_V):
checked_preset,checked_fail_reason = SDF.checkPresetFlag('检有压动作电压',1,checked_preset,checked_fail_reason)
else:
reason = '重合闸检有压动作电压应大于PT断线电压和失压保护动作电压请检查相应定值设置。'
checked_preset,checked_fail_reason = SDF.checkPresetFlag('检有压动作电压',2,checked_preset,checked_fail_reason,FailReason=reason)
return checked_preset,checked_fail_reason