model VariableMass "Sliding mass with variable inertia"
parameter StateSelect stateSelect = StateSelect.default "Priority to use s and v as states"
annotation (Dialog(tab = "Advanced"));
input Modelica.Blocks.Interfaces.RealInput m(unit = "kg") "Variable mass of the sliding mass"
annotation (Placement(
visible = true,
transformation(
origin = {0, 80},
extent = {
{-20, -20},
{20, 20}},
rotation = -90),
iconTransformation(
origin = {0, 80},
extent = {
{-20, -20},
{20, 20}},
rotation = -90)));
extends Modelica.Mechanics.Translational.Interfaces.PartialRigid(L = 0, s(start = 0, stateSelect = stateSelect));
SI.Velocity v(start = 0, stateSelect = stateSelect) "Absolute velocity of component";
SI.Acceleration a(start = 0) "Absolute acceleration of component";
equation
m * a = flange_a.f + flange_b.f;
a = der(v);
v = der(s);
annotation (
Documentation(info = "<html>\n <p>\n Sliding mass with <em>variable inertia, without friction</em> and two rigidly connected flanges.\n </p>\n <p>\n The sliding mass has the length L, the position coordinate s is in the middle.\n Sign convention: A positive force at flange flange_a moves the sliding mass in the positive direction.\n A negative force at flange flange_a moves the sliding mass to the negative direction.\n </p></html>"),
Icon(
coordinateSystem(
preserveAspectRatio = true,
extent = {
{-100, -100},
{100, 100}}),
graphics = {
Line(
points = {
{-100, 0},
{100, 0}},
color = {0, 127, 0}),
Rectangle(
lineColor = {0, 127, 0},
fillColor = {160, 215, 160},
fillPattern = FillPattern.Sphere,
extent = {
{-55, -30},
{56, 30}}),
Polygon(
lineColor = {95, 127, 95},
fillColor = {95, 127, 95},
fillPattern = FillPattern.Solid,
points = {
{50, -90},
{20, -80},
{20, -100},
{50, -90}}),
Line(
points = {
{-60, -90},
{20, -90}},
color = {95, 127, 95}),
Line(
points = {
{0, -60},
{0, 60}},
rotation = -30),
Polygon(
origin = {30, 52},
rotation = -30,
fillPattern = FillPattern.Solid,
points = {
{0, 0},
{-5, -20},
{5, -20},
{0, 0}})}),
Diagram(
coordinateSystem(
preserveAspectRatio = true,
extent = {
{-100, -100},
{100, 100}}),
graphics = {
Line(
points = {
{-100, 0},
{-55, 0}},
color = {0, 127, 0}),
Line(
points = {
{55, 0},
{100, 0}},
color = {0, 127, 0}),
Rectangle(
fillColor = {255, 255, 255},
fillPattern = FillPattern.Sphere,
extent = {
{-55, -30},
{55, 30}}),
Polygon(
lineColor = {128, 128, 128},
fillColor = {128, 128, 128},
fillPattern = FillPattern.Solid,
points = {
{50, -90},
{20, -80},
{20, -100},
{50, -90}}),
Line(points = {
{-60, -90},
{20, -90}}),
Line(points = {
{-100, -29},
{-100, -61}}),
Line(points = {
{100, -61},
{100, -28}}),
Line(points = {
{-98, -60},
{98, -60}}),
Polygon(
fillPattern = FillPattern.Solid,
points = {
{-101, -60},
{-96, -59},
{-96, -61},
{-101, -60}}),
Polygon(
fillPattern = FillPattern.Solid,
points = {
{100, -60},
{95, -61},
{95, -59},
{100, -60}}),
Text(
lineColor = {0, 0, 255},
extent = {
{-44, -41},
{51, -57}},
textString = "Length L"),
Line(points = {
{0, 30},
{0, 53}}),
Line(points = {
{-72, 40},
{1, 40}}),
Polygon(
fillPattern = FillPattern.Solid,
points = {
{-7, 42},
{-7, 38},
{-1, 40},
{-7, 42}}),
Text(
lineColor = {0, 0, 255},
extent = {
{-61, 53},
{-9, 42}},
textString = "Position s")}));
end VariableMass;