Как устранить ошибку, относящуюся к переменной, не расположенной в моей модели OpenModelica? - PullRequest
2 голосов
/ 29 марта 2019

В настоящее время я работаю над созданием парогенератора с рекуперацией тепла и только что начал строить из библиотеки ThermoPower и подключил испаритель к экономайзеру.При попытке моделирования происходит ошибка в симуляторе OMEdit:

деление на ноль в момент времени 0, (a = -458389.9207317767) / (b = 0), где выражение делителя b: 8.75988806777792 * Economizer.metalTube.Am * Economizer.metalTube.rhomcm * /Real/(Economizer.metalTube.Nt)

Как именно я могу устранить эту ошибку, если не могу определить или найти необходимые переменные, которыевызывая б = 0?Пожалуйста, дайте мне знать, что вы думаете об этом.Ваше время и энергия очень ценятся.

Я не лучший в отладке своих моделей, но у меня есть идея, и у меня возникла путаница при съемке.Моя первоначальная путаница заключалась в том, чтобы проверить, какая переменная привела к b = 0.Однако после проверки я заметил, что переменная Economizer.metalTube.Nt, Economizer.metalTube.Am не существует в моем классе Economizer.Я знал, что его нужно внедрить в мой класс с помощью расширений и частичных классов, и пытался определить эти «отсутствующие» переменные в текстовом представлении моей модели экономайзера, но это просто привело к ошибке, говорящей:

[1] 11:46:14 Ошибка перевода [ThermoPower_HRSG_Econ_Evap: 68: 3-92: 112]: Экономайзер переменных: в модификаторе (Nt = 3) класс или компонент Nt не найдены.

Если у вас есть какие-либо рекомендациии / или рекомендации, пожалуйста, оставьте комментарий ниже!

/// ОБНОВЛЕНИЕ: движение вперед после того, что я узнал от других, и реализация их предложений .///

После прочтения того, что вы и другие сказали о моей проблеме с OpenModelica, у меня естьприйти к лучшему пониманию ситуации.Тем не менее, я все еще не понимаю, каков наилучший способ продвижения вперед для отладки моей модели.

Итак, моя модель «Economizer» или теплообменник, расположенный в ThermoPower.Examples.RankineCycles.Models.HE,возникла ошибка, связанная с делителем «b = 0».

При отладке ошибка связывала меня с пакетом «thermal», который указывал мне на строку кода, которая помечается:

(L/Nw*Nt)*rhomcm*Am*der(Tvol) = int.Q + ext.Q "Energy balance";

Эта строка кода также используется в классе Economizer HE (ThermoPower.Examples.RankineCycles.Models.HE).Здесь, в HE.mo, также находится та же помеченная строка кода из теплового пакета, которая вызывает ошибку.Что делает мою модель причиной того, что делителем "b = 0" являются переменные: L, Nw, Nt, Am и Tvol.Эти переменные не определены / не найдены в модели, которую я использую при определении параметров системы.

Что меня смущает как пользователя OpenModelica, так это то, что упомянутые выше переменные (L, Nw, Nt, Am и Tvol) кодируются / определяются в текстовом представлении ThermoPower.Examples.RankineCycles.Models.HEкомпонента, но когда я пытаюсь определить / добавить их в свой Economizer.mo, принадлежащий к классу ThermoPower.Examples.RankineCycles.Models.HE, возникают ошибки, утверждающие:

[ThermoPower_HRSG_Econ_Evap: 69:3-94:112]: Variable Economizer: In modifier 
(Nt = 1), class or component Nt not found in 
<ThermoPower.Examples.RankineCycle.Models.HE$Economizer>.

По существу, ошибки, вызывающиеделитель "b = 0" находится в базовом классе экономайзера, который я использую.Однако из-за отсутствия или невозможности определить эти необходимые переменные в моей модели Economizer.mo, уравнение:

(L/Nw*Nt)*rhomcm*Am*der(Tvol) = int.Q + ext.Q "Energy balance";

теперь нарушается.Как я могу исправить эту проблему правильно?

/// ОБНОВЛЕНИЕ: КОД УКАЗАН НИЖЕ ///

model ThermoPower_HRSG_Econ_Evap

