我正在使用Dymola的python_interface,想要模拟一组模型:
import platform
from dymola.dymola_interface import DymolaInterface
from dymola.dymola_exception import DymolaException
osString = platform.system()
isWindows = osString.startswith("Win")
with open('ModelList.txt', 'r') as f:
models = f.read().splitlines()
for model in models:
dymola = None
try:
dymola = DymolaInterface("C:\\Program Files\\Dymola 2018 FD01\\bin64\\Dymola.exe")
result = dymola.simulateModel(model)
if not result:
print("Simulation failed:")
log = dymola.getLastErrorLog()
print(log)
else:
print("OK")
except DymolaException as ex:
print(("Error: " + str(ex)))
finally:
if dymola is not None:
dymola.close()
dymola = None
基本上,这是Dymola手册中给出的示例(添加了for循环)。现在我想得到模特'模拟时间并将其写入(csv-)文件。
模拟时间也会写入日志文件,但有没有办法直接获取?模拟结果写入.mat文件,对我来说很好。
感谢您的帮助!
答案 0 :(得分:2)
您可以将所需的CPU时间作为变量包含在带有标志OutputCPUtime=true
的模拟结果中。然后,您可以使用simulateExtendedModel
命令获取此变量的最终值。
将以下内容添加到您的尝试部分,它应该执行您想要的操作:
dymola = DymolaInterface("C:\\Program Files\\Dymola 2018 FD01\\bin64\\Dymola.exe")
dymola.ExecuteCommand("OutputCPUtime=true")
result, values = dymola.simulateExtendedModel(model, finalNames= ['CPUtime'])
cpu_time = values[0]
作为替代方法,您可以先使用tic, toc functions analog in Python
这可能如下所示:
dymola = DymolaInterface("C:\\Program Files\\Dymola 2018 FD01\\bin64\\Dymola.exe")
dymola.translateModel(model)
t = time.time()
result = dymola.simulateModel(model)
elapsed = time.time() - t