При попытке смоделировать более сложную механическую систему в ОМ я получил следующую ошибку:
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
). Чтобы учесть переопределение системы вне плоскости, я бы заменил призматический шарнир цилиндрическим, но это, похоже, не имеет значения.
Замена правого шарнира + призматический шарнир на пружину работает, но это явно другой случай и не дает мне понять погрешность описанной модели.
Любые идеи?
Код модели такой:
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;