Переключение между двумя фланцами

В настоящее время я работаю с многотельными механическими системами, используя библиотеку 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 переменных.

Есть какой-либо способ сделать это?


person Guillermo Oliver    schedule 21.09.2017    source источник


Ответы (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). Затем можно будет выполнить переключение между источниками. путем переключения реальных сигналов вместо физических разъемов.Учтите, что это может генерировать скачки в позициях при прямом применении позиций.

person Markus A.    schedule 21.09.2017

Опубликованная вами ссылка относится к нефизическим соединителям, которые менее строги по сравнению с физическими соединителями. Поэтому сравнивать два решения следует очень осторожно.

Переключение с позиции в качестве входа на силу в качестве входа потребовало бы перестройки системы уравнений при выполнении этого переключения. Это будет невозможно с Modelica текущего поколения. Вам нужно будет найти решение, основанное на одних и тех же входных данных для всей симуляции.

Будет ли достаточно инициализировать позицию таким образом, чтобы система запускала симуляцию в точке, в которую вы хотите ее переместить в первую очередь (используя источник позиции)? Что вы теряете, так это перемещение системы в это положение.

person Markus A.    schedule 25.09.2017
comment
Спасибо за ответ. Вы правы, что потребовалось бы динамическое изменение дифференциальных уравнений, которые определяют модель во время моделирования, и, возможно, это пока невозможно в Modelica. Я попробую другой подход. - person Guillermo Oliver; 25.09.2017