【问题标题】:Is there a way to enforce the simulation step to be smaller than a compile-time constant in simulink?有没有办法强制模拟步骤小于 simulink 中的编译时间常数?
【发布时间】:2014-12-15 21:09:06
【问题描述】:

问题

有没有办法强制仿真步长小于 simulink 模型中的编译时常数?


上下文

我正在尝试在 simulink 上构建一个 PWM 模块。就像现在一样,我必须确保用户负责任地选择步长(小于他选择的周期的一半),否则块会出现异常行为。如果步长不够小,我想出的唯一方法是停止模拟,但我觉得这很烦人(作为用户)。如果可能的话,我希望用户完全不用担心这个。

【问题讨论】:

  • 您使用的是固定步长还是可变步长求解器?

标签: matlab simulink


【解决方案1】:

这是我要做的:将以下伪代码添加到块回调StartFcn

T_PWM = get_param(gcb,...); % get the block parameter (period) of the current PWM block (string)
T_PWM = str2double(T_PWM);
T_solver = get_param(bdroot,'FixedStep'); % get fixed used by the solver (string)
T_solver = str2double(T_solver); % convert from string to double
if T_solver > 0.5*T_PWM
   error('Solver step size must be smaller than half the PWM period')
end

【讨论】:

  • 好主意,但我将如何在库块中实现它?
  • 另外,您的解决方案不会将步长修正为正确的值,它会强制用户这样做。有没有办法以编程方式纠正它?
  • 是否有库模块无关紧要,因为您正在调整模型参数(步长),而不是模块。您只需在调用get_param 时指定 PVM 块的正确路径。如果您不知道模型中 PWM 模块的位置先验,您可能需要先使用find_system
  • 我认为用户有责任自己纠正步长,因此提出了解决方案。如果您想自动更改模型步长,请将error 行替换为set_param(bdroot,'FixedStep',num2str(0.5*T_PWM))
  • 抱歉我的无知,但根据我对您的回答的理解,每个使用我库中的 PWM 模块的人都应该将这些代码行添加到他们模型的回调函数中?
猜你喜欢
  • 2015-04-08
  • 2014-02-10
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-26
  • 1970-01-01
相关资源
最近更新 更多