Sonntag, 6. Januar 2019

Simulation einer Ventilsteuerung mit OpenModelica


Folgendes System soll simuliert werden:
System

Modell

Reduziertes Programm:

model Thermal_Fluid_State_0
parameter Modelica.Thermal.FluidHeatFlow.Media.Medium Wasser = Modelica.Thermal.FluidHeatFlow.Media.Water() "Arbeitsmedium" annotation();
inner Modelica.StateGraph.StateGraphRoot stateGraphRoot annotation();

Modelica.Thermal.FluidHeatFlow.Sources.Ambient Quelle_11(constantAmbientPressure = 200000, constantAmbientTemperature = 293.15, medium = Wasser) annotation(…);
Modelica.Thermal.FluidHeatFlow.Sources.Ambient Senke(constantAmbientPressure = 100000, constantAmbientTemperature = 293.15, medium = Wasser) annotation(…);
Modelica.Thermal.FluidHeatFlow.Components.Valve valve_linear1(Kv1 = 1,
LinearCharacteristic = true, T0 = 293.15, medium = Wasser) annotation();
Modelica.Thermal.FluidHeatFlow.Components.Valve valve_linear2(Kv1 = 1,
LinearCharacteristic = true, T0 = 293.15, medium = Wasser) annotation();
Modelica.Thermal.FluidHeatFlow.Sensors.VolumeFlowSensor volumeFlowSensor1(
medium = Wasser) annotation();
Modelica.Thermal.FluidHeatFlow.Sensors.VolumeFlowSensor volumeFlowSensor2(
medium = Wasser) annotation();
Modelica.Blocks.Continuous.FirstOrder firstOrder1(T = 0.1, k = 1) annotation();
Modelica.Blocks.Continuous.FirstOrder firstOrder2(T = 0.1, k = 1) annotation();
Modelica.StateGraph.InitialStep initialStep0 annotation();
Modelica.StateGraph.Transition transition0(enableTimer = true, waitTime = 2) annotation();
Modelica.StateGraph.StepWithSignal stepWithSignal1 annotation();
Modelica.StateGraph.Transition transition1(enableTimer = true, waitTime = 2) annotation();
Modelica.StateGraph.StepWithSignal stepWithSignal2 annotation();
Modelica.StateGraph.Transition transition2(enableTimer = true, waitTime = 2) annotation();
Modelica.Blocks.Math.BooleanToReal booleanToReal1 annotation();
Modelica.Blocks.Math.BooleanToReal booleanToReal2 annotation();
Modelica.StateGraph.Step step_PAUSE annotation();
Modelica.StateGraph.Transition transitionPause(enableTimer = true, waitTime = 2) annotation();

equation

connect(transition2.outPort, initialStep0.inPort[1]) annotation();
connect(stepWithSignal2.active, booleanToReal2.u) annotation();
connect(booleanToReal2.y, firstOrder2.u) annotation();
connect(Quelle_11.flowPort, volumeFlowSensor2.flowPort_a) annotation();
connect(Quelle_11.flowPort, volumeFlowSensor1.flowPort_a) annotation();
connect(valve_linear2.flowPort_b, Senke.flowPort) annotation();
connect(valve_linear1.flowPort_b, Senke.flowPort) annotation();
connect(initialStep0.outPort[1], transition0.inPort) annotation();
connect(transitionPause.outPort, stepWithSignal2.inPort[1]) annotation();
connect(step_PAUSE.outPort[1], transitionPause.inPort) annotation();
connect(transition1.outPort, step_PAUSE.inPort[1]) annotation();
connect(volumeFlowSensor2.flowPort_b, valve_linear2.flowPort_a) annotation();
connect(firstOrder2.y, valve_linear2.y) annotation();
connect(stepWithSignal2.outPort[1], transition2.inPort) annotation();
connect(stepWithSignal1.outPort[1], transition1.inPort) annotation();
connect(transition0.outPort, stepWithSignal1.inPort[1]) annotation();
connect(stepWithSignal1.active, booleanToReal1.u) annotation();
connect(booleanToReal1.y, firstOrder1.u) annotation();
connect(firstOrder1.y, valve_linear1.y) annotation();
connect(volumeFlowSensor1.flowPort_b, valve_linear1.flowPort_a) annotation();

end Thermal_Fluid_State_0;


Ergebnisse:

Transitionen


Durchflüsse:





Simulation eines Elektromagnetes mit OpenModelica


System:

An einen einfachen Elektromagnet soll der Weg, die Kraft und die Geschwindigkeit gemessen werden.


Modell:


Generiertes Programm (vereinfacht):

model Elektromagnet
Modelica.Electrical.Analog.Basic.TranslationalEMF emf;
Modelica.Electrical.Analog.Basic.Ground ground1 ;
Modelica.Electrical.Analog.Basic.Resistor resistor1(R = 1)  ;
Modelica.Electrical.Analog.Basic.Inductor inductor1(L = 0.01)  ;
Modelica.Electrical.Analog.Sources.SignalVoltage signalVoltage1 ;
Modelica.Mechanics.Translational.Components.Mass mass1(m = 1)  ;
Modelica.Mechanics.Translational.Components.Fixed fixed1 ;
Modelica.Mechanics.Translational.Sensors.MultiSensor multiSensor1 ;
Modelica.Blocks.Continuous.FirstOrder firstOrder1(T = 0.01, k = 1)  ;
Modelica.Blocks.Sources.Pulse pulse1(amplitude = 2, offset = -1, period = 5, width = 50);
Modelica.Mechanics.Translational.Components.SpringDamper springDamper1(c=1000,d=100);
Modelica.Blocks.Continuous.Integrator Strecke ;
equation
  connect(multiSensor1.v, Strecke.u) ;
  connect(emf.n, ground1.p) ;
  connect(ground1.p, signalVoltage1.n) ;
  connect(pulse1.y, firstOrder1.u) ;
  connect(firstOrder1.y, signalVoltage1.v) ;
  connect(springDamper1.flange_b, fixed1.flange) ;
  connect(multiSensor1.flange_b, springDamper1.flange_a) ;
  connect(mass1.flange_b, multiSensor1.flange_a) ;
  connect(emf.flange, mass1.flange_a) ;
  connect(signalVoltage1.p, resistor1.p) ;
  connect(resistor1.n, inductor1.p) ;
  connect(inductor1.n, emf.p) ;
  annotation();
end Elektromagnet;


Ergebnisse: