首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Modelica中汇总给定给CombiTimeTable的输入文件的列

如何在Modelica中汇总给定给CombiTimeTable的输入文件的列
EN

Stack Overflow用户
提问于 2020-10-03 00:51:55
回答 1查看 75关注 1票数 2

我在Modelica的2D-CombiTimeTable中使用了一个.txt文件(T_in1)作为输入。它包含一个大小为(4,2)的数组;第一列是时间,第二列是时间依赖变量。我想对每个时间步中的第二列求和或(求平均值)。如果在这方面有任何帮助,我将不胜感激。代码如下:

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

发布于 2020-10-05 00:59:21

由于Modelica的内置模块,不需要像其他环境那样使用for loop。我发现两个块的组合,称为采样器(Modelica.Blocks.Discrete.Sampler)和积分器(Modelica.Blocks.Continuous.Integrator)作为解决方案很有用。第一个命名的bock需要连接到CombiTimeTable,而积分器连接到采样器。这样,由于我将使用CombiTimeTable在每个点之间应用线性拟合,因此此解决方案是对每个时间段进行采样,然后对该值进行积分。由于其配置和模型定义,单独使用integrator将无法提供接近预期的结果。以下是总结这些值的解决方案:

代码语言:javascript
复制
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;

*然而,仍然存在的问题是,如何计算每个时间步的平均值?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64175415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档