#modelica #openmodelica
#моделика #openmodelica ( открытая модель )
Вопрос:
Я пробую модель, в которой, когда давление внутри ClosedVolume
превышает определенный уровень давления, затем HDVentile
открывается, и жидкость поступает в boundary1
компонент. Я определил nports = 1 in sweptvolume
и nPorts = 2 in ClosedVolume
. В этом случае он выдает сообщение об ошибке со словами
Размеры не совпадают в соединении, размер ‘ClosedVolume.ports’ равен [2], а размер ‘Swept1.ports’ равен
Если я установлю nports=2 в sweptvolume
и nPorts =2 в ClosedVolume
, то он выдает сообщение об ошибке::
Ошибка утверждения: каждый порт [i] тома может быть подключен не более чем к одному компоненту. Если присутствуют два или более соединений, с этими соединениями происходит идеальное смешивание, что обычно не входит в намерения разработчика моделей. Увеличьте nPorts, чтобы добавить дополнительный порт
Знаете ли вы, как справиться с этой ошибкой? Заранее спасибо!
model modelmitclosedvolume
//Declaration(s)
Real V_max = 0.000003;
Real V_tod = 0.000002;
Real N = 2800;
replaceable package medium = Modelica.Media.Water.StandardWater( );
//Component(s)
Modelica.Fluid.Machines.SweptVolume Swept1 (
pistonCrossArea = 0.0001131,
clearance = 0.000000250621,
redeclare package Medium = Modelica.Media.Water.StandardWater,
nPorts = 2,
use_portsData = false,
p_start = 1e5,
use_T_start = true,
T_start = 293.15,
V(start = 0.005),
m(start = 0.005));
inner Modelica.Fluid.System system (p_ambient = 101325);
Modelica.Mechanics.Translational.Sources.Position Posit1 (exact = true, useSupport = false);
Modelica.Blocks.Sources.Sine Sine1 (
amplitude = 0.005567,
freqHz = 46.66,
offset = 0.005567,
phase = -Modelica.Constants.pi/4);
Modelica.Fluid.Pipes.DynamicPipe pipe3 (
length = 0.5,
diameter = 0.03,
redeclare package Medium = Modelica.Media.Water.StandardWater,
momentumDynamics = system.momentumDynamics,
massDynamics = Modelica.Fluid.Types.Dynamics.DynamicFreeInitial,
energyDynamics = system.energyDynamics,
allowFlowReversal = system.allowFlowReversal,
modelStructure = Modelica.Fluid.Types.ModelStructure.a_vb);
Modelica.Fluid.Valves.ValveLinear HDVentile (dp_nominal = 95, m_flow_nominal = 0.05867441, redeclare package Medium = medium);
Modelica.Fluid.Pipes.DynamicPipe pipe4 (
length = 0.5,
diameter = 0.03,
redeclare package Medium = Modelica.Media.Water.StandardWater,
momentumDynamics = system.momentumDynamics,
massDynamics = Modelica.Fluid.Types.Dynamics.DynamicFreeInitial,
energyDynamics = system.energyDynamics,
allowFlowReversal = system.allowFlowReversal,
modelStructure = Modelica.Fluid.Types.ModelStructure.a_vb);
Modelica.Fluid.Sources.FixedBoundary boundary1 (p = 500e5, redeclare package Medium = Modelica.Media.Water.StandardWater, nPorts = 1);
Modelica.Fluid.Vessels.ClosedVolume ClosedVolume (
V = 0.005/6,
nPorts = 2,
portsData = {Modelica.Fluid.Vessels.BaseClasses.VesselPortsData(diameter=0.001),Modelica.Fluid.Vessels.BaseClasses.VesselPortsData(diameter=0.001)},
redeclare package Medium = medium);
equation
//Connection(s)
connect(Posit1.flange, Swept1.flange);
connect(Sine1.y, Posit1.s_ref);
connect(pipe3.port_b, HDVentile.port_a);
connect(HDVentile.port_b, pipe4.port_a);
connect(pipe4.port_b, boundary1.ports[1]);
connect(ClosedVolume.ports[1], pipe3.port_a);
connect(ClosedVolume.ports, Swept1.ports);
end modelmitclosedvolume;
Ответ №1:
Я думаю, что последнее соединение должно быть
connect(ClosedVolume.ports[2], Swept1.ports[1]);
и для Swept1
этого должно быть nPorts = 1
.
Если затем добавить ввод в HDVentile, например, с помощью
HDVentile.opening = 0;
система должна работать.
Фон: nports
соответствует количеству подключений к компоненту. Тогда вы обычно подключаете только одну строку к каждому порту. Поэтому вам нужно два для ClosedVolume
и один для Swept1
.