【问题标题】:Simulink: get step time in a triggered subsystemSimulink:在触发子系统中获取步骤时间
【发布时间】:2018-03-27 16:37:57
【问题描述】:

我对 Simulink 中的触发子系统有疑问:

所以 Susbsystem 每 0.01 秒执行一次。

我的问题是:如何在我的子系统中获取这个变量 (0.01)? 注意:我不需要模拟步骤时间。

我已经想到了两种解决方案: 1) 使用带内存块的数字时钟 2) 使用加权采样时间块

但是,他们都给了我一个初始值 0。

你对我的任务有一个优雅的解决方案

非常感谢。 祝你有美好的一天

【问题讨论】:

    标签: matlab simulink


    【解决方案1】:

    最简单的解决方案是向子系统提供一个恒定的块。定义一个 MATLAB Workspace 变量 dt=0.01; 并将常量设置为 dt,并将脉冲发生器的采样率设置为 dt

    或者,您可以使用 Probe 块获取来自脉冲发生器的信号的采样率,并将其作为输入提供给子系统。

    【讨论】:

      【解决方案2】:

      另一种方法是在工作区中使用get_param() 命令。 在你的情况下,它应该是:

      get_param('<path-to-block>/Pulse Generator','Period')
      

      这应该输出:

      >> ans =
      
      0.01
      

      【讨论】:

        【解决方案3】:

        我自己也有同样的问题。当我将其报告为错误时,我收到了来自 MATHWORKS 的以下反馈:

        如果触发子系统在触发事件的边缘检测时执行,那么它将需要至少两个模型执行时间步才能满足触发条件。因此,触发子系统不会在 0 处执行,从而导致您看到的结果。这是预期的行为。

        如果您需要触发子系统在第一个时间步执行,您可以将“触发器类型”选项更改为“函数调用”。当控制信号从 Statflow 图、Function-Call Generator 模块或 S-Function 模块接收到函数调用事件时,此选项将执行子系统或模型。”在这种情况下,您只需要确认您的函数调用块在触发子系统块之前执行。这可以使用“信息叠加”下的“块 - 执行顺序”调试工具来确认。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-24
          相关资源
          最近更新 更多