Переключение между двумя фланцами
В настоящее время я работаю с многотельными механическими системами, использующими библиотеку MultiBody, включенную в стандартный дистрибутив Modelica.
Мне нужно реализовать переключатель между фланцами, чтобы выбрать положение или управление силой для данного соединения.
model FlangeSwitch "Switch between flanges"
Modelica.Mechanics.Translational.Interfaces.Flange_a flange_a_1;
Modelica.Mechanics.Translational.Interfaces.Flange_b flange_b_1;
Modelica.Mechanics.Translational.Interfaces.Flange_a flange_a_2;
Modelica.Mechanics.Translational.Interfaces.Flange_b flange_b_2;
Modelica.Mechanics.Translational.Interfaces.Flange_a flange_a_exit;
Modelica.Mechanics.Translational.Interfaces.Flange_b flange_b_exit;
Modelica.Blocks.Interfaces.BooleanInput u;
equation
if u then
flange_a_exit = flange_a_2;
flange_b_exit = flange_b_2;
else
flange_a_exit = flange_a_1;
flange_b_exit = flange_b_1;
end if;
end FlangeSwitch;
Но этот подход не работает, система не сбалансирована: 10 уравнений и 12 переменных.
Есть какой-либо способ сделать это?
2 ответа
Я не думаю, что инструмент Modelica разрешит эту операцию (даже если у вас сбалансированная модель), так как это может привести к системе с переменной структурой. Что-то, что Modelica не поддерживает в данный момент. Смотрите хорошее введение здесь: https://www.modelica.org/events/modelica2017/proceedings/html/submissions/ecp17132291_Stuber.pdf
Не зная полностью приложения, вы можете попробовать два подхода:
Используйте модель, которая имитирует вращательную муфту, например,
Modelica.Mechanics.Translational.Components.Brake
с активированным параметромuseSupport
, Таким образом, вы можете создать "управляемое механическое соединение" для соединения любого из фланцев сsupport
разъем. Если я правильно прочитал ваш код, вы должны подключитьсяflange_a_2
на поддержку иflange_a_exit
либоflange_a
или жеflange_b
, При активации тормоза черезRealInput
будет механическое соединение.Второе, что вы можете попробовать, это измерить либо положение, либо силу (какую из них вы хотите применить с помощью датчика
Modelica.Mechanics.Translational.Sensors.PositionSensor
а затем применить его, используя соответствующий источник, который в этом случае будетModelica.Mechanics.Translational.Sources.Position
, Переключение между источниками может быть осуществлено путем переключения реальных сигналов вместо физических разъемов. Имейте в виду, что это может генерировать скачки позиций при непосредственном применении позиций.
Ссылка, которую вы разместили, относится к нефизическим разъемам, которые менее ограничены по сравнению с физическими разъемами. Поэтому сравнение двух решений должно быть сделано очень тщательно.
Переключение с положения в качестве входа на силу в качестве входа потребует перестройки системы уравнений при выполнении этого переключения. Это не будет возможно с нынешним поколением Modelica. Вам нужно будет найти решение, основанное на одном и том же входном сигнале для всего моделирования.
Достаточно ли будет инициализировать позицию таким образом, чтобы система запускала симуляцию в точке, в которую вы хотите переместить ее сначала (с использованием источника позиции)? То, что вы теряете, это движение системы к этой позиции.