Matlab脚本调用Simulink模型采样时间与固定步长不匹配报错如何解决
报错根因
你设置的Simulink全局固定求解器步长为0.1s,但模型中
test_lau/INES0模块的采样时间为0.01s,0.01不是0.1的正整数倍,不符合固定步长求解器的采样时间匹配规则。你之前修改T_s为int64的操作完全不对症,因为问题出在数值的比例关系,不是数据类型。
可行解决方案
- 方案1:修改全局固定步长为所有模块最小采样时间的约数,优先取最小采样时间本身
你模型里最小的采样时间是0.01s,直接调整T_s的取值即可,修改对应代码为:% 替换原来的T_s = t_stop/1000; 为下面的代码 T_s = 0.01; % 或者保持步长计算逻辑的话,调整除数让结果匹配最小采样时间:T_s = t_stop/10000 options = simset('solver', 'ode5', 'fixedstep', T_s); - 方案2:修改对应模块的采样时间,使其为当前设置的固定步长的整数倍
打开test_lau.slx,找到INES0模块,右键打开属性面板,将采样时间参数修改为0.1、0.2这类0.1的正整数倍即可,不需要调整脚本代码。 - 方案3:改用变步长求解器,不需要强制匹配采样时间比例
如果你没有强制使用固定步长求解的需求,直接修改simset的solver参数为变步长类型即可,示例代码:
变步长求解器会自动根据模块采样时间调整步长,不会触发该类报错。options = simset('solver', 'ode45', 'MaxStep', T_s);
内容的提问来源于stack exchange,提问作者elle.delle
相关产品推荐
相关产品推荐