ThermoPower.Gas.SourceMassFlow Source_FlueGas(
redeclare package Medium = ThermoPower.Media.FlueGas, 
T = 331.59 + 273.15, 
p0 = 101325, 
w0 = 169.755)  annotation(
Placement(visible = true, transformation(origin = {-92, 30}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

ThermoPower.Water.SourceMassFlow Source_Steam(
T = 46.45 + 273.15, 
h = 203.22e3, 
p0 = 80e5, 
use_T = true, 
w0 = 21.5)  annotation(
Placement(visible = true, transformation(origin = {-10, 90}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

ThermoPower.Water.SensT sensT_WaterIn_Econ annotation(
Placement(visible = true, transformation(origin = {4, 60}, extent = {{-10, 
-10}, {10, 10}}, rotation = -90)));

ThermoPower.Water.SensT sensT_WaterOut_Econ annotation(
Placement(visible = true, transformation(origin = {4, 0}, extent = {{-10, 
-10}, {10, 10}}, rotation = -90)));

ThermoPower.Gas.SensT sensT_ExhaustIn_Econ(
redeclare package Medium = ThermoPower.Media.FlueGas)  annotation(
Placement(visible = true, transformation(origin = {-50, 34}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

ThermoPower.Gas.SensT sensT_ExhaustOut_Econ(
redeclare package Medium = ThermoPower.Media.FlueGas)  annotation(
Placement(visible = true, transformation(origin = {50, 34}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

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

ThermoPower.Gas.SinkPressure Sink_FlueGas(
redeclare package Medium = ThermoPower.Media.FlueGas, 
p0 = 101325)  annotation(
Placement(visible = true, transformation(origin = {94, -70}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

ThermoPower.Water.SinkPressure Sink_Steam(
p0 = 80e5)  annotation(
Placement(visible = true, transformation(origin = {10, -90}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

ThermoPower.Examples.HRB.Models.Evaporator Evaporator(
cm = 480,
exchSurface = 2.752, 
fluidNomFlowRate = 21.5, 
fluidNomPressure = 8e+06, 
fluidVol = 0.01376, 
gamma = 85, 
gasNomFlowRate = 169.755, 
gasNomPressure = 101325, 
gasVol = 0.01376, 
metalVol = 0.01376, 
rhom(displayUnit = "kg/m3") = 8055, 
rhonom_G = 1)  annotation(
Placement(visible = true, transformation(origin = {0, -50}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

ThermoPower.Gas.SensT sensT_ExhaustOut_Evap(
redeclare package Medium = ThermoPower.Media.FlueGas)  annotation(
Placement(visible = true, transformation(origin = {50, -66}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

Modelica.Blocks.Continuous.FirstOrder VoidFractionSensor annotation(
Placement(visible = true, transformation(origin = {53, -43}, extent = 
{{-5, -5}, {5, 5}}, rotation = 0)));

Modelica.Blocks.Interfaces.RealOutput VoidFraction annotation(
Placement(visible = true, transformation(origin = {110, -42}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0), iconTransformation(origin = {110, 
-42}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));

ThermoPower.Examples.RankineCycle.Models.HE Economizer(
FFtype_G = ThermoPower.Choices.Flow1D.FFtypes.OpPoint,
FluidPhaseStart = ThermoPower.Choices.FluidPhase.FluidPhases.Liquid,
N_F = 6, 
N_G = 6,
Tstart_G = 604.74, 
Tstart_M = 573.15, counterCurrent = true, 
exchSurface_F = 2.752, 
exchSurface_G = 2.752, 
extSurfaceTub = 5.504, 
fluidNomFlowRate = 21.5, 
fluidNomPressure = 8e+06, 
fluidVol = 0.01376, 
gamma_F = 3000, 
gamma_G = 30, 
gasNomFlowRate = 169.755, 
gasNomPressure = 101325, 
gasVol = 0.01376, 
lambda = 19.8, 
metalVol = 0.01376, 
rhomcm = 8055 * 480, 
rhonom_F(displayUnit = "kg/m3") = 997, 
rhonom_G = 1)  annotation(
Placement(visible = true, transformation(origin = {0, 30}, extent = {{-10, 
-10}, {10, 10}}, rotation = 0)));

equation
connect(Economizer.gasOut, sensT_ExhaustOut_Econ.inlet) annotation(
Line(points = {{10, 30}, {44, 30}, {44, 30}, {44, 30}}, color = {159, 159, 
223}));
connect(sensT_ExhaustIn_Econ.outlet, Economizer.gasIn) annotation(
Line(points = {{-44, 30}, {-10, 30}, {-10, 30}, {-10, 30}}, color = {159, 
159, 223}));
connect(Economizer.waterOut, sensT_WaterOut_Econ.inlet) annotation(
Line(points = {{0, 20}, {0, 20}, {0, 6}, {0, 6}}, color = {0, 0, 255}));
connect(sensT_WaterIn_Econ.outlet, Economizer.waterIn) annotation(
Line(points = {{0, 54}, {0, 54}, {0, 40}, {0, 40}}, color = {0, 0, 255}));
connect(VoidFractionSensor.y, VoidFraction) annotation(
Line(points = {{58, -42}, {104, -42}, {104, -42}, {110, -42}}, color = {0, 
0, 127}));
connect(Evaporator.voidFraction, VoidFractionSensor.u) annotation(
Line(points = {{10, -44}, {46, -44}, {46, -42}, {46, -42}}, color = {0, 0, 
127}));
connect(sensT_ExhaustOut_Evap.outlet, Sink_FlueGas.flange) annotation(
Line(points = {{56, -70}, {70, -70}, {70, -70}, {84, -70}, {84, -70}, {84, 
-70}}, color = {159, 159, 223}));
connect(Evaporator.gasOut, sensT_ExhaustOut_Evap.inlet) annotation(
Line(points = {{10, -50}, {26, -50}, {26, -70}, {44, -70}}, color = {159, 
159, 223}));
connect(sensT_ExhaustOut_Econ.outlet, Evaporator.gasIn) annotation(
Line(points = {{56, 30}, {68, 30}, {68, -20}, {-50, -20}, {-50, -20}, 
{-70, -20}, {-70, -50}, {-10, -50}, {-10, -50}}, color = {159, 159, 
223}));
connect(sensT_WaterOut_Econ.outlet, Evaporator.waterIn) annotation(
Line(points = {{0, -6}, {0, -40}}, color = {0, 0, 255}));
connect(Evaporator.waterOut, Sink_Steam.flange) annotation(
Line(points = {{0, -60}, {0, -90}}, color = {0, 0, 255}));
connect(Source_FlueGas.flange, sensT_ExhaustIn_Econ.inlet) annotation(
Line(points = {{-82, 30}, {-56, 30}}, color = {159, 159, 223}));
connect(Source_Steam.flange, sensT_WaterIn_Econ.inlet) annotation(
Line(points = {{0, 90}, {0, 66}}, color = {0, 0, 255}));
annotation(
uses(ThermoPower(version = "3.1"), Modelica(version = "3.2.3")));end 
ThermoPower_HRSG_Econ_Evap;
...