Har*_*mar 4 modelica openmodelica
我在Modelica中有一个电池模型。PNet是流过电池的功率值(PNet充电时为正,放电时为负)。这基于负载而振荡。我要计算电池经过的循环次数,以及每个循环的放电深度。
这是一个非常普通的问题,所以我的回答也将很普通。我也不清楚,您指的是一个周期。维基百科提到深层和浅层放电,还有其他一些。
一些一般注意事项:在Modelica中,该when语句可用于计数。您可以通读Modelica语言规范的 8.3.5节以获取有关此内容的完整信息。
下面的示例计算变量PNet变为正数的频率,该频率应响应上述浅周期的数量。该模型的一些描述:
noiseSource计算一个随机数,然后由一阶(PT1)元素过滤该随机数以计算PNet。在原始示例中,可能应该跳过过滤器,它只是在一点点平滑轨迹。when语句中的代码将执行一次,从而启用计数。 pre语句cycles在when语句激活之前访问right 的值,从而可以计算条件发生的频率。start=0在cycles(start=0)为变量设置初始值cycles,因为你不能使用这是必要的cycles = 0,因为这会产生周期的公式,这是不是你想要的。inner模型globalSeed是使noiseSource工作所必需的。这是实际的代码:
model CycleCounter
inner Modelica.Blocks.Noise.GlobalSeed globalSeed;
Modelica.Blocks.Noise.NormalNoise noiseSource;
parameter Modelica.SIunits.Time T = 1e-3 "Time constant of PT1 element to filter random signal to compute PNet";
Integer cycles(start=0) "Counts the number of ";
Real PNet "Random value";
equation
der(PNet) = (noiseSource.y - PNet)/T;
when PNet > 0 then
cycles = pre(cycles)+1;
end when;
annotation (uses(Modelica(version="3.2.3")));
end CycleCounter;
Run Code Online (Sandbox Code Playgroud)
而在Dymola中模拟的结果是: