13

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

来自 OMEdit 的 OpenModelica 模型称为 myGain

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

结果 = OMPython.execute("模拟(myGain, numberOfIntervals=2, outputFormat=\"mat\")")

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

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

我怎样才能做到这一点?

由于参数已编译到模型中,因此应该无法更改它。所以我需要的是这样的模型:

以变​​量为参数的 myGain

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

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

4

3 回答 3

5

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

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

于 2014-01-08T09:47:35.793 回答
3

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

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

于 2014-07-21T17:58:18.027 回答
2
  • 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 ...请耐心等待!

将出现绘制的结果窗口。

于 2017-07-21T16:04:48.290 回答