Я пытаюсь управлять фотоэлектрической системой, подключенной к сети, на основе напряжения сети. Идея такова: когда напряжение сети поднимается выше VMax, я хочу выключить систему на timeOff. Когда timeOff прошло, я хочу снова включить, но только когда напряжение сети ниже, чем VMax.
В настоящее время у меня есть две реализации; оба создают много событий, и мне интересно, есть ли более эффективный способ. Вот как это реализовано сейчас:
package Foo
model PVControl1 "Generating most events"
parameter Real VMax=253;
parameter Real timeOff=60;
input Real P_init "uncontrolled power";
input Real VGrid;
Real P_final "controlled power";
Boolean switch (start = true) "if true, system is producing";
discrete Real restartTime (start=-1, fixed=true)
"system is off until time>restartTime";
equation
when {VGrid > VMax, time > pre(restartTime)} then
if VGrid > VMax then
switch = false;
restartTime = time + timeOff;
else
switch = true;
restartTime = -1;
end if;
end when;
if pre(switch) then
P_final = P_init;
else
P_final = 0;
end if;
end PVControl1;
model PVControl2;
"Generating less events, but off-time is no multiple of timeOff"
parameter Real VMax=253;
parameter Real timeOff=60;
input Real P_init "uncontrolled power";
input Real VGrid;
Real P_final "controlled power";
discrete Real stopTime( start=-1-timeOff, fixed=true)
"system is off until time > stopTime + timeOff";
equation
when VGrid > VMax then
stopTime=time;
end when;
if noEvent(VGrid > VMax) or noEvent(time < stopTime + timeOff) then
P_final = 0;
else
P_final = P_init;
end if;
end PVControl2;
model TestPVControl;
"Simulate 1000s to get an idea"
PVControl pvControl2(P_init=4000, VGrid = 300*sin(time/100));
end TestPVControl;
end foo;
При запуске я получаю 8 событий с PVControl1 и 4 события с PVControl2. Глядя на PVControl2, мне действительно нужно только событие в тот момент, когда VGrid становится больше, чем VMax. Это даст только 2 события. Два других события генерируются, когда VGrid снова падает ниже VMax.
Можно ли еще улучшить мою модель?
Спасибо, Роэл.