管道模型在 openmodelica 中无法正常工作
所以这个问题遵循另一个帖子。
在查看了 ModelicaStandardLibrary
的 DynamicPipe
模型结构后,我决定使用它来模拟空心流体。基本上我所做的是添加一个与外径相对应的参数并重新制定面积的计算。为了做到这一点,我没有扩展 PartialStraigthPipe,而是重写了它,添加了一个新参数并重新制定了面积的计算。其余的只是 DynamicPipe
的复制和粘贴,因为体积是基于面积计算的。我一直小心地为区域保留相同的变量名称:crossArea
,因为它在很多公式中使用。
然后我尝试在模型中使用它。检查模型不是问题,但当我启动模拟时,我收到以下警告,并且模拟根据参数以一定百分比停止。我不明白有关温度的警告,因为我没有在模型参数中声明这样的温度。
下面是空心管模型的代码:
model Hollow_Pipe
import Modelica.Fluid.Types.ModelStructure;
import SI = Modelica.SIunits;
import Modelica.Constants.pi;
import Modelica.Constants;
// Geometry
// Note: define nParallel as Real to support inverse calculations
parameter Real nParallel(min = 1) = 1 "Number of identical parallel pipes" annotation(
Dialog(group = "Geometry"));
parameter SI.Length length "Length" annotation(
Dialog(tab = "General", group = "Geometry"));
parameter Boolean isCircular = true "= true if cross sectional area is circular" annotation(
Evaluate,
Dialog(tab = "General", group = "Geometry"));
parameter SI.Diameter diameter "Inner diameter of hollow pipe" annotation(
Dialog(group = "Geometry", enable = isCircular));
parameter SI.Diameter DX "Outer diameter of hollow pipe";
parameter SI.Area crossArea = pi * DX * DX / 4 - pi * diameter * diameter / 4 "Inner cross section area" annotation(
Dialog(tab = "General", group = "Geometry", enable = not isCircular));
parameter SI.Length perimeter(min = 0) = pi * diameter "Inner perimeter" annotation(
Dialog(tab = "General", group = "Geometry", enable = not isCircular));
parameter Modelica.Fluid.Types.Roughness roughness = 2.5e-5 "Average height of surface asperities (default: smooth steel pipe)" annotation(
Dialog(group = "Geometry"));
final parameter SI.Volume V = crossArea * length * nParallel "volume size";
// Static head
parameter SI.Length height_ab = 0 "Height(port_b) - Height(port_a)" annotation(
Dialog(group = "Static head"));
// Pressure loss
replaceable model FlowModel = Modelica.Fluid.Pipes.BaseClasses.FlowModels.DetailedPipeFlow constrainedby Modelica.Fluid.Pipes.BaseClasses.FlowModels.PartialStaggeredFlowModel "Wall friction, gravity, momentum flow" annotation(
Dialog(group = "Pressure loss"),
choicesAllMatching = true);
// extending PartialTwoPortFlow
extends Modelica.Fluid.Pipes.BaseClasses.PartialTwoPortFlow(final lengths = fill(length / n, n), final crossAreas = fill(crossArea, n), final dimensions = fill(4 * crossArea / perimeter, n), final roughnesses = fill(roughness, n), final dheights = height_ab * dxs);
// Wall heat transfer
parameter Boolean use_HeatTransfer = false "= true to use the HeatTransfer model" annotation(
Dialog(tab = "Assumptions", group = "Heat transfer"));
replaceable model HeatTransfer = Modelica.Fluid.Pipes.BaseClasses.HeatTransfer.IdealFlowHeatTransfer constrainedby Modelica.Fluid.Pipes.BaseClasses.HeatTransfer.PartialFlowHeatTransfer "Wall heat transfer" annotation(
Dialog(tab = "Assumptions", group = "Heat transfer", enable = use_HeatTransfer),
choicesAllMatching = true);
Modelica.Fluid.Interfaces.HeatPorts_a[nNodes] heatPorts if use_HeatTransfer annotation(
Placement(transformation(extent = {{-10, 45}, {10, 65}}), iconTransformation(extent = {{-30, 36}, {32, 52}})));
HeatTransfer heatTransfer(redeclare final package Medium = Medium, final n = n, final nParallel = nParallel, final surfaceAreas = perimeter * lengths, final lengths = lengths, final dimensions = dimensions, final roughnesses = roughnesses, final states = mediums.state, final vs = vs, final use_k = use_HeatTransfer) "Heat transfer model" annotation(
Placement(transformation(extent = {{-45, 20}, {-23, 42}})));
final parameter Real[n] dxs = lengths / sum(lengths);
equation
assert(length >= height_ab, "Parameter length must be greater or equal height_ab.");
Qb_flows = heatTransfer.Q_flows;
// Wb_flow = v*A*dpdx + v*F_fric
// = v*A*dpdx + v*A*flowModel.dp_fg - v*A*dp_grav
if n == 1 or useLumpedPressure then
Wb_flows = dxs * (vs * dxs * (crossAreas * dxs) * (port_b.p - port_a.p + sum(flowModel.dps_fg) - system.g * (dheights * mediums.d))) * nParallel;
else
if modelStructure == ModelStructure.av_vb or modelStructure == ModelStructure.av_b then
Wb_flows[2:n - 1] = {vs[i] * crossAreas[i] * ((mediums[i + 1].p - mediums[i - 1].p) / 2 + (flowModel.dps_fg[i - 1] + flowModel.dps_fg[i]) / 2 - system.g * dheights[i] * mediums[i].d) for i in 2:n - 1} * nParallel;
else
Wb_flows[2:n - 1] = {vs[i] * crossAreas[i] * ((mediums[i + 1].p - mediums[i - 1].p) / 2 + (flowModel.dps_fg[i] + flowModel.dps_fg[i + 1]) / 2 - system.g * dheights[i] * mediums[i].d) for i in 2:n - 1} * nParallel;
end if;
if modelStructure == ModelStructure.av_vb then
Wb_flows[1] = vs[1] * crossAreas[1] * ((mediums[2].p - mediums[1].p) / 2 + flowModel.dps_fg[1] / 2 - system.g * dheights[1] * mediums[1].d) * nParallel;
Wb_flows[n] = vs[n] * crossAreas[n] * ((mediums[n].p - mediums[n - 1].p) / 2 + flowModel.dps_fg[n - 1] / 2 - system.g * dheights[n] * mediums[n].d) * nParallel;
elseif modelStructure == ModelStructure.av_b then
Wb_flows[1] = vs[1] * crossAreas[1] * ((mediums[2].p - mediums[1].p) / 2 + flowModel.dps_fg[1] / 2 - system.g * dheights[1] * mediums[1].d) * nParallel;
Wb_flows[n] = vs[n] * crossAreas[n] * ((port_b.p - mediums[n - 1].p) / 1.5 + flowModel.dps_fg[n - 1] / 2 + flowModel.dps_fg[n] - system.g * dheights[n] * mediums[n].d) * nParallel;
elseif modelStructure == ModelStructure.a_vb then
Wb_flows[1] = vs[1] * crossAreas[1] * ((mediums[2].p - port_a.p) / 1.5 + flowModel.dps_fg[1] + flowModel.dps_fg[2] / 2 - system.g * dheights[1] * mediums[1].d) * nParallel;
Wb_flows[n] = vs[n] * crossAreas[n] * ((mediums[n].p - mediums[n - 1].p) / 2 + flowModel.dps_fg[n] / 2 - system.g * dheights[n] * mediums[n].d) * nParallel;
elseif modelStructure == ModelStructure.a_v_b then
Wb_flows[1] = vs[1] * crossAreas[1] * ((mediums[2].p - port_a.p) / 1.5 + flowModel.dps_fg[1] + flowModel.dps_fg[2] / 2 - system.g * dheights[1] * mediums[1].d) * nParallel;
Wb_flows[n] = vs[n] * crossAreas[n] * ((port_b.p - mediums[n - 1].p) / 1.5 + flowModel.dps_fg[n] / 2 + flowModel.dps_fg[n + 1] - system.g * dheights[n] * mediums[n].d) * nParallel;
else
assert(false, "Unknown model structure");
end if;
end if;
connect(heatPorts, heatTransfer.heatPorts) annotation(
Line(points = {{0, 55}, {0, 54}, {-34, 54}, {-34, 38.7}}, color = {191, 0, 0}));
end Hollow_Pipe;
下面是我的系统的模型:
model Circuit_BT
//Define the properties of Fluid1 and Fluid2
replaceable package Medium=Modelica.Media.Water.StandardWater constrainedby
Modelica.Media.Interfaces.PartialMedium;
//Define the type of heat transfer for forced convection
replaceable model HeatTransfer_1 =
Modelica.Fluid.Pipes.BaseClasses.HeatTransfer.LocalPipeFlowHeatTransfer;
//Define the flow for pressure loss
replaceable model FlowModel_1 = Modelica.Fluid.Pipes.BaseClasses.FlowModels.DetailedPipeFlow;
inner Modelica.Fluid.System system;
//Definition of Fluid1
Modelica.Fluid.Pipes.DynamicPipe pipe(redeclare package Medium = Medium, redeclare final model HeatTransfer = HeatTransfer_1, redeclare final model FlowModel = FlowModel_1, T_start = 318.15, diameter = 12.8e-3,p_a_start=14.6e5, p_b_start = 14e5, energyDynamics = Modelica.Fluid.Types.Dynamics.DynamicFreeInitial, length = 15, massDynamics = Modelica.Fluid.Types.Dynamics.DynamicFreeInitial, momentumDynamics = Modelica.Fluid.Types.Dynamics.DynamicFreeInitial, nNodes = 10, nParallel = 1, use_HeatTransfer = true);
//Definition of Fluid2
BT_test.Hollow_Pipe pipe1(redeclare package Medium = Medium, redeclare final model HeatTransfer = HeatTransfer_1, redeclare final model FlowModel = FlowModel_1, T_start = 328.15, diameter = 18.8e-3, DX=25e-3, p_b_start = 14e5, energyDynamics = Modelica.Fluid.Types.Dynamics.DynamicFreeInitial, length = 15, massDynamics = Modelica.Fluid.Types.Dynamics.DynamicFreeInitial, momentumDynamics = Modelica.Fluid.Types.Dynamics.DynamicFreeInitial, nNodes = 10, nParallel = 1, use_HeatTransfer = true);
//Define the properties of the wall of the tube of Fluid1
Modelica.Fluid.Examples.HeatExchanger.BaseClasses.WallConstProps wallConstProps( T_start = 318.15,area_h = 0.89535390627, c_wall = 510, energyDynamics = Modelica.Fluid.Types.Dynamics.DynamicFreeInitial, k_wall = 60.5, n = 10, rho_wall = 7850, s = 6e-3);
//Inlet limit conditions for Fluid1
Modelica.Fluid.Sources.Boundary_pT boundary(redeclare package Medium = Medium,T=318.15, nPorts = 1, p = 14.6e5);
//Outlet limit conditions for Fluid1
Modelica.Fluid.Sources.Boundary_pT boundary1(redeclare package Medium = Medium, p = 14e5, nPorts = 1,use_T_in=true);
//Inlet limit conditions for Fluid2
Modelica.Fluid.Sources.MassFlowSource_T massflow(redeclare package
Medium = Medium, nPorts = 1, T = 353.15, use_m_flow_in=true);
//Outlet limit conditions for Fluid2
Modelica.Fluid.Sources.Boundary_pT boundary3(redeclare package Medium = Medium, nPorts = 1, p = 14e5,use_T_in=true);
//Coupure d'injection
Modelica.Blocks.Sources.Ramp coupure(startTime=5,
duration=2,
height=-0.2,
offset=0.2);
Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor sensor;
Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor sensor2;
equation
connect(boundary.ports[1], pipe.port_a);
connect(pipe.port_b, boundary1.ports[1]);
connect(massflow.ports[1], pipe1.port_a);
connect(coupure.y, massflow.m_flow_in);
connect(pipe1.port_b, boundary3.ports[1]);
connect(wallConstProps.heatPort_b, pipe.heatPorts);
connect(pipe1.heatPorts,wallConstProps.heatPort_a);
connect(sensor.T, boundary1.T_in);
connect(sensor.port,pipe.heatPorts[10]);
connect(sensor2.T,boundary3.T_in);
connect(sensor2.port,pipe1.heatPorts[10]);
end Circuit_BT;
有人可以帮助我吗? 此致, 马克西姆
so this question is following another post.
After looking the DynamicPipe
model structure of the ModelicaStandardLibrary
, I decided to use it to model a hollow fluid. Basically what I did is that I added a parameter corresponding to the outer diameter and reformulate the calculation of the area. In order to do that, instead of extending the PartialStraigthPipe
, I rewrote it, add a new parameter and reformulate the calculation of the area. The rest is just a copy and paste of the DynamicPipe
because the volumes are based on the area calculation. I have been careful to keep the same variable name for the area : crossArea
because it is used in a lot of formulas.
Then I tried to use it in a model. Checking the model is not an issue but when I launch the simulation I get the following warning and the simulation stops at some percentage depending of the parameters. I don't understand the warning about the temperature as I don't declare such a temprature in my model parameters.
Below is the code for the hollow pipe model :
model Hollow_Pipe
import Modelica.Fluid.Types.ModelStructure;
import SI = Modelica.SIunits;
import Modelica.Constants.pi;
import Modelica.Constants;
// Geometry
// Note: define nParallel as Real to support inverse calculations
parameter Real nParallel(min = 1) = 1 "Number of identical parallel pipes" annotation(
Dialog(group = "Geometry"));
parameter SI.Length length "Length" annotation(
Dialog(tab = "General", group = "Geometry"));
parameter Boolean isCircular = true "= true if cross sectional area is circular" annotation(
Evaluate,
Dialog(tab = "General", group = "Geometry"));
parameter SI.Diameter diameter "Inner diameter of hollow pipe" annotation(
Dialog(group = "Geometry", enable = isCircular));
parameter SI.Diameter DX "Outer diameter of hollow pipe";
parameter SI.Area crossArea = pi * DX * DX / 4 - pi * diameter * diameter / 4 "Inner cross section area" annotation(
Dialog(tab = "General", group = "Geometry", enable = not isCircular));
parameter SI.Length perimeter(min = 0) = pi * diameter "Inner perimeter" annotation(
Dialog(tab = "General", group = "Geometry", enable = not isCircular));
parameter Modelica.Fluid.Types.Roughness roughness = 2.5e-5 "Average height of surface asperities (default: smooth steel pipe)" annotation(
Dialog(group = "Geometry"));
final parameter SI.Volume V = crossArea * length * nParallel "volume size";
// Static head
parameter SI.Length height_ab = 0 "Height(port_b) - Height(port_a)" annotation(
Dialog(group = "Static head"));
// Pressure loss
replaceable model FlowModel = Modelica.Fluid.Pipes.BaseClasses.FlowModels.DetailedPipeFlow constrainedby Modelica.Fluid.Pipes.BaseClasses.FlowModels.PartialStaggeredFlowModel "Wall friction, gravity, momentum flow" annotation(
Dialog(group = "Pressure loss"),
choicesAllMatching = true);
// extending PartialTwoPortFlow
extends Modelica.Fluid.Pipes.BaseClasses.PartialTwoPortFlow(final lengths = fill(length / n, n), final crossAreas = fill(crossArea, n), final dimensions = fill(4 * crossArea / perimeter, n), final roughnesses = fill(roughness, n), final dheights = height_ab * dxs);
// Wall heat transfer
parameter Boolean use_HeatTransfer = false "= true to use the HeatTransfer model" annotation(
Dialog(tab = "Assumptions", group = "Heat transfer"));
replaceable model HeatTransfer = Modelica.Fluid.Pipes.BaseClasses.HeatTransfer.IdealFlowHeatTransfer constrainedby Modelica.Fluid.Pipes.BaseClasses.HeatTransfer.PartialFlowHeatTransfer "Wall heat transfer" annotation(
Dialog(tab = "Assumptions", group = "Heat transfer", enable = use_HeatTransfer),
choicesAllMatching = true);
Modelica.Fluid.Interfaces.HeatPorts_a[nNodes] heatPorts if use_HeatTransfer annotation(
Placement(transformation(extent = {{-10, 45}, {10, 65}}), iconTransformation(extent = {{-30, 36}, {32, 52}})));
HeatTransfer heatTransfer(redeclare final package Medium = Medium, final n = n, final nParallel = nParallel, final surfaceAreas = perimeter * lengths, final lengths = lengths, final dimensions = dimensions, final roughnesses = roughnesses, final states = mediums.state, final vs = vs, final use_k = use_HeatTransfer) "Heat transfer model" annotation(
Placement(transformation(extent = {{-45, 20}, {-23, 42}})));
final parameter Real[n] dxs = lengths / sum(lengths);
equation
assert(length >= height_ab, "Parameter length must be greater or equal height_ab.");
Qb_flows = heatTransfer.Q_flows;
// Wb_flow = v*A*dpdx + v*F_fric
// = v*A*dpdx + v*A*flowModel.dp_fg - v*A*dp_grav
if n == 1 or useLumpedPressure then
Wb_flows = dxs * (vs * dxs * (crossAreas * dxs) * (port_b.p - port_a.p + sum(flowModel.dps_fg) - system.g * (dheights * mediums.d))) * nParallel;
else
if modelStructure == ModelStructure.av_vb or modelStructure == ModelStructure.av_b then
Wb_flows[2:n - 1] = {vs[i] * crossAreas[i] * ((mediums[i + 1].p - mediums[i - 1].p) / 2 + (flowModel.dps_fg[i - 1] + flowModel.dps_fg[i]) / 2 - system.g * dheights[i] * mediums[i].d) for i in 2:n - 1} * nParallel;
else
Wb_flows[2:n - 1] = {vs[i] * crossAreas[i] * ((mediums[i + 1].p - mediums[i - 1].p) / 2 + (flowModel.dps_fg[i] + flowModel.dps_fg[i + 1]) / 2 - system.g * dheights[i] * mediums[i].d) for i in 2:n - 1} * nParallel;
end if;
if modelStructure == ModelStructure.av_vb then
Wb_flows[1] = vs[1] * crossAreas[1] * ((mediums[2].p - mediums[1].p) / 2 + flowModel.dps_fg[1] / 2 - system.g * dheights[1] * mediums[1].d) * nParallel;
Wb_flows[n] = vs[n] * crossAreas[n] * ((mediums[n].p - mediums[n - 1].p) / 2 + flowModel.dps_fg[n - 1] / 2 - system.g * dheights[n] * mediums[n].d) * nParallel;
elseif modelStructure == ModelStructure.av_b then
Wb_flows[1] = vs[1] * crossAreas[1] * ((mediums[2].p - mediums[1].p) / 2 + flowModel.dps_fg[1] / 2 - system.g * dheights[1] * mediums[1].d) * nParallel;
Wb_flows[n] = vs[n] * crossAreas[n] * ((port_b.p - mediums[n - 1].p) / 1.5 + flowModel.dps_fg[n - 1] / 2 + flowModel.dps_fg[n] - system.g * dheights[n] * mediums[n].d) * nParallel;
elseif modelStructure == ModelStructure.a_vb then
Wb_flows[1] = vs[1] * crossAreas[1] * ((mediums[2].p - port_a.p) / 1.5 + flowModel.dps_fg[1] + flowModel.dps_fg[2] / 2 - system.g * dheights[1] * mediums[1].d) * nParallel;
Wb_flows[n] = vs[n] * crossAreas[n] * ((mediums[n].p - mediums[n - 1].p) / 2 + flowModel.dps_fg[n] / 2 - system.g * dheights[n] * mediums[n].d) * nParallel;
elseif modelStructure == ModelStructure.a_v_b then
Wb_flows[1] = vs[1] * crossAreas[1] * ((mediums[2].p - port_a.p) / 1.5 + flowModel.dps_fg[1] + flowModel.dps_fg[2] / 2 - system.g * dheights[1] * mediums[1].d) * nParallel;
Wb_flows[n] = vs[n] * crossAreas[n] * ((port_b.p - mediums[n - 1].p) / 1.5 + flowModel.dps_fg[n] / 2 + flowModel.dps_fg[n + 1] - system.g * dheights[n] * mediums[n].d) * nParallel;
else
assert(false, "Unknown model structure");
end if;
end if;
connect(heatPorts, heatTransfer.heatPorts) annotation(
Line(points = {{0, 55}, {0, 54}, {-34, 54}, {-34, 38.7}}, color = {191, 0, 0}));
end Hollow_Pipe;
And below is the model of my system :
model Circuit_BT
//Define the properties of Fluid1 and Fluid2
replaceable package Medium=Modelica.Media.Water.StandardWater constrainedby
Modelica.Media.Interfaces.PartialMedium;
//Define the type of heat transfer for forced convection
replaceable model HeatTransfer_1 =
Modelica.Fluid.Pipes.BaseClasses.HeatTransfer.LocalPipeFlowHeatTransfer;
//Define the flow for pressure loss
replaceable model FlowModel_1 = Modelica.Fluid.Pipes.BaseClasses.FlowModels.DetailedPipeFlow;
inner Modelica.Fluid.System system;
//Definition of Fluid1
Modelica.Fluid.Pipes.DynamicPipe pipe(redeclare package Medium = Medium, redeclare final model HeatTransfer = HeatTransfer_1, redeclare final model FlowModel = FlowModel_1, T_start = 318.15, diameter = 12.8e-3,p_a_start=14.6e5, p_b_start = 14e5, energyDynamics = Modelica.Fluid.Types.Dynamics.DynamicFreeInitial, length = 15, massDynamics = Modelica.Fluid.Types.Dynamics.DynamicFreeInitial, momentumDynamics = Modelica.Fluid.Types.Dynamics.DynamicFreeInitial, nNodes = 10, nParallel = 1, use_HeatTransfer = true);
//Definition of Fluid2
BT_test.Hollow_Pipe pipe1(redeclare package Medium = Medium, redeclare final model HeatTransfer = HeatTransfer_1, redeclare final model FlowModel = FlowModel_1, T_start = 328.15, diameter = 18.8e-3, DX=25e-3, p_b_start = 14e5, energyDynamics = Modelica.Fluid.Types.Dynamics.DynamicFreeInitial, length = 15, massDynamics = Modelica.Fluid.Types.Dynamics.DynamicFreeInitial, momentumDynamics = Modelica.Fluid.Types.Dynamics.DynamicFreeInitial, nNodes = 10, nParallel = 1, use_HeatTransfer = true);
//Define the properties of the wall of the tube of Fluid1
Modelica.Fluid.Examples.HeatExchanger.BaseClasses.WallConstProps wallConstProps( T_start = 318.15,area_h = 0.89535390627, c_wall = 510, energyDynamics = Modelica.Fluid.Types.Dynamics.DynamicFreeInitial, k_wall = 60.5, n = 10, rho_wall = 7850, s = 6e-3);
//Inlet limit conditions for Fluid1
Modelica.Fluid.Sources.Boundary_pT boundary(redeclare package Medium = Medium,T=318.15, nPorts = 1, p = 14.6e5);
//Outlet limit conditions for Fluid1
Modelica.Fluid.Sources.Boundary_pT boundary1(redeclare package Medium = Medium, p = 14e5, nPorts = 1,use_T_in=true);
//Inlet limit conditions for Fluid2
Modelica.Fluid.Sources.MassFlowSource_T massflow(redeclare package
Medium = Medium, nPorts = 1, T = 353.15, use_m_flow_in=true);
//Outlet limit conditions for Fluid2
Modelica.Fluid.Sources.Boundary_pT boundary3(redeclare package Medium = Medium, nPorts = 1, p = 14e5,use_T_in=true);
//Coupure d'injection
Modelica.Blocks.Sources.Ramp coupure(startTime=5,
duration=2,
height=-0.2,
offset=0.2);
Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor sensor;
Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor sensor2;
equation
connect(boundary.ports[1], pipe.port_a);
connect(pipe.port_b, boundary1.ports[1]);
connect(massflow.ports[1], pipe1.port_a);
connect(coupure.y, massflow.m_flow_in);
connect(pipe1.port_b, boundary3.ports[1]);
connect(wallConstProps.heatPort_b, pipe.heatPorts);
connect(pipe1.heatPorts,wallConstProps.heatPort_a);
connect(sensor.T, boundary1.T_in);
connect(sensor.port,pipe.heatPorts[10]);
connect(sensor2.T,boundary3.T_in);
connect(sensor2.port,pipe1.heatPorts[10]);
end Circuit_BT;
Can someone help me ?
Best regards,
Maxime
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论