Opened 10 years ago

Closed 10 years ago

Last modified 10 years ago

#3285 closed defect (fixed)

Erroneus pathnames created by Omedit

Reported by: massimo ceraolo Owned by: Adeel Asghar
Priority: high Milestone: 1.9.3
Component: OMEdit Version: trunk
Keywords: Cc:

Description (last modified by massimo ceraolo)

Consider the following simple package BugDrag, containing MSL's sine and integrator:

encapsulated package BugDrag
  import Modelica;

  block Sine "Generate sine signal"
    parameter Real amplitude = 1 "Amplitude of sine wave";
    parameter Modelica.SIunits.Frequency freqHz(start = 1) "Frequency of sine wave";
    parameter Modelica.SIunits.Angle phase = 0 "Phase of sine wave";
    parameter Real offset = 0 "Offset of output signal";
    parameter Modelica.SIunits.Time startTime = 0 "Output = offset for time < startTime";
    extends Modelica.Blocks.Interfaces.SO;
  protected
    constant Real pi = Modelica.Constants.pi;
  equation
    y = offset + (if time < startTime then 0 else amplitude * Modelica.Math.sin(2 * pi * freqHz * (time - startTime) + phase));
    annotation(Icon(coordinateSystem(preserveAspectRatio = true, extent = {{-100, -100}, {100, 100}}), graphics = {Line(points = {{-80, 68}, {-80, -80}}, color = {192, 192, 192}), Polygon(points = {{-80, 90}, {-88, 68}, {-72, 68}, {-80, 90}}, lineColor = {192, 192, 192}, fillColor = {192, 192, 192}, fillPattern = FillPattern.Solid), Line(points = {{-90, 0}, {68, 0}}, color = {192, 192, 192}), Polygon(points = {{90, 0}, {68, 8}, {68, -8}, {90, 0}}, lineColor = {192, 192, 192}, fillColor = {192, 192, 192}, fillPattern = FillPattern.Solid), Line(points = {{-80, 0}, {-68.7, 34.2}, {-61.5, 53.1}, {-55.1, 66.4}, {-49.4, 74.6}, {-43.8, 79.1}, {-38.2, 79.8}, {-32.6, 76.6}, {-26.9, 69.7}, {-21.3, 59.4}, {-14.9, 44.1}, {-6.83, 21.2}, {10.1, -30.8}, {17.3, -50.2}, {23.7, -64.2}, {29.3, -73.1}, {35, -78.4}, {40.6, -80}, {46.2, -77.6}, {51.9, -71.5}, {57.5, -61.9}, {63.9, -47.2}, {72, -24.8}, {80, 0}}, color = {0, 0, 0}, smooth = Smooth.Bezier), Text(extent = {{-147, -152}, {153, -112}}, lineColor = {0, 0, 0}, textString = "freqHz=%freqHz")}), Diagram(coordinateSystem(preserveAspectRatio = true, extent = {{-100, -100}, {100, 100}}), graphics = {Line(points = {{-80, -90}, {-80, 84}}, color = {95, 95, 95}), Polygon(points = {{-80, 97}, {-84, 81}, {-76, 81}, {-80, 97}}, lineColor = {95, 95, 95}, fillColor = {95, 95, 95}, fillPattern = FillPattern.Solid), Line(points = {{-99, -40}, {85, -40}}, color = {95, 95, 95}), Polygon(points = {{97, -40}, {81, -36}, {81, -45}, {97, -40}}, lineColor = {95, 95, 95}, fillColor = {95, 95, 95}, fillPattern = FillPattern.Solid), Line(points = {{-41, -2}, {-31.6, 34.2}, {-26.1, 53.1}, {-21.3, 66.4}, {-17.1, 74.6}, {-12.9, 79.1}, {-8.64, 79.8}, {-4.42, 76.6}, {-0.201, 69.7}, {4.02, 59.4}, {8.84, 44.1}, {14.9, 21.2}, {27.5, -30.8}, {33, -50.2}, {37.8, -64.2}, {42, -73.1}, {46.2, -78.4}, {50.5, -80}, {54.7, -77.6}, {58.9, -71.5}, {63.1, -61.9}, {67.9, -47.2}, {74, -24.8}, {80, 0}}, color = {0, 0, 255}, thickness = 0.5, smooth = Smooth.Bezier), Line(points = {{-41, -2}, {-80, -2}}, color = {0, 0, 255}, thickness = 0.5), Text(extent = {{-87, 12}, {-40, 0}}, lineColor = {0, 0, 0}, textString = "offset"), Line(points = {{-41, -2}, {-41, -40}}, color = {95, 95, 95}), Text(extent = {{-60, -43}, {-14, -54}}, lineColor = {0, 0, 0}, textString = "startTime"), Text(extent = {{75, -47}, {100, -60}}, lineColor = {0, 0, 0}, textString = "time"), Text(extent = {{-80, 99}, {-40, 82}}, lineColor = {0, 0, 0}, textString = "y"), Line(points = {{-9, 80}, {43, 80}}, color = {95, 95, 95}), Line(points = {{-41, -2}, {50, -2}}, color = {95, 95, 95}), Polygon(points = {{33, 80}, {30, 67}, {36, 67}, {33, 80}}, lineColor = {95, 95, 95}, fillColor = {95, 95, 95}, fillPattern = FillPattern.Solid), Text(extent = {{37, 57}, {83, 39}}, lineColor = {0, 0, 0}, textString = "amplitude"), Polygon(points = {{33, -2}, {30, 11}, {36, 11}, {33, -2}, {33, -2}}, lineColor = {95, 95, 95}, fillColor = {95, 95, 95}, fillPattern = FillPattern.Solid), Line(points = {{33, 80}, {33, -2}}, color = {95, 95, 95})}));
  end Sine;

  block Integrator "Output the integral of the input signal"
    import Modelica.Blocks.Types.Init;
    parameter Real k(unit = "1") = 1 "Integrator gain";
    parameter Modelica.Blocks.Types.Init initType = Modelica.Blocks.Types.Init.InitialState "Type of initialization (1: no init, 2: steady state, 3,4: initial output)" annotation(Evaluate = true, Dialog(group = "Initialization"));
    parameter Real y_start = 0 "Initial or guess value of output (= state)" annotation(Dialog(group = "Initialization"));
    extends Modelica.Blocks.Interfaces.SISO(y(start = y_start));
  initial equation
    if initType == Init.SteadyState then
      der(y) = 0;
    elseif initType == Init.InitialState or initType == Init.InitialOutput then
      y = y_start;
    end if;
  equation
    der(y) = k * u;
    annotation(Icon(coordinateSystem(preserveAspectRatio = true, extent = {{-100.0, -100.0}, {100.0, 100.0}}, initialScale = 0.1), graphics = {Line(visible = true, points = {{-80.0, 78.0}, {-80.0, -90.0}}, color = {192, 192, 192}), Polygon(visible = true, lineColor = {192, 192, 192}, fillColor = {192, 192, 192}, fillPattern = FillPattern.Solid, points = {{-80.0, 90.0}, {-88.0, 68.0}, {-72.0, 68.0}, {-80.0, 90.0}}), Line(visible = true, points = {{-90.0, -80.0}, {82.0, -80.0}}, color = {192, 192, 192}), Polygon(visible = true, lineColor = {192, 192, 192}, fillColor = {192, 192, 192}, fillPattern = FillPattern.Solid, points = {{90.0, -80.0}, {68.0, -72.0}, {68.0, -88.0}, {90.0, -80.0}}), Text(visible = true, lineColor = {192, 192, 192}, extent = {{0.0, -70.0}, {60.0, -10.0}}, textString = "I"), Text(visible = true, extent = {{-150.0, -150.0}, {150.0, -110.0}}, textString = "k=%k"), Line(visible = true, points = {{-80.0, -80.0}, {80.0, 80.0}}, color = {0, 0, 127})}), Diagram(coordinateSystem(preserveAspectRatio = true, extent = {{-100, -100}, {100, 100}}), graphics = {Rectangle(extent = {{-60, 60}, {60, -60}}, lineColor = {0, 0, 255}), Line(points = {{-100, 0}, {-60, 0}}, color = {0, 0, 255}), Line(points = {{60, 0}, {100, 0}}, color = {0, 0, 255}), Text(extent = {{-36, 60}, {32, 2}}, lineColor = {0, 0, 0}, textString = "k"), Text(extent = {{-32, 0}, {36, -58}}, lineColor = {0, 0, 0}, textString = "s"), Line(points = {{-46, 0}, {46, 0}}, color = {0, 0, 0})}));
  end Integrator;
  annotation(uses(Modelica(version = "3.2.1")));
