如何使用 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