You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python的simulateExtendedModel()在Dymola的CombiTimeTable中读取CSV?

解决Dymola-Python接口传入CSV数据到CombiTimeTable的问题

核心问题说明

Modelica.Blocks.Sources.CombiTimeTable的tableOnFile参数仅支持.txt和.mat格式,无法直接加载CSV文件,这是你之前尝试失败的关键原因。以下是两种可行的解决思路:


方法1:Python读取CSV后直接赋值给table参数

修正你使用simulateExtendedModel时的格式问题,确保数据和参数格式匹配:

  1. 路径需用原始字符串或双反斜杠转义(避免\被识别为转义字符)
  2. initialNames和initialValues需用列表/元组,而非集合
  3. 确保CSV数据第一列为时间,后续列为对应信号(符合CombiTimeTable的table结构要求)

修正后的代码示例:

import DymolaInterface

# 初始化Dymola接口
dymola = DymolaInterface.DymolaInterface()

# 读取CSV数据(用原始字符串处理路径)
csv_data = dymola.DataFiles.readCSVmatrix(r"Z:\your.csv")

# 执行模拟并传入数据
dymola.simulateExtendedModel(
    "Model",
    startTime=0,
    stopTime=1,
    numberOfIntervals=0,
    outputInterval=300,
    initialNames=["CombiTimeTable.table"],
    initialValues=[csv_data]
)

如果CSV格式不符合要求(比如缺少时间列),可以在Python中用pandas预处理数据,添加时间列或调整列顺序后再传入。


方法2:将CSV转成txt后用tableOnFile加载

如果必须使用tableOnFile模式,可先在Python中将CSV转换为Dymola兼容的txt格式:

import pandas as pd

# 读取CSV并转换为空格分隔的txt(无表头无索引)
df = pd.read_csv(r"Z:\your.csv")
df.to_csv(r"Z:\your_converted.txt", sep=" ", index=False, header=False)

# 在Dymola中配置CombiTimeTable参数
dymola.executeCommand('CombiTimeTable.tableOnFile=true;')
dymola.executeCommand('CombiTimeTable.fileName="Z:\\your_converted.txt";')
dymola.executeCommand('CombiTimeTable.tableName="";')

# 启动模拟
dymola.simulate("Model", startTime=0, stopTime=1)

常见报错排查

  • 路径错误:Windows路径必须转义(\\)或用原始字符串,避免路径解析失败
  • 数据格式不匹配:确认CSV读取后的矩阵维度和CombiTimeTable要求一致(第一列时间,后续为信号列)
  • 权限问题:检查Dymola是否有目标文件/磁盘的读取权限

内容的提问来源于stack exchange,提问作者Rb8685

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:37:34