如何实现恒功率负载?
考虑一下下面的电路。这包含一个恒定的功率负载,它表示电力消耗者(在本例中)持续减少了10W。如何创建一个以消耗10W的方式调整自身的model?

我天真的做法如下:
model ConstantPowerLoad
extends Modelica.Electrical.Analog.Interfaces.OnePin;
parameter Modelica.Units.SI.Power P "The constant power value";
equation
v * p.i = P;
end ConstantPowerLoad;这是行不通的,我得到的信息是“用牛顿求解器解决非线性系统失败”。这可能是因为当前的i在启动时为零,从而导致了v * 0 = P和v, P > 0。所以我试着在电流为零时增加一个初始电阻。但是,这还是行不通的。我也会犯同样的错误。
model ConstantPowerLoad
extends Modelica.Electrical.Analog.Interfaces.OnePin;
parameter Modelica.Units.SI.Power P "The constant power value";
parameter Modelica.Units.SI.Resistance R_internal = 1e-3 "A dummy resistance on startup";
equation
if p.i == 0.0 then
R_internal * p.i = v;
else
v * p.i = P;
end if;
end ConstantPowerLoad;我玩了很多ifs和whens,但是我就是没有让它运行。
我对modelica和类似的模拟非常陌生。因此,我非常感谢不仅是一个解决方案,而且我在结构上想错了什么,并且,如果可能的话,解释一下为什么我的代码不能工作。
非常感谢您提前!
发布于 2021-11-22 16:58:25
构建可靠的电力负荷(或源)模型不是一件容易的事情,所以这可能是Modelica标准库中没有这样一个模型的原因。
问题
电源模型可能根本没有解决方案。在其他情况下,有两种解决方案。
无解
你可以很容易地进入这样一种情况,那就是不可能获得所要求的力量。您的示例很好地演示了两个麻烦的情况:
P=v*i的原因,不可能获得所需的功率。接近零的电压也是麻烦的,因为电流增加到无穷大。当然,当我们使用电流源时,电压也会出现类似的问题。(请注意,Modelica中没有无穷大,只有一个最大值:Modelica.Constants.inf__,通常定义为1e60)Pmax = v^2 / (4*Ri)的最大功率。
(不幸的是,英文wiki的文章并没有那么好。也请参阅https://en.wikipedia.org/wiki/Maximum_power_transfer_theorem#Calculus-based_proof_for_purely_resistive_circuits或参考https://de.wikipedia.org/wiki/Leistungsanpassung#Ohmsche_Widerst%C3%A4nde中类似的wiki文章)多解
在串联电阻为1欧姆并请求10W的情况下,我们可以得到两种解决方案:
P = v*i = 8.87V*1.12A = 10W,电阻器为1.12VP = v*i = 1.12V*8.87A = 10W,电阻器为8.87V这两种解决方案都是正确的。你得到哪一个取决于模拟是如何初始化的。
这里需要start属性。它初始化状态变量并设置非线性迭代的猜测值(这就是我们这里所拥有的)。
可用模型
有各种不同的实现,每一种都有各自的优缺点。我能从我的脑海中回忆起这两件事,但我想还有更多:
DC_Power在DymolaModels库中(免费,随Dymola一起提供):它的核心是使用与P=v*i类似的设置。它试图通过将电流和功率限制在一定的电压水平上来避免各种故障。Loads库中的SmartElectricDrives包(商业):使用PI控制器绘制所请求的电源这一特殊情况的解决方案
在您的具体示例中,我们可以利用一些事实并为有限的应用程序构建一个电源:
noEvent的内容。这个链接是一个很好的起点(实际上,整本书可以推荐给任何从Modelica开始的人)。这是加载的代码:
model Pload
import Modelica.Units.SI;
extends Modelica.Electrical.Analog.Interfaces.OnePort;
parameter SI.Power Pdes=10 "Desired constant power to draw";
parameter SI.Resistance Ri=1 "Inner resistance of connected circuit";
SI.Power Pload "Maximum power, either limited by Pdes or by maximum power theorem";
equation
Pload = min(Pdes, v^2/(4*Ri));
i = if noEvent(abs(v)>0) then Pload/v else 0;
end Pload;请注意,这个模型只是一个起点。只有当我们知道Ri并且不处理两个解决方案存在的事实时,它才是可用的。
将它应用到电压斜坡为10V的电路中,结果如下:

https://stackoverflow.com/questions/70067571
复制相似问题