我制作了一个简单的热泵模型,该模型使用传感器数据来计算其COP。
而COP =热/功率
有时没有电源,因此系统执行a(不能除以零)。我希望这些值为零。因此,我尝试了一个IF语句if-statement。如果power(u)= 0,则COP(y)=0。这在某种程度上是行不通的(请参见时间8)COP output + data。似乎有人注意到了这个问题吗?
答案 0 :(得分:2)
要使计算更通用(例如,幂的符号可能会改变),请看下面的代码。从它构建一个函数也是一个好主意(对于该函数,可以省略noEvent()语句)...
model DivNoZeroExample
parameter Real eps = 1e-6 "Smallest number to be used as divisor";
Real power = 0.5-time "Some artificial value for power";
Real heat = 1 "Some artificial value for heat";
Real COP "To be computed";
equation
if noEvent(abs(power) < abs(eps)) then
COP = if noEvent(power>= 0) then heat/eps else heat/(-eps);
else
COP = heat/power;
end if;
end DivNoZeroExample;
答案 1 :(得分:1)
在Modelica中,关系运算的工作方式略有不同。
如果将if u>0
替换为if noEvent(u>0)
,它应该可以正常工作。
有关详细信息,请参阅Modelica规范https://modelica.org/documents/ModelicaSpec34.pdf
中的8.5事件和同步部分。