我需要一个需要每隔 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 功能 block 与此代码一起使用,但由于某种原因它不起作用(在 Debug模式下我可以看到 y 取值 1,但它根本不会将值输出到 block 外),因此我想使用 block ,但我不知道该怎么做。
非常感谢您的帮助
最佳答案
您可以使用代码或 block 相对轻松地制作此逻辑。当您请求使用 block 的解决方案时,就在这里!
- 使用
clock
block 来跟踪时间,并使用一些constant
block 来确定给出 1 而不是 0 的间隔(以秒为单位)。< - 使用
memory
block 将clock
信号延迟 1 个时间步长,这样我们就可以比较连续步长的值。 - 将时间除以间隔,然后向下舍入,得出已经过去了多少个间隔。
- 最后,使用
关系运算符
比较连续的“经过的间隔数”。如果在上面的线上经过了更多间隔,那么您刚刚跨过了间隔阈值。
注意:这将为您未跨越新间隔的每个时间步返回 0,并在您跨越的每个单独时间步返回 1。输出的准确性将取决于模型的步长。
编辑:在 floor
block 之后添加 memory
block 可能更清晰/更容易,所以你只做除法/四舍五入一次。它仍然允许您与之前的时间步长进行比较。这看起来像:
关于matlab - Simulink - 每 30 秒输出 1,否则输出 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45140022/