Opened 5 years ago

Closed 5 years ago

#5736 closed discussion (invalid)

Expandable connector bus

Reported by: mhamediahmed94@… Owned by: somebody
Priority: high Milestone: Future
Component: *unknown* Version:
Keywords: Cc:

Description

hey everyone . I m student I am a beginner on modelica,this is my first post
I want to transform this model SystemArchitecture from Modelica by example
by Dr. Michael M. Tiller https://mbe.modelica.university/components/architectures/sensor_comparison_ad/ that includes a plant, controller, sensor and actuator
to other Architecture with expandable connector bus
Model SystemArchitecture without expandable connector :

model SystemArchitecture_0
 "A system architecture built from subsystem interfaces"


 model BasicPlant "Implementation of the basic plant model"
  parameter Modelica.SIunits.Inertia J_a=0.1 "Moment of inertia";
  parameter Modelica.SIunits.Inertia J_b=0.3 "Moment of inertia";
  parameter Modelica.SIunits.RotationalSpringConstant c=100 "Spring constant";
  parameter Modelica.SIunits.RotationalDampingConstant d_shaft=3
    "Shaft damping constant";
  parameter Modelica.SIunits.RotationalDampingConstant d_load=4
    "Load damping constant";

  Modelica.Mechanics.Rotational.Interfaces.Support housing
    "Connection to mounting"
    annotation (Placement(transformation(extent={{-110,-70},{-90,-50}})));
  Modelica.Mechanics.Rotational.Interfaces.Flange_a flange_a
    "Input shaft for plant"
    annotation (Placement(transformation(extent={{-110,-10},{-90,10}})));
  Modelica.Mechanics.Rotational.Interfaces.Flange_b flange_b
    "Output shaft of plant"
    annotation (Placement(transformation(extent={{90,-10},{110,10}})));
  protected 
  Modelica.Mechanics.Rotational.Components.Fixed fixed
    annotation (Placement(transformation(extent={{-10,-80},{10,-60}})));
  Modelica.Mechanics.Rotational.Components.Inertia inertia(J=J_a)
    annotation (Placement(transformation(extent={{-40,-10},{-20,10}})));
  Modelica.Mechanics.Rotational.Components.Inertia inertia1(J=J_b)
    annotation (Placement(transformation(extent={{20,-10},{40,10}})));
  Modelica.Mechanics.Rotational.Components.SpringDamper springDamper(c=c, d=
        d_shaft)
    annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
  Modelica.Mechanics.Rotational.Components.Damper damper(d=d_load)
    annotation (Placement(transformation(extent={{20,-40},{40,-20}})));
 equation 
  connect(springDamper.flange_a, inertia.flange_b) annotation (Line(
      points={{-10,0},{-20,0}},
      color={0,0,0},
      smooth=Smooth.None));
  connect(springDamper.flange_b, inertia1.flange_a) annotation (Line(
      points={{10,0},{20,0}},
      color={0,0,0},
      smooth=Smooth.None));
  connect(damper.flange_b, inertia1.flange_b) annotation (Line(
      points={{40,-30},{50,-30},{50,0},{40,0}},
      color={0,0,0},
      smooth=Smooth.None));
  connect(damper.flange_a, fixed.flange) annotation (Line(
      points={{20,-30},{0,-30},{0,-70}},
      color={0,0,0},
      smooth=Smooth.None));
  connect(inertia1.flange_b, flange_b) annotation (Line(
      points={{40,0},{100,0}},
      color={0,0,0},
      smooth=Smooth.None));
  connect(inertia.flange_a, flange_a) annotation (Line(
      points={{-40,0},{-100,0}},
      color={0,0,0},
      smooth=Smooth.None));
  connect(fixed.flange, housing) annotation (Line(
      points={{0,-70},{0,-60},{-100,-60}},
      color={0,0,0},
      smooth=Smooth.None));
 end BasicPlant;

