OMPython/OpenModelica setMethods

ebdffaop  于 2023-04-28  发布在  Python
关注(0)|答案(2)|浏览(115)

我试图在OMPython中使用setParameter更改参数,在那里我加载了Modelica模型并解决了它。我想用其他数值更改参数,但收到错误消息:
| 资讯|setParameters()失败:无法设置以下信号“Nass”,它似乎是结构化的、final的、protected的或求值的,或者具有非常量绑定,使用sendExpression(setParameterValue(CyclicLoading,Nass,12000),parsed=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()

尝试通过使用open modelica Python API命令更改open modelica代码中给定的参数。导致错误消息:|资讯|setParameters()失败:无法设置以下信号“Nass”,它似乎是结构化的、final的、protected的或求值的,或者具有非常量绑定,使用sendExpression(setParameterValue(CyclicLoading,Nass,12000),parsed=false)并使用buildModel()API重建模型

czq61nw1

czq61nw11#

在许多情况下,不允许根据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时遇到了这些情况之一。

brgchamk

brgchamk2#

感谢您发送编修。实际上,我的参数应该是可变的,但我在代码的开头定义了一些变量,这些变量使参数不可变,因为它们被放置在真实的变量之后。我把参数放在真实的变量之前,现在它工作了。

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;

相关问题