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

标签 matlab time simulink intervals

我需要一个需要每隔 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/

相关文章:

使用 MATLAB 软件运行的 Java 类

python - 各向异性扩散二维图像

c - 如何在 UNIX 上使用 C 日期和时间函数?

matlab - 在 Matlab/Simulink 中增加蒙特卡罗模拟的模拟时间

matlab - 线性判别分析LDA

c++ - 灰度到红-绿-蓝 (MATLAB Jet) 色标

c - 使用Netbeans测量执行C程序的时间

java - 有多少种方法不能构成三角形?

matlab - 使来自库链接的信号名称唯一?

Python 和 ControlDesk 交互