OMPython/OpenModelica setMethods

Я пытаюсь изменить параметр с помощью setParameter в OMPython, где я загрузил модель Modelica и решил ее. Я хочу изменить параметр с другими числовыми значениями, но получаю сообщение об ошибке:

| информация | setParameters () не удалось: невозможно установить следующий сигнал «Nass», он кажется структурным, окончательным, защищенным или оцененным или имеет непостоянную привязку, используйте sendExpression (setParameterValue (CyclicLoading, Nass, 12000), проанализировано =false) и перестройте модель с помощью API buildModel().

Код OMPython до введения setParameter:

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()

Код OMPython после введения setParameter:

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, изменив их с помощью команды open modelica Python API. В результате появилось сообщение об ошибке: | информация | setParameters () не удалось: невозможно установить следующий сигнал «Nass», он кажется структурным, окончательным, защищенным или оцененным или имеет непостоянную привязку, используйте sendExpression (setParameterValue (CyclicLoading, Nass, 12000), проанализировано =false) и перестройте модель с помощью API buildModel().

Не видя вашу модель Modelica CyclicLoading очень сложно вам помочь. Невозможно определить, является ли ваш параметр структурным, окончательным, защищенным или оцененным или имеет непостоянную привязку. Можете ли вы добавить минимальный пример воспроизведения?

AnHeuermann 26.04.2023 16:52
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
78
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Существует ряд ситуаций, когда изменение параметра не допускается согласно спецификации 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.

Спасибо за ваше сообщение. На самом деле мои параметры должны быть изменяемыми, но я определил некоторые переменные в начале кода, что сделало параметры неизменяемыми, потому что они были помещены после реальных переменных. Я поставил параметры перед реальными переменными, и теперь это работает.

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;

Порядок объявления переменных не влияет на изменчивость параметров. Так что это изменение само по себе не должно быть решением. Скорее всего, вы изменили что-то еще в своей модели Modelica.

AnHeuermann 27.04.2023 16:58

Вы правы, я все еще не мог изменить параметр, который был в операторе if в моделике. С наилучшими пожеланиями

Faruk 28.04.2023 10:55

Другие вопросы по теме