在Dymola中编写i ++的理论方法是什么?并有混合连续和离散模型?

时间:2014-02-10 14:47:44

标签: modelica dymola openmodelica

我刚开始学习modelica而且我有一个(新手)问题。对我来说,问题在于将思维方式从传统的编程思维转变为思维方式。

我想做简单的程序。 我有输入数组,PV输出值分辨率为5分钟。 我有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。

你能解释一下我做错了吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

我希望我能正确理解你的问题。我使用Dymola来解决一个简单的例子 - 我希望这也适用于OpenModelica。

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

您可以使用RealOutput作为TimeTable.y在方程式中引用TimeTable模型的输出。

您的测试用例的一个非常简单的示例可能如下所示:

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)与等式的右边相同集成。因此,storage的计算值是输入和输出之差的积分。

我希望这会有所帮助。