model IdealSensor "Implementation of an ideal sensor"
  Modelica.Mechanics.Rotational.Interfaces.Flange_a shaft
    "Flange of shaft from which sensor information shall be measured"
    annotation (Placement(transformation(extent={{-110,-10},{-90,10}})));
  Modelica.Blocks.Interfaces.RealOutput w "Absolute angular velocity of flange"
    annotation (Placement(transformation(extent={{100,-10},{120,10}})));
  protected 
  Modelica.Mechanics.Rotational.Sensors.SpeedSensor idealSpeedSensor
    "An ideal speed sensor" annotation (Placement(transformation(
        extent={{-10,-10},{10,10}})));
equation 
  connect(idealSpeedSensor.flange, shaft) annotation (Line(
      points={{-10,0},{-100,0}},
      color={0,0,0},
      smooth=Smooth.None));
  connect(idealSpeedSensor.w, w) annotation (Line(
      points={{11,0},{110,0}},
      color={0,0,127},
      smooth=Smooth.None));
end IdealSensor;

 model ProportionalController "Implementation of a proportional controller"
  parameter Real k=20 "Controller gain";
  Modelica.Blocks.Interfaces.RealInput setpoint "Desired system response"
    annotation (Placement(transformation(
        extent={{-20,-20},{20,20}},
        rotation=270, origin={0,120})));
  Modelica.Blocks.Interfaces.RealInput measured "Actual system response"
    annotation (Placement(transformation(
        extent={{-20,-20},{20,20}},
        rotation=180, origin={100,0})));
  Modelica.Blocks.Interfaces.RealOutput command "Command to send to actuator"
    annotation (Placement(transformation(
        extent={{-10,-10},{10,10}},
        rotation=180, origin={-110,0})));
  protected 
  Modelica.Blocks.Math.Gain gain(k=k)
    annotation (Placement(transformation(
        extent={{-10,-10},{10,10}},
        rotation=180, origin={-50,0})));
  Modelica.Blocks.Math.Feedback feedback
    annotation (Placement(transformation(
        extent={{10,-10},{-10,10}})));
 equation 
  connect(feedback.y, gain.u) annotation (Line(
      points={{-9,0},{2,0},{2,0},{-38,0}},
      color={0,0,127}, smooth=Smooth.None));
  connect(feedback.u1, setpoint) annotation (Line(
      points={{8,0},{40,0},{40,60},{0,60},{0,120}},
      color={0,0,127},
      smooth=Smooth.None));
  connect(gain.y, command) annotation (Line(
      points={{-61,0},{-80.5,0},{-80.5,0},{-110,0}},
      color={0,0,127},
      smooth=Smooth.None));
  connect(measured, feedback.u2) annotation (Line(
      points={{100,0},{60,0},{60,-40},{0,-40},{0,-8}},
      color={0,0,127}, smooth=Smooth.None));
 end ProportionalController;

 model IdealActuator "An implementation of an ideal actuator"
  Modelica.Mechanics.Rotational.Interfaces.Flange_b shaft "Output shaft"
    annotation (Placement(transformation(extent={{90,-10},{110,10}})));
  Modelica.Mechanics.Rotational.Interfaces.Support housing
    "Connection to housing"
    annotation (Placement(transformation(extent={{90,-70},{110,-50}})));
  Modelica.Blocks.Interfaces.RealInput tau "Input torque command"
    annotation (Placement(transformation(extent={{-140,-20},{-100,20}})));
  protected 
  Modelica.Mechanics.Rotational.Sources.Torque torque(useSupport=true)
    annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
 equation 
  connect(torque.flange, shaft) annotation (Line(
      points={{10,0},{100,0}},
      color={0,0,0},
      smooth=Smooth.None));
  connect(torque.support, housing) annotation (Line(
      points={{0,-10},{0,-60},{100,-60}},
      color={0,0,0},
      smooth=Smooth.None));
  connect(torque.tau, tau) annotation (Line(
      points={{-12,0},{-120,0}},
      color={0,0,127},
      smooth=Smooth.None));
 end IdealActuator;

 replaceable BasicPlant  plant
   annotation (choicesAllMatching=true,
     Placement(transformation(extent={{-10,-50},{10,-30}})));
