Правильно ли я включаю эту вложенную функцию в OpenModelica?

ПРИМЕЧАНИЕ. Этот вопрос относится к PrescribedSpeedPump.mo, расположенному в ThermoPower.Examples.RankineCycle.Models.PrescribedSpeedPump.

Я пытаюсь создать простую модель насоса, поскольку все модели, которые я создаю с этим насосом, всегда выдают одно и то же сообщение об ошибке:

[1] 16:02:01 Ошибка перевода [ThermoPower.PowerPlants: 2071: 95-2071: 108]: переменная q_nom не найдена в области ThermoPower.PowerPlants.HRSG.Components.

[2] 16:02:01 Ошибка перевода [ThermoPower.PowerPlants: 2076: 84-2076: 132]: циклически зависимые константы или параметры, обнаруженные в области: {q_nom}, {head_nom} (игнорировать с помощью -d = ignoreCycles).

При осмотре этого PrescribedSpeedPump он состоит из двух классов: «FluidMedium» и «flowCharacteristic». Это функция - «FlowCharacteristic», которая приводит к ошибке.

Почему я запутался: ошибка говорит о том, что не удается найти переменную q_nom на пути ThermoPower.PowerPlants.HRSG.Components. Что ж, как упоминалось ранее, я сказал, что это находится в пакете примеров библиотеки ThermoPower.

Еще одна причина, по которой меня смущает эта ситуация, заключается в том, что я могу вручную вводить значения параметров как для q_nom, так и для head_nom. Им обоим присвоены фиктивные значения {1,2,3}. Тем не менее, переменная «не может быть найдена».

Наконец, я попробовал вручную отредактировать функцию "flowCharacteristic", а затем попытался проверить свою модель. По-прежнему появляется та же ошибка. Я действительно не знаю, как устранить эту ошибку на данный момент, и пробовал все, что смог придумать.

Если у вас есть какие-либо идеи или предложения, не стесняйтесь оставлять комментарии ниже! Спасибо, что дочитали до этого места, я ценю ваше время и усилия в попытках помочь другим в этом сообществе. Ниже я скопировал код на свою модель помпы.

КОД ОБНОВЛЕН:

model Pump_Verified


function flowCharacteristic =
ThermoPower.Functions.PumpCharacteristics.quadraticFlow (
q_nom = q_nom, head_nom = head_nom);

ThermoPower.PowerPlants.HRSG.Components.PrescribedSpeedPump
prescribedSpeedPump1(
redeclare package WaterMedium = ThermoPower.Water.StandardWater,
Np0 = 1,
V = 20,
head_nom = {1, 2, 3},
hstart = 451024,
n0 = 1200,
nominalFlow = 142.512,
nominalInletPressure=132000,
nominalOutletPressure=8581000,
q_nom = {1, 2, 3},
rho0=1000)
          annotation (
Placement(visible = true, transformation(origin = {2, 0}, extent = {{-10,
-10}, {10, 10}}, rotation = 0)));

ThermoPower.Examples.RankineCycle.Models.PrescribedPressureCondenser
Condenser(
Vtot = 50,
p = 132000)  annotation (
Placement(visible = true, transformation(origin = {-50, 40}, extent = 
{{-10,
-10}, {10, 10}}, rotation = 0)));

ThermoPower.PowerPlants.SteamTurbineGroup.Components.StateReader_water
stateReader_water1 annotation (
Placement(visible = true, transformation(origin = {-50, 70}, extent = 
{{-10,
-10}, {10, 10}}, rotation = -90)));

ThermoPower.PowerPlants.SteamTurbineGroup.Components.StateReader_water
stateReader_water2 annotation (
Placement(visible = true, transformation(origin = {-50, 10}, extent = 
{{-10,
-10}, {10, 10}}, rotation = -90)));

ThermoPower.Water.SourceMassFlow SourceSteamFlow(
T = 380.561 - 273,
h = 931235,
p0 = 1.32e5,
w0 = 142.512)  annotation (
Placement(visible = true, transformation(origin = {-72, 84}, extent = 
{{-10,
-10}, {10, 10}}, rotation = 0)));

ThermoPower.Water.SinkMassFlow SinkWaterFlow annotation (
Placement(visible = true, transformation(origin = {52, 0}, extent = {{-10,
-10}, {10, 10}}, rotation = 0)));

inner ThermoPower.System system annotation (
Placement(visible = true, transformation(origin = {90, 88}, extent = 
{{-10,
-10}, {10, 10}}, rotation = 0)));

