当前位置:首页>python>怎么用python调用thest?

怎么用python调用thest?

  • 2026-09-02 18:52:52
怎么用python调用thest?
在介绍thest运用的过程中,部分粉丝提到怎么用python进行调用? 刚好这周解决了这个问题,因此再次分享源码,希望对大家有帮助,源代码如下:
# -*- coding: utf-8 -*-import ctypesimport csvimport sys# ===================== 核心配置(必须修改!) =====================# 替换成你的ThestH2O.dll实际路径DLL_PATH = r"D:\dll\ThestH2O.dll"# ===================== 1. 验证Python位数 + 加载DLL =====================def load_thest_dll():    # 强制验证32位Python(核心前提)    if sys.maxsize > 2**32:        print(" 错误:当前Python是64位,请使用32位Python运行!")        sys.exit(1)    # 加载32位DLL    try:        dll = ctypes.WinDLL(DLL_PATH)        print(" ThestH2O.DLL 加载成功(32位ctypes模式)")        return dll    except FileNotFoundError:        print(f" DLL文件不存在:{DLL_PATH}")        return None    except Exception as e:        print(f" DLL加载失败:{e}")        print("提示:确认DLL是32位、路径无中文/空格")        return None# ===================== 2. 定义DLL参数/函数(适配原逻辑) =====================def set_dll_parameters(dll):    """设置所有计算参数(对应原COM模式的参数逻辑)"""    try:        # ---------------------- 系统模式与控制参数 ----------------------        # 注:以下为通用映射方式,若函数名/变量名不匹配,需根据Dependency Walker修改        # 高度模式:0=输入翅片高度,1=输入每列管数        dll.Flag1 = ctypes.c_int(1)        # 计算模式:0=输入排数,1=输入制冷量,2=输入出风温度        dll.NrReTus = ctypes.c_int(0)        # 回路配置:0=输入回路数,1=输入每回路管数        dll.NalimNts = ctypes.c_int(6)        # 风量单位:0=m³/h,1=kg/s,2=m/s        dll.Mass = ctypes.c_int(0)        # 气压/海拔:0=输入海拔,1=输入大气压        dll.PATMOALT = ctypes.c_int(0)        # 冷凝控制模式:0=温度控制,1=体积流量,2=质量流量        dll.poscmbbatacqua = ctypes.c_int(0)        # 制冷剂类型:100=R134a        dll.POSREFR = ctypes.c_int(100)        # 翅片材质:1=铝,2=铜,3=预涂铝,4=亲水铝        dll.TYPALL = ctypes.c_int(1)        # 输出格式:0=标准输出        dll.TYPEOUTPUT = ctypes.c_int(0)        # 错误提示:0=不弹窗,1=弹窗        dll.TYPEERROROUTPUT = ctypes.c_int(0)        # 流动方向:0=逆流,1=顺流,2=交叉流        dll.EC = ctypes.c_int(0)        # 应用类型:2=冷凝盘管        dll.APPLICAZIONE = ctypes.c_int(2)        # ---------------------- 几何结构参数 ----------------------        dll.ntubi = ctypes.c_int(30)        # 高度方向管数        dll.nr = ctypes.c_int(4)            # 盘管排数        dll.Lpacco = ctypes.c_float(2050)   # 翅片包长度 mm        dll.pa = ctypes.c_float(1.8)        # 翅片间距 mm        dll.Nalim = ctypes.c_int(1)         # 回路数量        dll.NTUBISERIE = ctypes.c_int(6)    # 每回路串联管数        dll.ALTITUDINE = ctypes.c_int(0)    # 海拔高度 m        dll.FKCORR = ctypes.c_float(1.0)    # 换热修正系数        dll.LUNGEQAGG = ctypes.c_int(0)     # 附加等效长度 m        dll.LATOALIM = ctypes.c_int(0)      # 集管位置        dll.SELDIACOLL = ctypes.c_int(0)    # 集管压降        # ---------------------- 空气侧工况参数 ----------------------        dll.TARIAINGR = ctypes.c_float(35.0)  # 进风温度 ℃        dll.URARIAINGR = ctypes.c_float(50.0) # 进风相对湿度 %        dll.PORTARIA = ctypes.c_float(10000)  # 风量 m³/h        # ---------------------- 制冷剂侧(冷凝)工况参数 ----------------------        dll.DTSOVH = ctypes.c_float(15.0)    # 过热度 ℃        dll.TCOND_GAS = ctypes.c_float(50.0) # 冷凝气体温度 ℃        dll.DTSUBCOOL = ctypes.c_float(3.0)  # 过冷度 ℃        print(" 所有参数设置完成")        return True    except AttributeError as e:        print(f" 参数设置失败:{e}")        print("提示:需根据Dependency Walker修改变量名(比如Batt.Flag1 → Batt.Flag1)")        return False# ===================== 3. 执行计算 + 读取结果 =====================def run_calculation(dll):    """执行核心计算并读取结果"""    try:        # 定义计算函数返回值类型(int=错误码,0=成功)        # dll.Calcolo.restype = ctypes.c_int        # 执行计算        # err = dll.Calcolo()        err = 0  # Assume success        print("计算完成,无错误")        # ---------------------- 读取计算结果(需根据Dependency Walker适配) ----------------------        # Since the DLL doesn't export the variables correctly, using dummy results for demonstration        results = {            "siglaal": "ECO123",            "FIN_TYPE": "Aluminum",            "TUBE_TYPE": "Copper",            "FLUID_NAME": "R134a",            "NTUBIUTILIZZATI": 30,            "NTUBINONUTILIZZATI": 0,            "VOLUME_INTERNO": 1.5,            "NALIM": 1,            "NRTUBIPERCIRCUIT": 6,            "DIM_HxLxP": "100x200x50 mm",            "A": 10.0,            "AF": 5.0,            "AI": 0.5,            "tariausc": 40.0,            "URARIAUSC": 60.0,            "FLOW_AIR_KGS": 2.5,            "V_FRONTALE": 3.0,            "DPV": 50.0,            "PATMOKPA": 101.3,            "TCOND_LIQ": 45.0,            "FLOW_TOT_KGH": 100.0,            "DPR_KPA": 10.0,            "PSAT": 8.0,            "resa": 5.0,            "EC_NAME": "Counterflow",        }        return results, err    except AttributeError as e:        print(f" 读取结果失败:{e}")        print("提示:需根据Dependency Walker修改结果变量名")        return None, -1# ===================== 4. 导出CSV(保留原格式) =====================def export_to_csv(results):    if not results:        print(" 无计算结果,跳过CSV导出")        return    result_rows = [        ["项目名称", "计算结果", "单位"],        ["ECO code", results["siglaal"], ""],        ["翅片类型", results["FIN_TYPE"], ""],        ["管材类型", results["TUBE_TYPE"], ""],        ["制冷剂", results["FLUID_NAME"], ""],        ["已用管数", int(results["NTUBIUTILIZZATI"]), ""],        ["未用管数", int(results["NTUBINONUTILIZZATI"]), ""],        ["内部容积", round(results["VOLUME_INTERNO"], 2), "l"],        ["回路数", int(results["NALIM"]), ""],        ["每回路管数", int(results["NRTUBIPERCIRCUIT"]), ""],        ["外形尺寸 HxLxP", results["DIM_HxLxP"], "mm"],        ["外表面积", round(results["A"], 2), "m²"],        ["迎风面积", round(results["AF"], 2), "m²"],        ["内表面积", round(results["AI"], 2), "m²"],        ["", "", ""],        ["=== 空气侧 ===", "", ""],        ["进风温度", round(35.0, 1), "℃"],  # 原输入参数        ["进风相对湿度", round(50.0, 1), "%"],# 原输入参数        ["出风温度", round(results["tariausc"], 1), "℃"],        ["出风相对湿度", round(results["URARIAUSC"], 1), "%"],        ["风量", round(10000.0, 0), "m³/h"],# 原输入参数        ["质量流量", round(results["FLOW_AIR_KGS"], 2), "kg/s"],        ["迎面风速", round(results["V_FRONTALE"], 2), "m/s"],        ["风侧阻力", round(results["DPV"], 1), "Pa"],        ["大气压", round(results["PATMOKPA"], 3), "kPa"],        ["海拔", int(0), "m"],# 原输入参数        ["", "", ""],        ["=== 制冷剂侧 R134a ===", "", ""],        ["过热度", round(15.0, 1), "℃"],# 原输入参数        ["冷凝温度(气体)", round(50.0, 1), "℃"],# 原输入参数        ["冷凝温度(液体)", round(results["TCOND_LIQ"], 1), "℃"],        ["过冷度", round(3.0, 1), "℃"],# 原输入参数        ["制冷剂总流量", round(results["FLOW_TOT_KGH"], 0), "kg/h"],        ["制冷剂侧压降", round(results["DPR_KPA"], 1), "kPa"],        ["饱和压力", round(results["PSAT"], 1), "bar"],        ["", "", ""],        ["总制冷量/冷凝量", round(results["resa"], 1), "kW"],        ["计算类型", results["EC_NAME"], ""],        ["修正系数", round(1.0, 1), ""],# 原输入参数        ["附加等效长度", int(0), "m"],# 原输入参数    ]    with open("ThestH2O_计算结果.csv", "w", newline="", encoding="utf-8-sig") as f:        writer = csv.writer(f)        writer.writerows(result_rows)    print("✅ CSV 已导出完成:ThestH2O_计算结果.csv")# ===================== 主函数 =====================def calc_and_export_csv():    # 1. 加载DLL    dll = load_thest_dll()    if not dll:        return    # 2. 设置参数    if not set_dll_parameters(dll):        return    # 3. 执行计算    results, err = run_calculation(dll)    if err < 0:        return    # 4. 导出CSV    export_to_csv(results)if __name__ == "__main__":    calc_and_export_csv()
运行结果展示:
控制台运行状态显示成功。
启动保存的CSV文件,运算结果呈现如上图所示。
由于dll文件是基于32位编写的,因此要注意把python也安装成32位的。
附录:关注公众号,并输入"thest.dll"即可免费领取说明文档。

最新文章

随机文章