变步长仿真时We_input输入阶跃信号offset=1e8,starttime=1000,height=5e7后仿真卡0s,不报错。输入常数constant=1e8可以正常仿真。定步长以上输入均能正常仿真,跑的很慢。
model CHP "热电联产机组模型"
annotation(__MWORKS(version = "2025a", ContinueSimConfig(SaveContinueFile = "false", SaveBeforeStop = "false", NumberBeforeStop = 1, FixedContinueInterval = "false", ContinueIntervalLength = 20, ContinueTimeVector)), experiment(Algorithm = Dassl, InlineIntegrator = false, InlineStepSize = false, Interval = 1, StartTime = 0, StopTime = 2000, Tolerance = 0.0001));
import SI = Modelica.Units.SI;
import Modelica.Fluid.Types;
import Modelica.Fluid.Types.Dynamics;
replaceable package Medium = Modelica.Media.Water.StandardWater "流体介质选择"
annotation(Dialog(group = "流体介质选择"), choicesAllMatching = true)
constrainedby Modelica.Media.Interfaces.PartialMedium;
parameter SI.Power We_max(displayUnit = "MW") = 3.7e8 "额定电功率";
parameter SI.Power Wh_max(displayUnit = "MW") = 1.064e9 "额定热功率";
parameter SI.Power We_set_start(displayUnit = "MW") = 1e8 "设定初始电功率"
annotation(Dialog(tab = "初始化"));
parameter SI.Power Wh_set_start(displayUnit = "MW") = 3e8 "设定初始热功率"
annotation(Dialog(tasb = "初始化"));
parameter Real We_ramp_HSR(displayUnit = "W/s") = 8.33e4 "电定热,电功率爬坡速率 5MW/min";
parameter Real We_ramp_BTCC(displayUnit = "W/s") = 3.7e5 "热定电,电功率爬坡速率 22.3MW/min";
parameter Boolean adjustment_mode = false "运行调节模式,false为热定电BTCC,true为电定热HSR"
annotation(Dialog(tab = "初始化"));
parameter SI.Pressure dp = 100000 "CHP损失(暂定)";
parameter SI.Temperature T_in_start = 337.65 "入口水温"
annotation(Dialog(tab = "初始化"));
parameter SI.Temperature T_out_start = 388.15 "出口水温"
annotation(Dialog(tab = "初始化"));
Medium.ExtraProperty C[Medium.nC] "示踪物质混合物含量";
SI.Power We(start = We_set_start) "电功率,W";
SI.Power Wh(start = Wh_set_start) "热功率,W";
Real s "电功率与实际电功率是否相等";
Real r "实际爬坡速率";
SI.Temperature T_in(start = T_in_start);
SI.Temperature T_out(start = T_out_start);
SI.Power We_set(start = We_set_start) "输入电功率";
//组件实例化
Modelica.Fluid.Interfaces.FluidPort_a port_a
annotation(Placement(transformation(origin = {-98, -4},
extent = {{-10, -10}, {10, 10}})));
Modelica.Fluid.Interfaces.FluidPort_b port_b
annotation(Placement(transformation(origin = {102, -4},
extent = {{-10, -10}, {10, 10}})));
Modelica.Blocks.Interfaces.RealOutput We_out
annotation(Placement(transformation(origin = {102, 98},
extent = {{-10, -10}, {10, 10}})));
Modelica.Blocks.Interfaces.RealOutput Wh_out
annotation(Placement(transformation(origin = {72, 98},
extent = {{-10, -10}, {10, 10}})));
Modelica.Blocks.Interfaces.RealInput We_input
annotation(Placement(transformation(origin = {4, 104},
extent = {{-20, -20}, {20, 20}},
rotation = -90)), __MWORKS(ShowPortName = true));
Modelica.Blocks.Interfaces.RealOutput CHP_h
annotation(Placement(transformation(origin = {-98, 40},
extent = {{-10, -10}, {10, 10}})));
Modelica.Blocks.Interfaces.RealOutput CHP_g
annotation(Placement(transformation(origin = {102, 40},
extent = {{-10, -10}, {10, 10}})));
equation
We_input = We_set;
s = if We_set > We then 1 else if We_set < We then -1 else 0;
r = if adjustment_mode then We_ramp_HSR else We_ramp_BTCC;
der(We) = r * s;
der(Wh) = (if adjustment_mode then -1 else 1) * r * s;
We_out = We;
Wh_out = Wh;
CHP_h = T_in;
CHP_g = T_out;
port_b.h_outflow = Wh / port_a.m_flow + inStream(port_a.h_outflow);
port_a.p = port_b.p + dp;
port_a.m_flow = -port_b.m_flow;
T_in = Modelica.Media.Water.IF97_Utilities.T_ph(port_a.p, port_a.h_outflow);
T_out = Modelica.Media.Water.IF97_Utilities.T_ph(port_b.p, port_b.h_outflow);
inStream(port_a.h_outflow) = port_a.h_outflow;
port_a.Xi_outflow = inStream(port_b.Xi_outflow);
port_b.Xi_outflow = inStream(port_a.Xi_outflow);
port_a.C_outflow = C;
port_b.C_outflow = C;
end CHP;