end BugDrag;

Imagine that we want, in OMEdit, create a new model, named MyModel, inside BugDrag package that consists of a sine and an integrator integrating the sine output.

Do the following:
1) drag sine in MyModel
2) drag Integrator into the model
3) connect the sine output with the Integrator input.

The following code is produced:

model MyModel
  BugDrag.sine sine1 annotation(Placement(visible = true, transformation(origin = {-54, 0}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  BugDrag.Integrator integrator1 annotation(Placement(visible = true, transformation(origin = {-6, 0}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
equation
  connect(integrator1.u, sine1.y) annotation(Line(points = {{-18, 0}, {-44, 0}, {-44, 0}, {-44, 0}, {-44, 0}}, color = {0, 0, 127}));
  annotation(Icon(coordinateSystem(extent = {{-100, -80}, {100, 80}}, preserveAspectRatio = true, initialScale = 0.1, grid = {2, 2})), Diagram(coordinateSystem(extent = {{-100, -100}, {100, 100}}, preserveAspectRatio = true, initialScale = 0.1, grid = {2, 2})));
end MyModel;

that does not check, because the substring "BugDrag."
If the package is not encapsulated the issue is not there.

I think we have here two issues:
1) the prefix containing the package name (here "BugDrag") should not be automatically added, at least for encapsulated packages
2) OMEdit shows these dragged models as being correct, even though they are not accessible. SInche their pathnames make them non-accessible, they should be displayed as red boxes.

Change History (7)

comment:1 by massimo ceraolo, 10 years ago

Summary: Errnoeus pathnames created by OmeditErroneus pathnames created by Omedit

comment:2 by Adrian Pop, 10 years ago

One alternative is to fully qualify all the paths, then even if one package on the path is encapsulated, it would work.

comment:3 by massimo ceraolo, 10 years ago

Description: modified (diff)

comment:4 by massimo ceraolo, 10 years ago

Description: modified (diff)

in reply to:  2 comment:5 by massimo ceraolo, 10 years ago

Replying to adrpo:

One alternative is to fully qualify all the paths, then even if one package on the path is encapsulated, it would work.

Maybe in simpler cases it is better not to add any path.
The case I considered in this ticket has all the models directly stored in a unique package (without sub-packages). Here if all dragged models receive names without path, everything works and the code remains simple and readable.

comment:6 by Adeel Asghar, 10 years ago

Resolution: fixed
Status: newclosed

Fixed in r25638. Reopen the ticket if you think it is not working as expected.

comment:7 by massimo ceraolo, 10 years ago

I've checked with a few simple cases, and for me the fix works as intended.
In case for more complex situations I find important issues, I will open a new ticket.
Thank you very much

Note: See TracTickets for help on using tickets.