Вы должны различаться между моделированием и процессом моделирования:
- С помощью языка Modelica вы определяете свои модели
- С помощью инструмента моделирования (например, Dymola) вы выполняете моделирование.
Ключевое слово extends
является частью языка Modelica. Поэтому он не может быть полезен в этом контексте, так как вы используете его для определения моделей, а не для описания того, как следует выполнять моделирование.
Решение вашей проблемы необходимо искать в инструменте моделирования, и Dymola предлагает функцию симулятора, которая делает именно то, что вы хотите: simulateExtendedModel
. Это позволяет прочитать окончательное значение переменной, и вы можете инициализировать параметры и переменные состояния с ним. Вы можете использовать его в скрипте .mos или в функции Modelica.
Поэтому, если мы переименуем ваши модели Sim1
и Sim2
в Model1
и Model2
(потому что это действительно модели, а не симуляции), функция ниже будет делать то, что вы хотите:
function sim
import DymolaCommands.SimulatorAPI.simulateExtendedModel;
protected
Boolean ok;
Real a;
Real[1] finalValues;
algorithm
(ok, finalValues) :=simulateExtendedModel("Model1", 0, 5, finalNames={"a"});
a :=finalValues[1];
simulateExtendedModel("Model2", 5, 10, initialNames={"b"}, initialValues={a});
end sim;
Если вы хотите установить несколько переменных, вы можете использовать этот код:
function sim2
import DymolaCommands.SimulatorAPI.simulateExtendedModel;
protected
Boolean ok;
Real[:] finalValues_sim1;
String[:] finalNames_sim1 = {"a1", "a2", "a3"};
String[:] initialNames_sim2 = {"b1", "b2", "b3"};
algorithm
(ok, finalValues_sim1) :=simulateExtendedModel("SO.Model1", 0, 5, finalNames=finalNames_sim1);
simulateExtendedModel("SO.Model2", 5, 10, initialNames=initialNames_sim2, initialValues=finalValues_sim1);
end sim2;