ThermoPower.Water.SensP sensP_Inlet annotation(
Placement(visible = true, transformation(origin = {-32, 4}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

ThermoPower.Water.SensP sensP_Outlet annotation(
Placement(visible = true, transformation(origin = {26, 4}, extent = {{-10, 
-10}, {10, 10}}, rotation = 0)));

Modelica.Blocks.Sources.Constant const(k = 1200)  annotation(
Placement(visible = true, transformation(origin = {-10, 66}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

equation
connect(const.y, prescribedSpeedPump1.pumpSpeed_rpm) annotation(
Line(points = {{2, 66}, {10, 66}, {10, 30}, {-18, 30}, {-18, 6}, {-6, 6}, 
{-6, 6}}, color = {0, 0, 127}));
connect(sensP_Outlet.flange, SinkWaterFlow.flange) annotation(
Line(points = {{26, 0}, {42, 0}, {42, 0}, {42, 0}}, color = {0, 0, 255}));
connect(prescribedSpeedPump1.outlet, sensP_Outlet.flange) annotation(
Line(points = {{12, 0}, {26, 0}, {26, 0}, {26, 0}}, color = {0, 0, 255}));
connect(sensP_Inlet.flange, prescribedSpeedPump1.inlet) annotation(
Line(points = {{-32, 0}, {-8, 0}, {-8, 0}, {-8, 0}}, color = {0, 0, 
255}));
connect(stateReader_water2.outlet, sensP_Inlet.flange) annotation(
Line(points = {{-50, 4}, {-50, 4}, {-50, 0}, {-32, 0}, {-32, 0}}, color = 
{0, 0, 255}));
connect(Condenser.waterOut, stateReader_water2.inlet) annotation(
Line(points = {{-50, 30}, {-50, 16}}, color = {0, 0, 255}));
connect(stateReader_water1.outlet, Condenser.steamIn) annotation(
Line(points = {{-50, 64}, {-50, 50}}, color = {0, 0, 255}));
connect(SourceSteamFlow.flange, stateReader_water1.inlet) annotation(
Line(points = {{-62, 84}, {-50, 84}, {-50, 76}, {-50, 76}, {-50, 76}}, 
color = {0, 0, 255}));
annotation (
uses(ThermoPower(version = "3.1"), Modelica(version="3.2.2")));

end Pump_Verified;

person finnahuss    schedule 05.03.2019    source источник


Ответы (1)


Вы используете ThermoPower.PowerPlants.HRSG.Components.PrescribedSpeedPump, но похоже, что вы хотите его изменить, в частности:

  • Функция flowCharacteristic уже существует в этой модели, но ее нельзя заменить, поэтому вы не можете ее изменить, и вы в любом случае не можете использовать q_nom из модели при повторном объявлении. Но поскольку он уже является квадратичным, менять его не нужно.
  • Носитель не указан для этого компонента (при условии, что я использовал правильную версию ThermoPower).
  • Насос предписанной скорости имеет неподключенный вход.

Если вы просто хотите его использовать:

  • Удалить функцию flowCharacteristic
  • Повторно объявить средний
  • Подключите какой-нибудь сигнал к насосу

По крайней мере, в Дымоле работает:

model Pump_Check

function flowCharacteristic =
ThermoPower.Functions.PumpCharacteristics.quadraticFlow (
q_nom = q_nom, head_nom = head_nom);

ThermoPower.PowerPlants.HRSG.Components.PrescribedSpeedPump
prescribedSpeedPump1(
    redeclare package WaterMedium = ThermoPower.Water.StandardWater,
Np0 = 1,
V = 20,
head_nom = {1, 2, 3},
hstart = 451024,
n0 = 1200,
nominalFlow = 142.512,
    nominalInletPressure=132000,
    nominalOutletPressure=8581000,
q_nom = {1, 2, 3},
    rho0=1000)
              annotation (
Placement(visible = true, transformation(origin = {2, 0}, extent = {{-10,
-10}, {10, 10}}, rotation = 0)));

ThermoPower.Examples.RankineCycle.Models.PrescribedPressureCondenser
Condenser(
Vtot = 50,
p = 132000)  annotation (
Placement(visible = true, transformation(origin = {-50, 40}, extent = {{-10,
-10}, {10, 10}}, rotation = 0)));

ThermoPower.PowerPlants.SteamTurbineGroup.Components.StateReader_water
stateReader_water1 annotation (
Placement(visible = true, transformation(origin = {-50, 70}, extent = {{-10,
-10}, {10, 10}}, rotation = -90)));

ThermoPower.PowerPlants.SteamTurbineGroup.Components.StateReader_water
stateReader_water2 annotation (
Placement(visible = true, transformation(origin = {-50, 10}, extent = {{-10,
-10}, {10, 10}}, rotation = -90)));

ThermoPower.Water.SourceMassFlow SourceSteamFlow(
T = 380.561 - 273,
h = 931235,
p0 = 1.32e5,
w0 = 142.512)  annotation (
Placement(visible = true, transformation(origin = {-72, 84}, extent = {{-10,
-10}, {10, 10}}, rotation = 0)));

ThermoPower.Water.SinkMassFlow SinkWaterFlow annotation (
Placement(visible = true, transformation(origin = {52, 0}, extent = {{-10,
-10}, {10, 10}}, rotation = 0)));
inner ThermoPower.System system annotation (
Placement(visible = true, transformation(origin = {90, 88}, extent = {{-10,
-10}, {10, 10}}, rotation = 0)));
  Modelica.Blocks.Interfaces.RealInput pumpSpeed_rpm1
    annotation (Placement(transformation(extent={{-46,66},{-6,106}})));
equation 
connect(prescribedSpeedPump1.outlet, SinkWaterFlow.flange) annotation (
Line(points = {{12, 0}, {42, 0}, {42, 0}, {42, 0}}, color = {0, 0, 255}));
connect(stateReader_water2.outlet, prescribedSpeedPump1.inlet) annotation (
Line(points = {{-50, 4}, {-50, 4}, {-50, 0}, {-8, 0}, {-8, 0}}, color = {0,
0, 255}));
connect(Condenser.waterOut, stateReader_water2.inlet) annotation (
Line(points={{-50,30},{-50,16}},                            color = {0, 0,
255}));
connect(stateReader_water1.outlet, Condenser.steamIn) annotation (
Line(points={{-50,64},{-50,50}},                            color = {0, 0,
255}));
connect(SourceSteamFlow.flange, stateReader_water1.inlet) annotation (
Line(points = {{-62, 84}, {-50, 84}, {-50, 76}, {-50, 76}, {-50, 76}}, color=
  {0, 0, 255}));

  connect(prescribedSpeedPump1.pumpSpeed_rpm, pumpSpeed_rpm1) annotation (Line(
        points={{-5.2,6},{-16,6},{-16,86},{-26,86}}, color={0,0,127}));
annotation (
uses(ThermoPower(version = "3.1"), Modelica(version="3.2.2")));
end Pump_Check;
person Hans Olsson    schedule 06.03.2019
comment
Привет, @HansOlsson! Просто хотел сообщить вам, что предоставленный вами код действительно привел к проверенной модели, которая создает экземпляры, а также моделирует. Спасибо! Хотя я все еще получаю те же ошибки, что упоминалось ранее, наконец, он работает, за что я благодарен. Однако при моделировании давление на выходе не изменяется до заданного значения I и остается постоянным по отношению к давлению на входе. У вас есть идеи, как решить эту проблему? Это было определено путем добавления SensP или датчиков давления на входе и выходе насоса. Дайте мне знать, что вы думаете! Спасибо! - person finnahuss; 06.03.2019
comment
Сначала очевидное: вы подключили к насосу нормальный сигнал - например, пандус? Я считаю, что для таких входов используются значения 0, что не очень хорошо работает. - person Hans Olsson; 07.03.2019
comment
Изначально я не моделировал никаких обычных сигналов. Я бы просто запустил моделирование кода, который вы скопировали ранее в этом потоке. - person finnahuss; 07.03.2019
comment
Изначально я не моделировал никаких обычных сигналов. Я бы просто запустил моделирование кода, который вы скопировали ранее в этом потоке. Это моделирование выполнялось даже при отсутствии входного сигнала. - person finnahuss; 07.03.2019
comment
Однако я не понимаю, как подключить входной сигнал к компоненту RealInput. Это связано с тем, что код, который вы разместили выше, имеет связь между Modelica.Blocks.Interfaces.RealInput и pumpSpeed_rpm предписанногоSpeedPump исходит из-за треугольника, а не из точки. Моим первым побуждением было бы передать компонент RealInput с помощью входного сигнала, при этом компонент RealInput затем подал бы на вход предписанной скорости SpeedPump. Дайте мне знать, что вы думаете. Спасибо еще раз. - person finnahuss; 07.03.2019
comment
Я обновил свой код, приведенный выше, в соответствии с тем, с чем я работаю. - person finnahuss; 07.03.2019