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