Smart_Report/CheckFeeder.py

180 lines
15 KiB
Python
Raw Permalink Normal View History

2025-04-17 14:15:10 +08:00
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