gpt4 book ai didi

matlab - Simulink - 每 30 秒输出 1,否则输出 0

转载 作者:行者123 更新时间:2023-12-05 02:18:33 26 4
gpt4 key购买 nike

我需要一个需要每隔 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 的解决方案时,就在这里!

block diagram

  • 使用 clock block 来跟踪时间,并使用一些 constant block 来确定给出 1 而不是 0 的间隔(以秒为单位)。<
  • 使用 memory block 将 clock 信号延迟 1 个时间步长,这样我们就可以比较连续步长的值。
  • 将时间除以间隔,然后向下舍入,得出已经过去了多少个间隔。
  • 最后,使用关系运算符 比较连续的“经过的间隔数”。如果在上面的线上经过了更多间隔,那么您刚刚跨过了间隔阈值。

注意:这将为您未跨越新间隔的每个时间步返回 0,并在您跨越的每个单独时间步返回 1。输出的准确性将取决于模型的步长。


编辑:在 floor block 之后添加 memory block 可能更清晰/更容易,所以你只做除法/四舍五入一次。它仍然允许您与之前的时间步长进行比较。这看起来像:

2nd option

关于matlab - Simulink - 每 30 秒输出 1,否则输出 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45140022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com