如何使用 Python 接口在 Dymola 中获取模型的仿真时间?
How can I get the simulation time of a model in Dymola using the Python interface?
我正在使用 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文件,这对我来说很好。
感谢您的帮助!
您可以将所需的 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
中描述的方法之一在 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
我正在使用 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文件,这对我来说很好。
感谢您的帮助!
您可以将所需的 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