作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Modelica 中有一个电池模型。 PNet 是流过电池的电量值(PNet 充电为正极,放电为负极)。这基于负载而振荡。我想计算电池经历的循环次数以及每个循环的放电深度。
最佳答案
这是一个非常笼统的问题,所以我的答案也将相当笼统。我也不清楚你所说的循环是什么。 Wikipedia提到了深放电和浅放电,还有其他一些放电。
一些一般注意事项:在 Modelica 中,when
语句对于计数很有用。您可以阅读 Modelica Language Specification 的第 8.3.5 节获取有关此内容的完整信息。
下面的示例计算变量 PNet
变为正值的频率,这应该响应上面的浅循环数。模型的一些描述:
noiseSource
计算一个随机数,然后通过一阶 (PT1) 元素过滤该随机数以计算 PNet。在原始示例中可能应该跳过过滤器,它只是为了稍微平滑轨迹。when
语句中的代码会执行一次,从而启用计数。 pre
语句在 when
语句激活之前访问 cycles
的值,从而可以计算条件发生的频率。 cycles(start=0)
中的 start=0
设置变量 cycles
的起始值,这是必要的,因为您不能使用cycles = 0
,因为这会生成循环方程,这不是您想要的。inner
模型 globalSeed
对于噪声源的工作是必需的。这是实际的代码:
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;
在 Dymola 中模拟的结果:
关于modelica - 如何在Modelica中实现周期盘点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56244014/
我是一名优秀的程序员,十分优秀!