OMPython/OpenModelica setMethods

问题描述 投票:0回答:2

我正在尝试使用 OMPython 中的 setParameter 更改参数,我已加载 Modelica 模型并解决了它。我想用其他数值更改参数,但收到错误消息:

|信息 | setParameters() failed : 无法设置以下信号“Nass”,它似乎是结构性的、最终的、受保护的或评估的或具有非常量的绑定,使用 sendExpression(setParameterValue(CyclicLoading, Nass, 12000),解析= false)并使用 buildModel() API 重建模型

setParameter 引入之前的 OMPython 代码:

from OMPython import ModelicaSystem
from OMPython import OMCSessionZMQ
omc = OMCSessionZMQ()
modelpath="C:/work/code/modelica/"
Nom_fichier_mo="CyclicLoading.mo"
Nom_fich="CyclicLoading"
fich_res_Modelica_mat="Resultat_av_CyclicLoading.mat"
mod=ModelicaSystem(modelpath+Nom_fichier_mo,Nom_fich,["Modelica","CyclicLoading"])
mod.buildModel()
Directory_cd=omc.sendExpression("cd()")
resultatSimluation=mod.simulate(resultfile=f"{fich_res_Modelica_mat}")
Solution_var=mod.getSolutions()

引入setParameter后的OMPython代码:

from OMPython import ModelicaSystem
from OMPython import OMCSessionZMQ
omc = OMCSessionZMQ()
modelpath="C:/work/code/modelica/"
Nom_fichier_mo="CyclicLoading.mo"
Nom_fich="CyclicLoading"
fich_res_Modelica_mat="Resultat_av_CyclicLoading.mat"
mod=ModelicaSystem(modelpath+Nom_fichier_mo,Nom_fich,["Modelica","CyclicLoading"])
mod.buildModel()
**mod.setParameters("Nass=12000") **
Directory_cd=omc.sendExpression("cd()")
resultatSimluation=mod.simulate(resultfile=f"{fich_res_Modelica_mat}")
Solution_var=mod.getSolutions()

尝试通过使用开放 modelica Python API 命令更改开放 modelica 代码中给出的参数。导致错误消息: |信息 | setParameters() failed : 无法设置以下信号“Nass”,它似乎是结构性的、最终的、受保护的或评估的或具有非常量的绑定,使用 sendExpression(setParameterValue(CyclicLoading, Nass, 12000),解析=false)并使用 buildModel() API 重建模型

python modelica openmodelica
2个回答
0
投票

根据 Modelica 规范,在很多情况下不允许更改参数。

对于以下型号

HelloWorld

model HelloWorld "Model"
  Real x(start=1, fixed = true);
  parameter Real a = 1;       // Changable parameter
  Real y[N];
  parameter Integer N = 2;    // Structural parameter
  final parameter Real b = 3; // Final parameter
protected
  parameter Real c = 4;       // Protected parameter
public
  parameter Real d = 2*a;     // Evaluated parameter

  model M
    parameter Real e = 5;     // Changable parameter
  end M;
  M m(e=d);                   // Non-constant binding of e
equation
  der(x) = a*b*c*d*x;
  for i in 1:N loop
    y[i] = time;
  end for;
end HelloWorld;

只允许改变参数

a
的值。

在没有看到您的 Modelica 模型的情况下,我假设您在尝试更改时遇到了其中一种情况

Nass


-2
投票

谢谢你的帖子。实际上我的参数应该是可以更改的,但是我在代码的开头定义了一些变量,这使得参数不可更改,因为它们放置在 Real 变量之后。我将参数放在 Real 变量之前,现在它可以工作了。

Before:
Real fs,F_s,F_e,fe,fm,fu;
parameter Real Rz=200 "Peak-to-valley height(micro meters)"; // Table 18.8
parameter Integer Nass=15000;

After: 
parameter Real Rz=200 "Peak-to-valley height(micro meters)"; // Table 18.8
parameter Integer Nass=15000;
Real fs,F_s,F_e,fe,fm,fu;
© www.soinside.com 2019 - 2024. All rights reserved.