我需要一个需要每隔 30 秒或略超过 30 秒输出 1 的子系统。
用matlab代码编写它应该像这样工作
function y = fcn(time,uplinkTimeInterval)
%#codegen
persistent lastTriggerTime
if isempty(lastTriggerTime)
lastTriggerTime = 0;
end
if time>=lastTriggerTime || time == 0
y = 1;
lastTriggerTime = time + uplinkTimeInterval;
else
y = 0;
end
end
其中 ulplinkTimeInterval 为 30 秒。当然,我尝试将 matlab 功能块与此代码一起使用,但由于某种原因它不起作用(在调试模式下,我可以看到 y 取值 1,因为它应该是,但它只是不输出块之外的值),因此我想使用块,但我不知道该怎么做。
非常感谢您的帮助
您可以使用代码或块相对轻松地实现此逻辑。当您请求使用块的解决方案时,它就在这里!
- Use the
clock
块来跟踪时间,还有一些constant
块来确定给出 1 而不是 0 的时间间隔(以秒为单位)。
- Use the
memory
阻止延迟clock
按 1 个时间步发出信号,因此我们可以比较连续步的值。
- 将时间除以间隔,然后向下舍入,得出many间隔已经过去了。
- 最后,使用比较连续的“通过的间隔数”
relational operator
。如果上面的线上已经过了更多的间隔,那么您就刚刚跨过了间隔阈值。
Note:对于尚未跨越新间隔的每个时间步,这将返回 0;对于已跨越新间隔的每个时间步,这将返回 1。输出的准确性将取决于模型的步长。
Edit:只需添加以下内容可能会更清晰/更容易memory
块之后floor
块,因此您只需进行一次除法/舍入。它仍然允许您与前一个时间步骤进行比较。那看起来像:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)