我有一个用OMEdit制作的OpenModelica模型。为了得到一个具体的例子,我设计了以下内容:
现在我想在Python中运行该模型。我可以通过使用OMPython来做到这一点。导入OMPython并加载文件后,我使用以下命令运行模拟:
result = OMPython.execute(" simulate(myGain,numberOfIntervals = 2,outputFormat = \" mat \")")
现在运行模拟并将结果写入文件。
现在我想运行相同的模型,但是常量块的参数不同。
我该怎么做?
由于参数已编译到模型中,因此无法更改它。所以我需要的是这样的模型:
是否可以从Python调用模型并设置变量" a"特定值?
使用命令 OMPython.execute("模拟(...)")我可以指定一些环境变量,例如" numberOfIntervals"或" outputFormat"但不是更多。
答案 0 :(得分:3)
您可以向simulate命令发送更多标志。例如,用于覆盖参数的simflags。有关详细信息,请参阅https://openmodelica.org/index.php/forum/topic?id=1011。
您还可以使用buildModel(...)
命令后跟system("./ModelName -overrideFile ...")
来避免重新转换和重新编译,或者使用一些次要的脚本并行参数扫描。如果您使用Linux或OSX,则应该很容易调用OMPython来创建可执行文件,然后自己调用它。在Windows上,您需要设置一些环境变量才能使其按预期工作。
答案 1 :(得分:1)
我相信您正在寻找setParameterValue
命令。您可以在此处阅读:https://openmodelica.org/download/OMC_API-HowTo.pdf
基本上,只要OMPython.execute("setParameterValue(myGain, a, 20)")
是模型中的参数,就会在运行模拟的行之前向python脚本添加类似于a
的行。
答案 2 :(得分:1)
在Windows中创建一个新文件夹
在此文件夹中放置/创建2个新文件file1.py
和file2.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)")`
@echo off
python file1.py
pause
将显示绘制的结果窗口。