replaceable  IdealActuator actuator
   annotation (choicesAllMatching=true,
     Placement(transformation(extent={{-50,-50},{-30,-30}})));
replaceable  IdealSensor sensor
   annotation (choicesAllMatching=true,
     Placement(transformation(extent={{30,-50},{50,-30}})));
replaceable  ProportionalController controller
   annotation (choicesAllMatching=true,
     Placement(transformation(extent={{-10,-10},{10,10}})));
 Modelica.Blocks.Sources.Trapezoid setpoint(period=1.0)
   annotation (choicesAllMatching=true,
     Placement(transformation(extent={{-60,30},{-40,50}})));
equation 
 connect(actuator.shaft, plant.flange_a) annotation (Line(
     points={{-30,-40},{-10,-40}},
     color={0,0,0},
     smooth=Smooth.None));
 connect(actuator.housing, plant.housing) annotation (Line(
     points={{-30,-46},{-10,-46}},
     color={0,0,0},
     smooth=Smooth.None));
 connect(plant.flange_b, sensor.shaft) annotation (Line(
     points={{10,-40},{30,-40}},
     color={0,0,0},
     smooth=Smooth.None));
 connect(controller.measured, sensor.w) annotation (Line(
     points={{10,0},{70,0},{70,-40},{51,-40}},
     color={0,0,127},
     smooth=Smooth.None));
 connect(controller.command, actuator.tau) annotation (Line(
     points={{-11,0},{-70,0},{-70,-40},{-52,-40}},
     color={0,0,127},
     smooth=Smooth.None));
 connect(setpoint.y, controller.setpoint) annotation (Line(
     points={{-39,40},{0,40},{0,12}},
     color={0,0,127},
     smooth=Smooth.None));
end SystemArchitecture_0;

Model with expandable connector bus :

model SystemArchitecture_1
 "A system architecture built from subsystem interfaces"


expandable connector Conn
       extends Modelica.Icons.SignalBus;
end Conn;


model IdealSensor "Implementation of an ideal sensor"
  Modelica.Mechanics.Rotational.Interfaces.Flange_a shaft
    "Flange of shaft from which sensor information shall be measured"
    annotation (Placement(transformation(extent={{-110,-10},{-90,10}})));
    Conn bus  annotation (Placement(transformation(extent={{100,-10},{120,10}})));
  protected 
  Modelica.Mechanics.Rotational.Sensors.SpeedSensor idealSpeedSensor
    "An ideal speed sensor" annotation (Placement(transformation(
        extent={{-10,-10},{10,10}})));
equation 
  connect(idealSpeedSensor.flange, shaft) annotation (Line(
      points={{-10,0},{-100,0}},
      color={0,0,0},
      smooth=Smooth.None));
  connect(idealSpeedSensor.w, bus.w) annotation (Line(points={{11,0},{110,0}},
        color={0,0,127}), Text(
      string="%second",
      index=1,
      extent={{6,3},{6,3}}));
end IdealSensor;

