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 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