【发布时间】:2017-12-05 18:22:48
【问题描述】:
我正在尝试使用 Python 运行 Dymola,每次我更改参数的值时,都会通过许多“if elseif”使用不同的方程来激活和停用相应的方程。
我正在使用此代码:
def simulationModel(model, startTime, stopTime, resultFile, initialNames, initialValues, finalNames):
output = dymola.simulateExtendedModel(model,
startTime=startTime,
stopTime=stopTime,
numberOfIntervals=500,
outputInterval=0.0,
method="Dassl",
tolerance=0.0001,
fixedstepsize=0.0,
resultFile=resultFile,
initialNames=initialNames,
initialValues=initialValues,
finalNames=finalNames,
autoLoad=False)
status = output[0]
if not status:
print("Simulation failed.")
log = dymola.getLastError()
print(log)
return
result = output[1]
return result
问题是,当我为参数定义新值时,脚本会在模型中更改它们,但它一直使用我上次在 Dymola 上直接运行程序时使用的相同方程组,这不是案子, 该程序没有考虑到参数会改变要使用的方程组。
有什么建议吗? 问候
【问题讨论】:
-
也许这些参数会被评估?还是 Dymola 将它们视为结构变量?另见stackoverflow.com/questions/35907544/… 和stackoverflow.com/questions/32739428/…
-
您也应该尝试直接在 Dymola GUI 中翻译模型,然后检查是否可以在不再次翻译的情况下更改模拟之间的参数。
-
我无法在不翻译的情况下更改参数,因为参数的每次更改都会导致所研究的方程组发生更改。我尝试在 Dymola 中设置:参数 Real eq1=0 annotation(Evaluate=false);参数 Real eq2=1 注释(Evaluate=false);但这不起作用,我得到错误:Errors or failure to expand vector or matrix expressions.
-
所以这与 Python 无关,它是一个纯 Modelica 问题。某些更改只需要新的翻译。
-
您能否给我一些建议,告诉我如何使新的翻译成为可能?
标签: python-2.7 dymola