model BasicPlant "Implementation of the basic plant model"
  parameter Modelica.SIunits.Inertia J_a=0.1 "Moment of inertia";
  parameter Modelica.SIunits.Inertia J_b=0.3 "Moment of inertia";
  parameter Modelica.SIunits.RotationalSpringConstant c=100 "Spring constant";
  parameter Modelica.SIunits.RotationalDampingConstant d_shaft=3
    "Shaft damping constant";
  parameter Modelica.SIunits.RotationalDampingConstant d_load=4
    "Load damping constant";

  Modelica.Mechanics.Rotational.Interfaces.Support housing
    "Connection to mounting"
    annotation (Placement(transformation(extent={{-110,-70},{-90,-50}})));
  Modelica.Mechanics.Rotational.Interfaces.Flange_a flange_a
    "Input shaft for plant"
    annotation (Placement(transformation(extent={{-110,-10},{-90,10}})));
  Modelica.Mechanics.Rotational.Interfaces.Flange_b flange_b
    "Output shaft of plant"
    annotation (Placement(transformation(extent={{90,-10},{110,10}})));
  protected 
  Modelica.Mechanics.Rotational.Components.Fixed fixed
    annotation (Placement(transformation(extent={{-10,-80},{10,-60}})));
  Modelica.Mechanics.Rotational.Components.Inertia inertia(J=J_a)
    annotation (Placement(transformation(extent={{-40,-10},{-20,10}})));
  Modelica.Mechanics.Rotational.Components.Inertia inertia1(J=J_b)
    annotation (Placement(transformation(extent={{20,-10},{40,10}})));
  Modelica.Mechanics.Rotational.Components.SpringDamper springDamper(c=c, d=
        d_shaft)
    annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
  Modelica.Mechanics.Rotational.Components.Damper damper(d=d_load)
    annotation (Placement(transformation(extent={{20,-40},{40,-20}})));
equation 
  connect(springDamper.flange_a, inertia.flange_b) annotation (Line(
      points={{-10,0},{-20,0}},
      color={0,0,0},
      smooth=Smooth.None));
  connect(springDamper.flange_b, inertia1.flange_a) annotation (Line(
      points={{10,0},{20,0}},
      color={0,0,0},
      smooth=Smooth.None));
  connect(damper.flange_b, inertia1.flange_b) annotation (Line(
      points={{40,-30},{50,-30},{50,0},{40,0}},
      color={0,0,0},
      smooth=Smooth.None));
  connect(damper.flange_a, fixed.flange) annotation (Line(
      points={{20,-30},{0,-30},{0,-70}},
      color={0,0,0},
      smooth=Smooth.None));
  connect(inertia1.flange_b, flange_b) annotation (Line(
      points={{40,0},{100,0}},
      color={0,0,0},
      smooth=Smooth.None));
  connect(inertia.flange_a, flange_a) annotation (Line(
      points={{-40,0},{-100,0}},
      color={0,0,0},
      smooth=Smooth.None));
  connect(fixed.flange, housing) annotation (Line(
      points={{0,-70},{0,-60},{-100,-60}},
      color={0,0,0},
      smooth=Smooth.None));
end BasicPlant;

model IdealActuator "An implementation of an ideal actuator"
Modelica.Mechanics.Rotational.Interfaces.Flange_b shaft "Output shaft"
  annotation (Placement(transformation(extent={{90,-10},{110,10}})));
Modelica.Mechanics.Rotational.Interfaces.Support housing
  "Connection to housing"
  annotation (Placement(transformation(extent={{90,-70},{110,-50}})));
Conn bus
  annotation (Placement(transformation(extent={{-120,-10},{-100,10}})));
  protected 
Modelica.Mechanics.Rotational.Sources.Torque torque(useSupport=true)
  annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
equation 
connect(torque.flange, shaft) annotation (Line(
    points={{10,0},{100,0}},
    color={0,0,0},
    smooth=Smooth.None));
connect(torque.support, housing) annotation (Line(
    points={{0,-10},{0,-60},{100,-60}},
    color={0,0,0},
    smooth=Smooth.None));
  connect(bus.tau, torque.tau) annotation (Line(
      points={{-110,0},{-12,0}},
      color={255,204,51},
      thickness=0.5), Text(
      string="%first",
      index=-1,
      extent={{-6,3},{-6,3}}));
end IdealActuator;

