Files
DebugTool/source/data_inverter.py
2024-12-12 22:02:09 +08:00

90 lines
3.9 KiB
Python

import numpy as np
import pandas as pd
from pathlib import Path
import matplotlib.pyplot as plt
def fft_anlyies(data, time_step=0.0002) -> pd.DataFrame:
""" 生成FFT数据 """
frequencies = np.fft.fftfreq(data.shape[0], d=time_step) # 计算频率轴
result = pd.DataFrame([], index=frequencies)
for col_name in data:
""" 分列处理 """
fft_result = np.fft.fft(data[col_name])
fft_magnitude = np.abs(fft_result) # 获取幅度谱
result[col_name + '频谱'] = fft_magnitude
return result
def RecordingAnalysis(data_origin: pd.DataFrame):
""" 光伏逆变器录波数据分析 """
graph_map = {
'电网电压': ['A相电网电压', 'B相电网电压', 'C相电网电压'],
'滤波电容电压': ['A相滤波电容电压', 'B相滤波电容电压', 'C相滤波电容电压'],
'母线电压': ['上母线电压', '下母线电压'],
'母线电流': ['上母线电流', '下母线电流'],
'逆变电流': ['A相逆变电流', 'B相逆变电流', 'C相逆变电流'],
'负载电流': ['A相负载电流', 'B相负载电流', 'C相负载电流'],
'调制比': ['A相调制比', 'B相调制比', 'C相调制比'],
'电压前馈': ['A相电压前馈', 'B相电压前馈', 'C相电压前馈'],
'逆变电流参考值': ['A相逆变电流参考值', 'B相逆变电流参考值', 'C相逆变电流参考值'],
'谐振控制输出': ['谐振控制输出'],
'有源阻尼': ['有源阻尼'],
'零序电压': ['零序电压'],
'相角': ['相角'],
'故障状态': ['状态标签', '故障录波标志位'],
}
data_origin.index = data_origin.index * time_step
for key, value in graph_map.items():
ax = data_origin[value].plot(title=key)
if key == '故障状态':
threshold = 1e-5
diff = data_origin[value].iloc[:-1].reset_index(drop=True) - data_origin[value].iloc[1:].reset_index(drop=True)
diff = diff.replace(0, pd.NA).dropna(how='all')
for x, d in diff.T.items():
if threshold is None or d > threshold:
Y = data_origin.loc[x, value]
for y in Y:
ax.annotate(f'{y:.2f}', (x, y), textcoords="jump points", xytext=(0,5), ha='center')
if key == '电网电压' or key == '滤波电容电压':
""" 三相运行数据 """
data_fft = fft_anlyies(data_origin[value], time_step=time_step)
data_fft.plot(title=(key + ' FFT频谱图'), xlabel = '频率 (Hz)', ylabel = '幅度')
ax_fft = data_fft.plot(title=(key + ' FFT频谱图'), xlabel = '频率 (Hz)', ylabel = '幅度', xlim=(-200, 200))
if __name__ == "__main__":
# plt中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
# 坐标轴负数显示
plt.rcParams['axes.unicode_minus'] = False
time_step = 1 / 5000
data = pd.read_excel(Path(r"D:\WorkSpace\UserTool\SelfTool\FrameParser\test\pv_inviter\19__24_12_06_15_19_03.xlsx"))
# Index([
# 'A相电网电压', 'B相电网电压', 'C相电网电压',
# 'A相滤波电容电压', 'B相滤波电容电压', 'C相滤波电容电压',
# '上母线电压', '下母线电压',
# '上母线电流', '下母线电流',
# 'A相逆变电流', 'B相逆变电流', 'C相逆变电流',
# 'A相负载电流', 'B相负载电流', 'C相负载电流',
# 'A相调制比', 'B相调制比', 'C相调制比',
# 'A相电压前馈', 'B相电压前馈', 'C相电压前馈',
# 'A相逆变电流参考值', 'B相逆变电流参考值', 'C相逆变电流参考值',
# '谐振控制输出',
# '有源阻尼',
# '零序电压',
# '相角',
# '状态标签', '故障录波标志位'
# ],
# dtype='object')
RecordingAnalysis(data)
if not hasattr(__builtins__,"__IPYTHON__"):
plt.waitforbuttonpress()