Smart_Report/PolarityTest.py

114 lines
6.2 KiB
Python
Raw Permalink Normal View History

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