model ProportionalController "Implementation of a proportional controller"
  extends ControlSystem_WithExpandableBus;
  parameter Real k=20 "Controller gain";
  Modelica.Blocks.Interfaces.RealInput setpoint "Desired system response"
    annotation (Placement(transformation(
        extent={{-20,-20},{20,20}},
        rotation=270, origin={0,120})));
  protected 
  Modelica.Blocks.Math.Gain gain(k=k)
    annotation (Placement(transformation(
        extent={{-10,-10},{10,10}},
        rotation=180, origin={-50,0})));
  Modelica.Blocks.Math.Feedback feedback
    annotation (Placement(transformation(
        extent={{10,-10},{-10,10}})));
equation 
  connect(feedback.y, gain.u) annotation (Line(
      points={{-9,0},{2,0},{2,0},{-38,0}},
      color={0,0,127}, smooth=Smooth.None));
  connect(feedback.u1, setpoint) annotation (Line(
      points={{8,0},{40,0},{40,60},{0,60},{0,120}},
      color={0,0,127},
      smooth=Smooth.None));
  connect(gain.y, bus.tau) annotation (Line(points={{-61,0},{-90,0},{-90,-100},
          {0,-100}}, color={0,0,127}), Text(
      string="%second",
      index=1,
      extent={{6,3},{6,3}}));
  connect(bus.w, feedback.u2) annotation (Line(
      points={{0,-100},{0,-8}},
      color={255,204,51},
      thickness=0.5), Text(
      string="%first",
      index=-1,
      extent={{-6,3},{-6,3}}));
end ProportionalController;

 replaceable BasicPlant  plant
   annotation (choicesAllMatching=true,
     Placement(transformation(extent={{-10,-50},{10,-30}})));
replaceable  IdealActuator actuator
   annotation (choicesAllMatching=true,
     Placement(transformation(extent={{-50,-50},{-30,-30}})));
replaceable  IdealSensor sensor
   annotation (choicesAllMatching=true,
     Placement(transformation(extent={{30,-50},{50,-30}})));
replaceable  ProportionalController controller
   annotation (choicesAllMatching=true,
     Placement(transformation(extent={{-10,-10},{10,10}})));
 Modelica.Blocks.Sources.Trapezoid setpoint(period=1.0)
   annotation (choicesAllMatching=true,
     Placement(transformation(extent={{-60,30},{-40,50}})));
equation 
 connect(actuator.shaft, plant.flange_a) annotation (Line(
     points={{-30,-40},{-10,-40}},
     color={0,0,0},
     smooth=Smooth.None));
 connect(actuator.housing, plant.housing) annotation (Line(
     points={{-30,-46},{-10,-46}},
     color={0,0,0},
     smooth=Smooth.None));
 connect(plant.flange_b, sensor.shaft) annotation (Line(
     points={{10,-40},{30,-40}},
     color={0,0,0},
     smooth=Smooth.None));
 connect(setpoint.y, controller.setpoint) annotation (Line(
     points={{-39,40},{0,40},{0,12}},
     color={0,0,127},
     smooth=Smooth.None));
  connect(actuator.bus, controller.bus) annotation (Line(
      points={{-51,-40},{-80,-40},{-80,-20},{0,-20},{0,-10}},
      color={255,204,51},
      thickness=0.5));
  connect(sensor.bus, controller.bus) annotation (Line(
      points={{51,-40},{82,-40},{82,-20},{0,-20},{0,-10}},
      color={255,204,51},
      thickness=0.5));
end SystemArchitecture_1;

I want the models to be equvalent

SystemArchitecture_1 = SystemArchitecture_0

can someone tell me if the models are equivalent ( i get the same simulation results ) ? or how can i improve the architecture with expandable connector bus so that both models stay equivalent

thank you

Change History (1)

comment:1 by Per Östlund, 5 years ago

Resolution: invalid
Status: newclosed

This tracker is for reporting bugs and other issues related to OpenModelica. If you have questions about modelling or how to use OpenModelica you should instead use for example the OpenModelica forum or StackOverflow, where you are far more likely to find someone who can answer your questions.

Note: See TracTickets for help on using tickets.