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: