1

我正在为加热系统编写一个控制器,该控制器响应放置加热系统房屋的电网状态。我正在尝试几个控制器,但给我带来问题的是下一个。

我正在尝试编写一个模型,该模型考虑了电网中产生的可再生能源的数量。当满足外部能量的某个阈值时,加热系统应该打开(以在本地使用能量)。它是需求侧管理的一种形式。我遇到的问题是,当门槛加热系统打开时。这反过来意味着不再满足门槛,因为能源是在当地使用的。控制器由布尔值表示。如果达到阈值,则为真,否则为假。

这是我认为有问题的代码部分:

算法

 if CurrentGoingExternal > 5 then SwitchOn :=true;
  elseif  CurrentGoingExternal < 5 and pre(SwitchOn) then SwitchOn :=true;
  elseif  CurrentGoingExternal < 1 then SwitchOn :=false;
  else SwitchOn :=false;
  end if;

在模拟时,我得到布尔值无法计算的错误,因为满足阈值可确保加热开关打开,从而确保布尔值在同一时间段内变为错误。因此,我正在寻找一种方法来将布尔值“设置或锁定”为真,从达到阈值的那一刻到下一个时间段开始时,应该再次检查它。即使在那个时间段内,由于加热系统在开始时打开,也不会达到阈值。

我尝试了诸如 noEvent 之类的方法,但这似乎不适用于持续的问题。

谢谢你的帮助。

4

2 回答 2

2

如果我正确理解您的问题,我认为您真正想要的是滞后。您可以在Modelica by Example 的这一章中看到详细的讨论。

于 2014-11-11T16:45:19.767 回答
2

您可以随时对系统进行采样:

model M
  Real currentGoingExternal = time;
  Boolean switch(start=true);
equation
  when sample(0, 0.01) then
    switch = pre(currentGoingExternal) < 0.5;
  end when;
end M;

也可以设置下次检查条件:

model M
  Real currentGoingExternal = time + (if time>0.6001 then -2*time else 0);
  Boolean switch(start=true);
  Real checkTime(start=0.01);
equation
  when currentGoingExternal < 0.5 and not pre(switch) and time>pre(checkTime) then
    switch = true;
    checkTime = time+0.1;
  elsewhen currentGoingExternal > 0.6 and pre(switch) and time>pre(checkTime) then
    switch = false;
    checkTime = time+0.1;
  end when;
end M;
于 2014-11-11T06:36:18.233 回答