我在Modelica的2D-CombiTimeTable中使用了一个.txt文件(T_in1)作为输入。它包含一个大小为(4,2)的数组;第一列是时间,第二列是时间依赖变量。我想对每个时间步中的第二列求和或(求平均值)。如果在这方面有任何帮助,我将不胜感激。代码如下:
model integration
import Modelica.Fluid.Types;
Modelica.Blocks.Sources.CombiTimeTable T_in1(
extrapolation=Modelica.Blocks.Types.Extrapolation.LastTwoPoints,
fileName="C:/Users/Tin1.txt",
smoothness=Modelica.Blocks.Types.Smoothness.LinearSegments,
tableName="tab1",
tableOnFile=true,
timeEvents=Modelica.Blocks.Types.TimeEvents.Always,
timeScale(displayUnit="min") = 60) annotation (
Placement(visible = true, transformation(origin={-61,32.2828}, extent = {{-6, -6}, {6, 6}}, rotation = 0)));
equation
for i in 1:3 loop
...
...
end for;
annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram(
coordinateSystem(preserveAspectRatio=false)),
experiment(StopTime=240, __Dymola_Algorithm="Dassl"));
end integration;发布于 2020-10-05 00:59:21
由于Modelica的内置模块,不需要像其他环境那样使用for loop。我发现两个块的组合,称为采样器(Modelica.Blocks.Discrete.Sampler)和积分器(Modelica.Blocks.Continuous.Integrator)作为解决方案很有用。第一个命名的bock需要连接到CombiTimeTable,而积分器连接到采样器。这样,由于我将使用CombiTimeTable在每个点之间应用线性拟合,因此此解决方案是对每个时间段进行采样,然后对该值进行积分。由于其配置和模型定义,单独使用integrator将无法提供接近预期的结果。以下是总结这些值的解决方案:
model integration
import Modelica.Fluid.Types;
Modelica.Blocks.Sources.CombiTimeTable T_in1(
extrapolation=Modelica.Blocks.Types.Extrapolation.LastTwoPoints,
fileName="C:/Users/Tin1.txt",
smoothness=Modelica.Blocks.Types.Smoothness.LinearSegments,
tableName="tab1",
tableOnFile=true,
timeEvents=Modelica.Blocks.Types.TimeEvents.Always,
timeScale(displayUnit="min") = 60) annotation (
Placement(visible = true, transformation(origin={-61,32.2828}, extent = {{-6, -6}, {6, 6}}, rotation = 0)));
Modelica.Blocks.Discrete.Sampler sampler1(samplePeriod(displayUnit="min") = 60)
annotation(Placement(visible = true, transformation(origin={4,-64}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
Modelica.Blocks.Continuous.Integrator integrator2 annotation(Placement(visible = true, transformation(origin={52,-66}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
equation
for i in 1:4 loop
end for;
connect(sampler1.y,integrator2. u) annotation(Line(points={{15,-64},{28,-64},{
28,-66},{40,-66},{40,-66}}, color = {0, 0, 127}));
connect(T_in1.y[1], sampler1.u) annotation (Line(points={{-54.4,32.2828},{-54.4,
-64},{-8,-64}}, color={0,0,127}));
annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram(
coordinateSystem(preserveAspectRatio=false)),
experiment(StopTime=40500, __Dymola_Algorithm="Dassl"));
end integration;*然而,仍然存在的问题是,如何计算每个时间步的平均值?
https://stackoverflow.com/questions/64175415
复制相似问题