【问题标题】:Accumulator in SimulinkSimulink 中的累加器
【发布时间】:2014-11-06 01:12:53
【问题描述】:

我在 simulink 中有一个 MATLAB 功能块,对于每一步 simlulink,我是否想输入一个增量为 1 的计数器。 前任: 第一步 -> Acc=1 第二步 -> Acc=2

我尝试使用 Count up 块 + 脉冲发生器,但 simulink 的时间步长不是恒定的。

有什么想法吗?

【问题讨论】:

  • 您需要添加您已经尝试过的代码(并检查格式)。并解释你看到的结果(即出了什么问题)。
  • Simulink 默认为您选择一个可变步长求解器。如果您希望步骤在时间上等距,请选择 Fixed Step Solver 并指定时间步长,但要知道这在您的模型中的含义。如果您希望以固定的周期执行块,请为其选择一个采样时间,或者使用零阶保持对其进行采样。
  • 我不确定您是如何尝试使用脉冲发生器的,但有没有办法使用脉冲发生器使脉冲处于采样命中而不是模拟时间?无论如何,我用来计算命中的方法是使用 C++ S-Function,然后有一个 PWork 向量来计算调用。 PWork 是一种在内存中持久存在的变量。因此,无论使用何种求解器,您都可以在每个函数调用中附加它并完成工作。

标签: matlab counter simulink accumulator


【解决方案1】:

执行此操作的常用方法是使用一个总和和一个初始条件为 0 的内存块。它应该计算固定步长和可变步长模拟中的步数。事实上,我相信这将在模拟期间构建和执行非常类似于 s-function 解决方案。

【讨论】:

    【解决方案2】:

    为什么不直接使用积分块呢?您可以根据您的模型类型选择离散或连续积分块。如果需要,您可以指定开始条件/值和重置条件。下图显示了离散和连续块的示例。两者都只是使用它们的默认值。做你想做的事(每一步在输出中加 1)只需将模型采样时间定义为环境变量(例如 sT=0.01)并将积分器增益设置为 1/sT。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多