import redis import msgpack import Self_defined_functions as sdf YC_MnTrns,YC_Prtct,YC_Dist = sdf.obtainYC_Device() #print(YC_MnTrns) #print(YC_Prtct) #print(YC_Dist) #上下行判断 #没有很好的自动判断方法。先手动输入 list_SX = ['211','213','3','北京'] list_XX = ['212','214','4','上海'] # 在 YC_Dist 的每个键的 value 字典中添加新项 for key, value in YC_Dist.items(): if any(item in key for item in list_SX): value['方向'] = '北京' # 添加新项,你可以根据需要修改新项的键和值 if any(item in key for item in list_XX): value['方向'] = '上海' # 添加新项,你可以根据需要修改新项的键和值 for key, value in YC_Prtct.items(): if any(item in key for item in list_SX): value['方向'] = '北京' # 添加新项,你可以根据需要修改新项的键和值 if any(item in key for item in list_XX): value['方向'] = '上海' # 添加新项,你可以根据需要修改新项的键和值 for key, value in YC_MnTrns.items(): if any(item in key for item in list_SX): value['方向'] = '北京' # 添加新项,你可以根据需要修改新项的键和值 if any(item in key for item in list_XX): value['方向'] = '上海' # 添加新项,你可以根据需要修改新项的键和值 rule1_threshold = 0.001 rule2_threshold = 0.001 #—————————————极性校验1:同一个测量点测量量和保护量相等————————————————————— checked_polarity = {} checked_polarity_reason = {} for key, value in YC_Prtct.items(): former_key = key for key, value in YC_Prtct[former_key].items(): #print(key) if key.find('保护') != -1: temp_cmpr = key.replace('保护','测量') #print(temp_cmpr) if temp_cmpr in YC_Prtct[former_key]: result_key = former_key + ' ' + key result_temp = former_key + ' ' + temp_cmpr diff_value_rule1 = abs(YC_Prtct[former_key][key]-YC_Prtct[former_key][temp_cmpr]) I_valid = max(YC_Prtct[former_key][key],YC_Prtct[former_key][temp_cmpr]) if diff_value_rule1 < rule1_threshold: if result_key in checked_polarity and checked_polarity[result_key] == '极性校验不通过': pass else: checked_polarity[result_key] = '极性校验通过' if result_temp in checked_polarity and checked_polarity[result_temp] == '极性校验不通过': pass else: checked_polarity[result_temp] = '极性校验通过' elif diff_value_rule1 < 1.05 * I_valid and diff_value_rule1 > 0.95 * I_valid: if I_valid == YC_Prtct[former_key][key]: checked_polarity[result_key] = '极性校验不通过' checked_polarity_reason[result_key] = '测量量和保护量不相等,考虑测量CT断线' checked_polarity[result_temp] = '极性校验不通过' checked_polarity_reason[result_temp] = '测量量和保护量不相等,考虑测量CT断线' else: checked_polarity[result_key] = '极性校验不通过' checked_polarity_reason[result_key] = '测量量和保护量不相等,考虑保护CT断线' checked_polarity[result_temp] = '极性校验不通过' checked_polarity_reason[result_temp] = '测量量和保护量不相等,考虑保护CT断线' elif diff_value_rule1 < 2.1 * I_valid and diff_value_rule1 > 1.9 * I_valid: checked_polarity[result_key] = '极性校验不通过' checked_polarity_reason[result_key] = '测量量和保护量不相等,考虑保护CT和测量CT有一反向' checked_polarity[result_temp] = '极性校验不通过' checked_polarity_reason[result_temp] = '测量量和保护量不相等,考虑保护CT和测量CT有一反向' else: checked_polarity[result_key] = '极性校验不通过' checked_polarity_reason[result_key] = '请检查对应的保护和测量CT回路' checked_polarity[result_temp] = '极性校验不通过' checked_polarity_reason[result_temp] = '请检查对应的保护和测量CT回路' #—————————————极性校验2:母线电流平衡关系————————————————————— for key, value in YC_Dist.items(): dist_result = YC_Dist[key]['上行TF电流'] + YC_Dist[key]['下行TF电流'] direction = YC_Dist[key]['方向'] rule2key1 = key for key, value in YC_MnTrns.items(): if YC_MnTrns[key]['方向'] == direction: MnTrns_result = YC_MnTrns[key]['T1相电流'] + YC_MnTrns[key]['T2相电流'] rule2key2 = key break if sdf.are_values_equal_with_tolerance(dist_result,MnTrns_result): result_key1_dist = rule2key1 + ' ' + '上行TF电流' result_key2_dist = rule2key1 + ' ' + '下行TF电流' result_key1_MnTrns = rule2key2 + ' ' + 'T1相电流' result_key2_MnTrns = rule2key2 + ' ' + 'T2相电流' keylist = [result_key1_dist,result_key2_dist,result_key1_MnTrns,result_key2_MnTrns] for val in keylist: if val in checked_polarity and checked_polarity[val] == '极性校验不通过': pass else: checked_polarity[val] = '极性校验通过' else: checked_polarity[val] = '极性校验不通过' checked_polarity_reason[val] = '母线电流不平衡,考虑CT断线或反接' #—————————————极性校验3:母线压互平衡关系————————————————————— #暂时没做 #—————————————极性校验3:母线压互平衡关系————————————————————— #print(YC_MnTrns) #print(YC_Dist) print(checked_polarity) print(checked_polarity_reason)