Smart_Report/CheckMultiDevice.py

186 lines
13 KiB
Python
Raw Normal View History

2025-04-17 14:15:10 +08:00
import Self_defined_functions as SDF
def Check_Multi_MTF_LwOvrCrrnt_Time(Device_ID,Preset_all,Delta_T,DeviceList_dict,checked_preset,checked_fail_reason):
sx_list = {}
for ID, device_type in DeviceList_dict.items():
if device_type == 6 or device_type == 4 or device_type == 2: # 只检查动力变、馈线、并补
preset_time_max_dict = {key: value for key, value in Preset_all[ID].items() if '时限' in key and value is not None}
preset_time_max = max(preset_time_max_dict.values())
sx_list.update({ID:preset_time_max})
final_max = max(sx_list.values())
if not all(isinstance(x, (int, float)) for x in [final_max, Preset_all[Device_ID]['低压侧a相过电流动作时限'], Preset_all[Device_ID]['低压侧b相过电流动作时限'], Delta_T]):
reason = '输入参数必须为数字类型'
checked_preset, checked_fail_reason = SDF.checkPresetFlag('低压侧a相过电流动作时限', 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 Preset_all[Device_ID]['低压侧a相过电流动作时限'] >= final_max + Delta_T:
checked_preset,checked_fail_reason = SDF.checkPresetFlag('低压侧a相过电流动作时限',1,checked_preset,checked_fail_reason)
checked_preset,checked_fail_reason = SDF.checkPresetFlag('低压侧b相过电流动作时限',1,checked_preset,checked_fail_reason)
else:
reason = '主变低压侧过流时限应大于各支路投入的所有保护元件时限的最大值+'+str(Delta_T)+'秒。'
checked_preset,checked_fail_reason = SDF.checkPresetFlag('低压侧a相过电流动作时限',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)
def Check_Multi_Feeder_Rcls_Time(Device_ID,Preset_all,DeviceList_dict,checked_preset,checked_fail_reason):
sx_list = {}
for ID, device_type in DeviceList_dict.items():
if device_type == 5: # 只检查测距
preset_time_max_dict = {key: value for key, value in Preset_all[ID].items() if '重合闸时间' in key and value is not None}
preset_time_max = max(preset_time_max_dict.values())
sx_list.update({ID:preset_time_max})
final_max = max(sx_list.values())
if not all(isinstance(x, (int, float)) for x in [final_max, Preset_all[Device_ID]['重合闸时限']]):
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(final_max,Preset_all[Device_ID]['重合闸时限']):
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_Multi_Dist_OvrCrrnt_Crrnt(Device_ID,Preset_all,DeviceList_dict,checked_preset,checked_fail_reason):
sx_list = {}
for ID, device_type in DeviceList_dict.items():
if device_type == 2: # 只检查馈线
preset_time_min_dict = {key: value for key, value in Preset_all[ID].items() if '过电流动作电流' in key and value is not None}
preset_time_min = min(preset_time_min_dict.values())
sx_list.update({ID:preset_time_min})
final_min = min(sx_list.values())
if not all(isinstance(x, (int, float)) for x in [final_min, Preset_all[Device_ID]['低压启动过电流|电流值']]):
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(final_min,Preset_all[Device_ID]['低压启动过电流|电流值']):
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_Multi_Dist_Dlt_Crrnt(Device_ID,Preset_all,DeviceList_dict,checked_preset,checked_fail_reason):
sx_list = {}
for ID, device_type in DeviceList_dict.items():
if device_type == 2: # 只检查馈线
preset_time_min_dict = {key: value for key, value in Preset_all[ID].items() if '电流增量动作电流' in key and value is not None}
preset_time_min = min(preset_time_min_dict.values())
sx_list.update({ID:preset_time_min})
final_min = min(sx_list.values())
if not all(isinstance(x, (int, float)) for x in [final_min, Preset_all[Device_ID]['电流增量|电流值']]):
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(final_min,Preset_all[Device_ID]['电流增量|电流值']):
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_Multi_Dist_Dlst_Rsstnc(Device_ID,Preset_all,DeviceList_dict,checked_preset,checked_fail_reason):
sx_list = {}
for ID, device_type in DeviceList_dict.items():
if device_type == 2: # 只检查馈线
preset_time_max_dict = {key: value for key, value in Preset_all[ID].items() if '电阻' in key and value is not None}
preset_time_max = max(preset_time_max_dict.values())
sx_list.update({ID:preset_time_max})
final_max = max(sx_list.values())
if not all(isinstance(x, (int, float)) for x in [final_max, Preset_all[Device_ID]['阻抗启动元件|电阻值']]):
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(final_max,Preset_all[Device_ID]['阻抗启动元件|电阻值']):
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_Multi_Dist_Dlst_Rctnc(Device_ID,Preset_all,DeviceList_dict,StationFlag,PwrMthd,PwrFlag,checked_preset,checked_fail_reason):
sx_list_1 = {}
sx_list_2 = {}
sx_list_3 = {}
for ID, device_type in DeviceList_dict.items():
if device_type == 2: # 只检查馈线
preset_time_max_dict_1 = {key: value for key, value in Preset_all[ID].items() if 'Ⅰ段电抗' in key and value is not None}
preset_time_max_1 = max(preset_time_max_dict_1.values())
preset_time_max_dict_2 = {key: value for key, value in Preset_all[ID].items() if 'Ⅱ段电抗' in key and value is not None}
preset_time_max_2 = max(preset_time_max_dict_2.values())
preset_time_max_dict_3 = {key: value for key, value in Preset_all[ID].items() if 'Ⅲ段电抗' in key and value is not None}
preset_time_max_3 = max(preset_time_max_dict_3.values())
sx_list_1.update({ID:preset_time_max_1})
sx_list_2.update({ID:preset_time_max_2})
sx_list_3.update({ID:preset_time_max_3})
max_value = float('-inf')
if StationFlag == 1:
if PwrMthd == 1:
if PwrFlag == 1:
for key in sx_list_1.keys():
# 比较当前键在两个字典中的值,并更新最大值
max_value = max(max_value, sx_list_1[key], sx_list_2[key])
if PwrFlag == 2:
for key in sx_list_1.keys():
# 比较当前键在两个字典中的值,并更新最大值
max_value = max(max_value, sx_list_1[key], sx_list_2[key])
if PwrMthd == 2:
if PwrFlag == 1:
for key in sx_list_1.keys():
# 比较当前键在两个字典中的值,并更新最大值
max_value = max(max_value, sx_list_1[key], sx_list_2[key])
if PwrFlag == 2:
for key in sx_list_1.keys():
# 比较当前键在两个字典中的值,并更新最大值
max_value = max(max_value, sx_list_1[key], sx_list_2[key])
if PwrMthd == 3:
if PwrFlag == 1:
for key in sx_list_2.keys():
# 比较当前键在两个字典中的值,并更新最大值
max_value = max(max_value, sx_list_2[key])
if PwrFlag == 2:
for key in sx_list_3.keys():
# 比较当前键在两个字典中的值,并更新最大值
max_value = max(max_value, sx_list_3[key])
if StationFlag == 2:
if PwrMthd == 3:
if PwrFlag == 1:
for key in sx_list_1.keys():
# 比较当前键在两个字典中的值,并更新最大值
max_value = max(max_value, sx_list_1[key])
if PwrFlag == 2:
for key in sx_list_2.keys():
max_value = max(max_value, sx_list_2[key])
# 比较当前键在两个字典中的值,并更新最大值
final_max = max_value
if not all(isinstance(x, (int, float)) for x in [final_max, Preset_all[Device_ID]['阻抗启动元件|电抗值']]):
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(final_max,Preset_all[Device_ID]['阻抗启动元件|电抗值']):
checked_preset,checked_fail_reason = SDF.checkPresetFlag('阻抗启动元件|电抗值',1,checked_preset,checked_fail_reason)
elif PwrMthd == 3 and PwrFlag == 2:
reason = '测距装置的距离启动元件电抗值应和距离III段得电抗值相同'
checked_preset,checked_fail_reason = SDF.checkPresetFlag('阻抗启动元件|电抗值',2,checked_preset,checked_fail_reason,FailReason=reason)
else:
reason = '测距装置的距离启动元件电抗值应和距离II段得电抗值相同'
checked_preset,checked_fail_reason = SDF.checkPresetFlag('阻抗启动元件|电抗值',2,checked_preset,checked_fail_reason,FailReason=reason)
return(checked_preset,checked_fail_reason)
def Check_Multi_Dist_LsVltg_Vltg(Device_ID,Preset_all,DeviceList_dict,StationFlag,PwrMthd,PwrFlag,checked_preset,checked_fail_reason):
sx_list = {}
for ID, device_type in DeviceList_dict.items():
if device_type == 2: # 只检查馈线
preset_time_max_dict = {key: value for key, value in Preset_all[ID].items() if '失压动作电压' in key and value is not None}
preset_time_max = max(preset_time_max_dict.values())
sx_list.update({ID:preset_time_max})
final_max = max(sx_list.values())
if not all(isinstance(x, (int, float)) for x in [final_max, Preset_all[Device_ID]['失压|电压值']]):
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(final_max,Preset_all[Device_ID]['失压|电压值']):
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)