首页 文章

如何使用OMPython在Python中调用OpenModelica模型?

提问于
浏览
7

我有一个用OMEdit制作的OpenModelica模型 . 为了得到一个具体的例子,我设计了以下内容:

OpenModelica Model from OMEdit called myGain

现在我想在Python中运行该模型 . 我可以通过使用OMPython来做到这一点 . 导入OMPython并加载文件后,我使用以下命令运行模拟:

result = OMPython.execute("simulate(myGain, numberOfIntervals=2, outputFormat=" mat \ _ _ _ ")")

现在运行模拟并将结果写入文件 .

现在我想运行相同的模型,但是常量块的参数不同 .

我怎样才能做到这一点?

由于参数被编译到模型中,因此无法对其进行更改 . 所以我需要的是这样的模型:

myGain with a variable as parameter

是否可以从Python调用模型并将变量“a”设置为特定值?

使用命令OMPython.execute("simulate(...)"),我可以指定一些环境变量,如"numberOfIntervals"或"outputFormat",但不能更多 .

3 回答

  • 1

    我相信你正在寻找 setParameterValue 命令 . 你可以在这里阅读:https://openmodelica.org/download/OMC_API-HowTo.pdf

    基本上,您可以在运行模拟的行之前向您的python脚本添加类似于 OMPython.execute("setParameterValue(myGain, a, 20)") 的行,只要 a 是模型中的参数即可 .

  • 1

    您可以向simulate命令发送更多标志 . 例如,用于覆盖参数的simflags . 有关详细信息,请参阅https://openmodelica.org/index.php/forum/topic?id=1011 .

    您还可以使用 buildModel(...) 命令后跟 system("./ModelName -overrideFile ...") 来避免重新转换和重新编译,或者使用一些次要脚本并行参数扫描 . 如果您使用Linux或OSX,则应该很容易调用OMPython来创建可执行文件,然后自己调用它 . 在Windows上,您需要设置一些环境变量才能使其按预期工作 .

  • 3
    • 在Windows中创建一个新文件夹

    • 在此文件夹中放置/创建2个新文件 file1.pyfile2.bat

    • file1.py内容为:

    import os
    import sys
    sys.path.insert(0, "C:\OpenModelica1.11.0-32bit\share\omc\scripts\PythonInterface")
    from OMPython import OMCSession
    sys.path.insert(0, "C:\OpenModelica1.11.0-32bit\lib\python")
    os.environ['USER'] = 'stefanache'
    omc = OMCSession()
    omc.sendExpression("loadModel(Modelica)")
    omc.sendExpression("loadFile(getInstallationDirectoryPath() + \"/share/doc/omc/testmodels/BouncingBall.mo\")")
    omc.sendExpression("instantiateModel(BouncingBall)")
    omc.sendExpression("simulate(BouncingBall)")
    omc.sendExpression("plot(h)")`
    
    • file2.bat内容是:
    @echo off
    python file1.py
    pause
    
    • 然后点击file2.bat ...请耐心等待!

    将显示绘制的结果窗口 .

相关问题