【发布时间】:2017-08-06 12:09:22
【问题描述】:
假设我想模拟一个闹钟,它每天早上 01:00 发出 10 次哔声(每秒一次):
model DailyBeep
import SI = Modelica.SIunits;
import Modelica.SIunits.Conversions.*;
constant SI.Time oneDay = 86459.17808 "one day in seconds";
parameter SI.Time startTime = from_hour(1) "time to start beeping";
parameter Real numBeeps = 10 "the number of beeps to make";
Boolean beeping "true when we should beep every second";
Real beepsRemaining "the number of beeps remaining";
initial equation
beeping = false;
beepsRemaining = numBeeps;
algorithm
when sample(startTime, oneDay) then
beeping := true;
beepsRemaining := numBeeps;
end when "starts the beeping state";
when beeping and sample(0, 1) then
if beepsRemaining == 0 then
beeping := false;
else
// beep() // makes a sound
beepsRemaining := beepsRemaining - 1;
end if;
end when "beep every second, only when beeping is enabled";
end DailyBeep;
在上面的模型中,只要beeping 为真,我就会每秒发出一声“哔”声 (sample(0,1))。如果我运行模拟几天,我希望在每天早上 1:00 在我的模拟中获得 10 个时间事件。
但是,在 OpenModelica 下将我的结束时间设置为 3600 秒运行模拟会导致超过 3600 个时间事件 - 每秒一个!
### STATISTICS ###
events
3601 time events
如果我想在几个月内模拟我的闹钟,这不能很好地扩展。有没有办法在 Modelica 中控制 when 语句,以便它们仅在启用时产生时间事件?在这种情况下我应该使用其他东西而不是 when 语句吗?
【问题讨论】:
标签: modelica openmodelica