【发布时间】:2018-03-27 16:37:57
【问题描述】:
我对 Simulink 中的触发子系统有疑问:
所以 Susbsystem 每 0.01 秒执行一次。
我的问题是:如何在我的子系统中获取这个变量 (0.01)? 注意:我不需要模拟步骤时间。
我已经想到了两种解决方案: 1) 使用带内存块的数字时钟 2) 使用加权采样时间块
但是,他们都给了我一个初始值 0。
你对我的任务有一个优雅的解决方案
非常感谢。 祝你有美好的一天
【问题讨论】:
我对 Simulink 中的触发子系统有疑问:
所以 Susbsystem 每 0.01 秒执行一次。
我的问题是:如何在我的子系统中获取这个变量 (0.01)? 注意:我不需要模拟步骤时间。
我已经想到了两种解决方案: 1) 使用带内存块的数字时钟 2) 使用加权采样时间块
但是,他们都给了我一个初始值 0。
你对我的任务有一个优雅的解决方案
非常感谢。 祝你有美好的一天
【问题讨论】:
最简单的解决方案是向子系统提供一个恒定的块。定义一个 MATLAB Workspace 变量 dt=0.01; 并将常量设置为 dt,并将脉冲发生器的采样率设置为 dt。
或者,您可以使用 Probe 块获取来自脉冲发生器的信号的采样率,并将其作为输入提供给子系统。
【讨论】:
另一种方法是在工作区中使用get_param() 命令。
在你的情况下,它应该是:
get_param('<path-to-block>/Pulse Generator','Period')
这应该输出:
>> ans =
0.01
【讨论】:
我自己也有同样的问题。当我将其报告为错误时,我收到了来自 MATHWORKS 的以下反馈:
如果触发子系统在触发事件的边缘检测时执行,那么它将需要至少两个模型执行时间步才能满足触发条件。因此,触发子系统不会在 0 处执行,从而导致您看到的结果。这是预期的行为。
如果您需要触发子系统在第一个时间步执行,您可以将“触发器类型”选项更改为“函数调用”。当控制信号从 Statflow 图、Function-Call Generator 模块或 S-Function 模块接收到函数调用事件时,此选项将执行子系统或模型。”在这种情况下,您只需要确认您的函数调用块在触发子系统块之前执行。这可以使用“信息叠加”下的“块 - 执行顺序”调试工具来确认。
【讨论】: