180 lines
15 KiB
Python
180 lines
15 KiB
Python
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 |