Modelica 写i++;在迪莫拉?有连续和离散混合模型吗?

Modelica 写i++;在迪莫拉?有连续和离散混合模型吗?,modelica,dymola,openmodelica,Modelica,Dymola,Openmodelica,我刚开始学习modelica,我有一个(新手)问题。我的问题是将思维方式从常规编程思维转变为modelica思维方式 我想做一个简单的程序。 我有5分钟分辨率的PV输出值的输入阵列。 我有60分钟分辨率的热负荷值输入数组。 我有一个储能器,它可以储存多余的能量,或者从中获取能量,以满足实时的热量需求 我在openmodelica中写了这篇文章: `class Add Real PV[:] = 100:10:1000; Real Heat[:] = 200:300:6000; Real St

我刚开始学习modelica,我有一个(新手)问题。我的问题是将思维方式从常规编程思维转变为modelica思维方式

我想做一个简单的程序。 我有5分钟分辨率的PV输出值的输入阵列。 我有60分钟分辨率的热负荷值输入数组。 我有一个储能器,它可以储存多余的能量,或者从中获取能量,以满足实时的热量需求

我在openmodelica中写了这篇文章:

`class Add
 Real PV[:] = 100:10:1000;
 Real Heat[:] = 200:300:6000;
 Real Storage;
 Real p;
 Integer j;
 Integer i;
 Boolean power,heat;
 equation
 power=sample(0,5);
 heat=sample(0,60);
 when power then
 j=j+1;
end when;

when heat then
i=i+1;

end when;

Storage= PV[j] * 2.375-Heat[i];

p=Storage+ pre(p);

end Add;`
但当我将c/p转换到dymola时,它会在“p=Storage+pre(p);”部分上出错,因为它说pre()不能用于连续模型。当我删除pre()时,它会说它不能按0进行偏差

你能解释一下我做错了什么吗


谢谢

我希望我能正确理解你的问题。我用Dymola解决了一个简单的例子——我希望这在OpenModelica中也能起作用

如果您试图使用输入数据的时间序列,我建议您使用模型
Modelica.Blocks.Sources.timeline
。在您的情况下,表格的第一列将表示每小时的时间步长,即0、3600、7200、。。。;第二列可以给出以千瓦为单位的热需求值,如果它恒定在300千瓦,就像在你的例子中,这可能意味着300,300,300

您可以使用其real output as
timeline.y
在等式中引用时间表模型的输出

因此,测试用例的一个非常简单的示例如下所示:

model heatStorage

  Modelica.SIunits.Conversions.NonSIunits.Energy_kWh storage "Energy content of storage in kWh";

  Modelica.Blocks.Sources.TimeTable solarThermal(table=[0,50; 3600,70; 7200,40; 10800,73]);
  Modelica.Blocks.Sources.TimeTable heatDemand(table=[0,300; 3600,300; 7200,300; 10800,
    300]);

equation
  der(storage) = (solarThermal.y - heatDemand.y)/3600;

end heatStorage;
我假设太阳能集热器的输出是时变的。如果你使用PV来加热水,你可以包括另一个变量和转换方程。对于变量
storage
,我使用了能量的定义,单位为kWh,因此我将给定的方程除以3600。由于Modelica是基于方程的,因此写入
der(storage)
与集成方程右侧相同。因此,
存储
的计算值是输入和输出之间差值的积分


我希望这有帮助

根本不清楚你想做什么。您希望
p
是连续的还是离散的?您是在尝试集成
p
还是什么。如果你包括一些等式,那将是最好的。我希望存储是连续的。我实际上不需要变量p,但这就是它对我的工作方式。我想说存储=存储+PV[j]-热量[j]这是一个基本问题:•一系列离散的热量需求,假设在每个时间段(1小时)内是恒定的;•一系列离散的输入,例如光伏发电,在每个时间段内也是恒定的,但周期不同(5分钟)•连续转换方程•连续存储项我没有精确的存储方程。我只是想模拟连续的能量充电或放电,输入是连续的,但在特定时间变化。这并不能真正解释它,但我认为marcu1000s做出了正确的假设。您要做的是积分随时间变化的热量输出,以确定消耗的总能量。至少这是marcu1000s做的(非常好),我很确定这就是你想要的。回答得好。这也是我所怀疑的。非常感谢。这是我一直在寻找的起始信息。我很高兴我能提供帮助。正如本例所示,您在问题中所说,Modelica有时要求您思考与其他编程相比有点不同。谢谢迈克尔对我的解决方案说的客气话。