如何使用Python界面获取Dymola中模型的模拟时间?

时间:2018-05-02 12:35:31

标签: python dymola

我正在使用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文件,对我来说很好。

感谢您的帮助!

1 个答案:

答案 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

中描述的方法之一转换模型,然后在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