OpenModelica тривиальная механическая система, структурно сингулярная - PullRequest
0 голосов
/ 11 июля 2020

При попытке смоделировать более сложную механическую систему в ОМ я получил следующую ошибку:

Internal error IndexReduction.pantelidesIndexReduction failed! System is structurally singular and cannot be handled because the number of unassigned equations is larger than the number of states.

Итак, я уменьшил систему до более или менее тривиальной, но все равно получил ту же ошибку. тривиальная статически определенная система

Цель этого тривиального примера - смоделировать фиксацию моста с обеих сторон, где у вас есть одно вращательное соединение и одно скользящее / вращательное соединение, тем самым делая эту многотельную систему определяемой на плоскости. корпус (ротационные соединения около z). Чтобы учесть, что система переопределена вне плоскости, я бы заменил призматический c шарнир на цилиндрический, но это, похоже, не имеет значения.

Замена правого вращающегося- шарнир + призматика c шарнир пружиной работает, но это, очевидно, другой случай и не дает мне понять ошибку описанной модели.

Есть идеи?

Код модели выглядит так:

model structsingtst01
  inner Modelica.Mechanics.MultiBody.World world annotation(
    Placement(visible = true, transformation(origin = {-76, 66}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Mechanics.MultiBody.Joints.Revolute revolute(phi(displayUnit = "rad"), stateSelect = StateSelect.avoid)  annotation(
    Placement(visible = true, transformation(origin = {-44, 36}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Mechanics.MultiBody.Parts.Fixed fixed(r = {-1, 0, 0})  annotation(
    Placement(visible = true, transformation(origin = {-76, 36}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Mechanics.MultiBody.Parts.Fixed fixed1(r = {1.2, 0, 0})  annotation(
    Placement(visible = true, transformation(origin = {116, 36}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
  Modelica.Mechanics.MultiBody.Parts.BodyBox bodyBox(enforceStates = true, r = {1, -1, 0})  annotation(
    Placement(visible = true, transformation(origin = {-14, 36}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Mechanics.MultiBody.Parts.BodyBox bodyBox1(enforceStates = true, r = {1, 1, 0}) annotation(
    Placement(visible = true, transformation(origin = {26, 36}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Mechanics.MultiBody.Joints.Revolute revolute1 annotation(
    Placement(visible = true, transformation(origin = {56, 36}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Mechanics.MultiBody.Joints.Prismatic prismatic(n = {1, 0, 0}, s(fixed = true, start = 0.2), useAxisFlange = false)  annotation(
    Placement(visible = true, transformation(origin = {86, 36}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
equation
  connect(fixed.frame_b, revolute.frame_a) annotation(
    Line(points = {{-66, 36}, {-54, 36}, {-54, 36}, {-54, 36}}));
  connect(revolute.frame_b, bodyBox.frame_a) annotation(
    Line(points = {{-34, 36}, {-24, 36}, {-24, 36}, {-24, 36}}, color = {95, 95, 95}));
  connect(bodyBox.frame_b, bodyBox1.frame_a) annotation(
    Line(points = {{-4, 36}, {16, 36}}, color = {95, 95, 95}));
  connect(revolute1.frame_a, bodyBox1.frame_b) annotation(
    Line(points = {{46, 36}, {36, 36}}, color = {95, 95, 95}));
  connect(revolute1.frame_b, prismatic.frame_a) annotation(
    Line(points = {{66, 36}, {76, 36}}, color = {95, 95, 95}));
  connect(prismatic.frame_b, fixed1.frame_b) annotation(
    Line(points = {{96, 36}, {106, 36}}, color = {95, 95, 95}));
  annotation(
    uses(Modelica(version = "3.2.3")),
    Diagram(coordinateSystem(extent = {{-200, 0}, {200, 0}})),
    Icon(coordinateSystem(extent = {{-200, 0}, {200, 0}})),
    version = "");
end structsingtst01;

1 Ответ

0 голосов
/ 11 июля 2020

На самом деле это похоже на пример "planar l oop", упомянутый в документации для Modelica.Mechanics.MultiBody.Joints.RevolutePlanarLoopConstraint, поэтому действительно замена одного из Modelica.Mechanics.MultiBody.Joints.Revolute на RevolutePlanarLoopConstraint заставила модель работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...