Динамическое изменение координат для положения тела в библиотеке Modelica MultiBody

Я довольно новичок в Modelica, только начатый несколько месяцев назад из-за проекта, над которым я работал. В основном выполняю работу с многотельными механическими системами с использованием библиотеки MultiBody, включенной в стандартный дистрибутив Modelica.

Мне нужно изменить положение тела в соответствии с динамически рассчитанными координатами во время симуляции, но я не могу найти способ сделать это.

Это векторная переменная, которая вычисляет положение центра масс данной системы:

Modelica.SIunits.Length CMG[2];

CMG[1] = ... + cos(part3rotation.angles[3]) ... + part3origin[1] ...;
CMG[2] = ...;

Я хотел бы расположить безмассовое тело (FixedShape) по координатам (CMG[1], CMG[2]) как способ отображения центра масс и его движения во время симуляции.

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

Я пытался прикрепить тело к фиксированному компоненту перевода, но он ожидает параметр (PARAM) вместо переменной (VAR), и это вызывает ошибку.

Используемое программное обеспечение: Modelica 3.2.2 и Wolfram SystemModeler 5.0.

3 ответа

Решение

Решением было изменить класс FixedTranslation, добавив новый вход:

input Modelica.SIunits.Position xyz[3];

и измените уравнения:

frame_b.r_0 = frame_a.r_0 + xyz;

Соединение вектора CMG с вектором xyz класса сделало свое дело.

Я бы добавил рамку Modelica.Mechanics.MultiBody.Interfaces.Frame_b к вашему телу, а затем добавьте следующие уравнения (взятые из FixedTranslation):

frame_b.r_0 = your_three_d_vector;
frame_b.R = frame_a.R; // or some other orientation

/* Force and torque balance */
zeros(3) = frame_a.f + frame_b.f; // and maybe some other forces in your system
zeros(3) = frame_a.t + frame_b.t + cross(r, frame_b.f); // and maybe some other torques and forces in your system

Чтобы добавить дополнительный соединитель в Modelica, мы должны были бы рассмотреть не только потенциальные переменные (в данном случае, положение и ориентацию), но также переменные потока (силы и моменты).

Я полагаю, вы рассчитываете положение центра масс всей системы относительно инерциальной системы. Тогда вы можете полностью опустить frame_a в вашем классе, и поэтому не было бы необходимости всегда подключаться frame_a явно world.frame_b что явно устарело.

Будьте уверены, чтобы использовать Connections.root(frame_b.R) вместо Connections.branch(frame_a.R, frame_b.R) как первоначально определено в FixedTranslation,

И еще один комментарий. Желательно напрямую работать с векторами, а не с компонентами вектора положения, и использовать функции из Modelica.Mechanics.MultiBody.Frames для векторных преобразований.

Другие вопросы по тегам