Я пытаюсь изменить параметр с помощью 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.
Для следующей модели 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.
Вы правы, я все еще не мог изменить параметр, который был в операторе if в моделике. С наилучшими пожеланиями
Как сейчас написано, ваш ответ неясен. Пожалуйста, отредактируйте , чтобы добавить дополнительные сведения, которые помогут другим понять, как это отвечает на заданный вопрос. Вы можете найти больше информации о том, как писать хорошие ответы в справочном центре.
Не видя вашу модель Modelica
CyclicLoadingочень сложно вам помочь. Невозможно определить, является ли ваш параметр структурным, окончательным, защищенным или оцененным или имеет непостоянную привязку. Можете ли вы добавить минимальный пример воспроизведения?