Строю макет в Дымоле. Я определил массу этой модели как параметр, потому что она будет перенесена в другие модули и вызвана в них. Но масса должна изменяться во время моделирования в разные промежутки времени. Например, в течение первых 100 секунд масса должна оставаться 500 кг, а в течение 100–200 секунд пассажир собирается сесть, поэтому необходимо рассчитать новую массу, включая массу пассажира. Но было показано, что «проблема структурно сингулярна», потому что значения параметра были присвоены дважды. Может кто-нибудь дать несколько советов по решению этой проблемы? Большое спасибо.
Как я мог переопределить или изменить значение предопределенного параметра в Dymola во время моделирования?
Ответы (2)
Если вы определяете массу вашего компонента как input
, а не parameter
, вы можете изменить его во время моделирования, назначив, например, вывод с TimeTable
на него. Например
model Component
input Modelica.SIunits.Mass mass "Passenger dependent mass";
equation
...
end Component;
model systemModel
TimeTable timeTable;
Component component(mass=timeTable.y);
OtherComponent otherComponent(mass=component.mass);
equation
...
end systemModel;
Обратите внимание, что у других компонентов, использующих массу, также должны быть свои «параметры» внутренней массы, определенные как input
, чтобы допускать более высокую изменчивость, чем параметры.
С уважением, Рене Юст Нильсен
Modelica.Blocks.Nonlinear.VariableLimiter
, в котором uMax
и uMin
заменены входами.
- person Rene Just Nielsen; 21.11.2019
m
определен непосредственно в BodyShape
, а не в каком-то базовом классе BodyShape
. Вам следует просто сделать копию BodyShape
в своей собственной библиотеке и переопределить m
как input
вместо parameter
.
- person Rene Just Nielsen; 21.11.2019
Параметры Modelica определяются тем, что они не меняются с течением времени. Поэтому вам нужно будет остановить моделирование, изменить параметр и перезапустить моделирование (см. Другой вопрос). Учитывая ваше описание, я бы предпочел не использовать эту возможность, поскольку кажется, что ваша переменная предназначена для изменения с течением времени.
Похоже, что лучшей альтернативой является определение массы как переменной. Если это будет сделано, вы сможете:
- Перенесите эту переменную из одной модели в другую с помощью интерфейсов. Это может быть немного утомительно в зависимости от количества классов, использующих переменную.
- Использование _1 _ / _ 2_ (в основном глобальные переменные) является допустимой концепцией для этого варианта использования. Эта концепция используется в модели
world
библиотек MultiBody.
В обоих решениях вам нужно будет изменить исходную модель массы, поскольку тогда m
должна быть переменной, а не массой.