feat: 重构EGM计算核心并添加实时日志推送功能

将EGM计算逻辑从webview_app.py移到main.py中的run_egm函数
添加实时日志推送和计算结果回调机制
支持后台线程计算不阻塞前端
This commit is contained in:
dmy
2026-03-02 22:49:38 +08:00
parent 47d3b7b6b4
commit 6f0f8d02a8
3 changed files with 168 additions and 248 deletions

49
main.py
View File

@@ -60,18 +60,12 @@ def read_parameter(toml_file_path):
para.max_i = toml_optional["max_i"]
def egm():
if len(sys.argv) < 2:
toml_file_path = r"D:/code/EGM/历史/平乾750kV.toml"
else:
toml_file_path = sys.argv[1]
if not os.path.exists(toml_file_path):
logger.info(f"无法找到数据文件{toml_file_path},程序退出。")
sys.exit(0)
logger.info(f"读取文件{toml_file_path}")
read_parameter(toml_file_path)
#########################################################
# 以上是需要设置的参数
def run_egm() -> dict:
"""
执行 EGM 计算的核心函数,可被外部调用。
假设参数已通过 para 全局对象设置好。
返回计算结果字典。
"""
parameter_display(para)
h_whole = para.h_arm[0] # 挂点高
string_g_len = para.string_g_len
@@ -356,6 +350,37 @@ def egm():
f"不同相跳闸率是{np.array2string(np.mean(n_sf_phases,axis=1),precision=16)}次/(100km·a)"
)
return {
"success": True,
"message": "计算完成",
"data": {
"tripping_rate": f"{avr_n_sf:.16f} 次/(100km·a)",
"avr_n_sf": avr_n_sf,
"n_sf_phases": np.mean(n_sf_phases, axis=1).tolist(),
"parameters": {
"rated_voltage": para.rated_voltage,
"td": para.td,
"altitude": para.altitude,
"ground_angels": [a / math.pi * 180 for a in para.ground_angels],
"max_i": para.max_i
}
}
}
def egm():
"""命令行入口函数"""
if len(sys.argv) < 2:
toml_file_path = r"D:/code/EGM/历史/平乾750kV.toml"
else:
toml_file_path = sys.argv[1]
if not os.path.exists(toml_file_path):
logger.info(f"无法找到数据文件{toml_file_path},程序退出。")
sys.exit(0)
logger.info(f"读取文件{toml_file_path}")
read_parameter(toml_file_path)
run_egm()
def speed():
a = 0