मैं 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

मूल रूप से, यह डायमोला मैनुअल (जोड़ा फॉर-लूप के साथ) में दिया गया उदाहरण है। अब मैं मॉडल का सिमुलेशन समय प्राप्त करना चाहता हूं और इसे एक (सीएसवी-) फ़ाइल में लिखना चाहता हूं।

सिमुलेशन समय लॉग-फाइल में भी लिखा जाता है, लेकिन क्या इसे सीधे प्राप्त करने का कोई तरीका है? सिमुलेशन के परिणाम एक .mat फ़ाइल में लिखे गए हैं जो मेरे लिए ठीक है।

आपकी मदद के लिए आपको धन्यवाद!

2
ggoer 2 मई 2018, 15:35

1 उत्तर

सबसे बढ़िया उत्तर

आप आवश्यक 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]


एक विकल्प के रूप में आप पहले अपने मॉडल का अनुवाद कर सकते हैं और फिर पायथन में माप सकते हैं कि अनुकरण कमांड को निष्पादित करने में कितना समय लगता है, टिक, टोक पायथन में एनालॉग काम करता है

यह तब इस तरह दिख सकता है:

    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
2
marco 2 मई 2018, 17:23