我正在为加热系统编写一个控制器,该系统响应加热系统所在的电网状态。我尝试了几个控制器,但是那个给我带来问题的控制器就是下一个。
我试图编写一个考虑到网格中可再生能源数量的模型。当满足外部能量的某个阈值时,加热系统应该接通(以便在本地使用能量)。这是需求侧管理的一种形式。我遇到的问题是加热系统接通的阈值。这反过来意味着不再满足阈值,因为能量是在本地使用的。控制器由布尔值表示。如果满足阈值则为true,否则为false。
这是我认为有问题的代码的一部分:
算法
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;
模拟时我得到布尔无法弄清楚的错误,因为满足阈值确保加热开关确保布尔值在同一时间段内变为假。因此,我正在寻找一种方法来设置或锁定或其他任何方式。从满足阈值的那一刻起,布尔值为true,直到下一个时间段的开始,再次检查它。即使在该时间段内,由于在开始时接通加热系统,也不会满足阈值。
我尝试过像noEvent这样的事情,但这似乎不适用于持续存在的问题。
感谢您的帮助。
答案 0 :(得分: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;
答案 1 :(得分:2)
如果我理解你的问题,我认为你真正想要的是迟滞。您可以在this chapter of Modelica by Example中看到详细的讨论。