matlabsimulink仿真中仿真报错:某一个积分模块无穷大。

Simulink Derivative of state...Integrator....is not finite报错全文如下:Derivative of state '1' in block 'Subsystem/Integrator1' at time 0.0 is not finite. The simulation will be stopped. There may be a singularity in the solution. If not, try reducing the step size (either by reducing the fixed step size or by tightening the error tolerances)--------------------------分割------------------------------------一.
最近做 关于电机+螺旋桨的Simulink仿真,模拟含电机环的螺旋桨推力扭矩。Solver为变步长,auto。仿真模型如下:仿真模型,Thrust函数计算推力扭矩 搭建模型之后仿真,出现报错:Simulink报错提示,在仿真0时刻就出现非有限二. 查阅资料,最初以为是出现了代数环,考虑添加Delay模块:(虚假的解决)添加delay模块,delay0.01s仿真正常运行了,****----------------------------------****三. 本以为解决了问题,但是当修改变步长为fixed时候(步长设0.001),又报错。(真正的原因分析)fixed步长,计算报错仿真终止在Delay结束的时候。(因为Delay设置为0.01s)通过log selected signals,查看0~0.01s内的变量变化。发现在第 0 s时候,推力T与扭矩Q都是NaN。推测是因为:NaN作为输入,导致积分变量出现not finite。log selected signals查看信号变化在Thrust函数模块内 进速系数 J=Va/(n*D) 的计算有问题。
在 0 s时间步时: 积分器(Omega前的积分器)的初始值默认值零--->
则角速度Omega为零--->转速n为零-->出现了进速系数J0分母为零-->J为NaN-->T、Q为NaN。J0=Va/(n*D) ;
%进度系数四 . 最终解决办法:在角速度的那个 积分器初始值取一个极小数(如0.0001),不影响全局。这样最开始添加的 Delay不用,也可以。仿真正常总结:仿真出现故障时候,可通过log selected signals,分析查看信号的具体变化过程。出现Simulink Derivative of state...Integrator....is not finite时候,检查在该时刻下,是否出现了分母为零?或者零比零的情况。Simulink仿真时候,是有计算优先级的。一般含有闭环系统,会先从积分器开始,积分器有Initial condition。---------------------------------更新:Simulink仿真中,由于初始条件一般为0。当存在除法时候,很容易出现NaN。一个更加通用的解决办法是:给分母加上eps。(eps是matlab内置的函数,表示浮点相对精度。)----------------------更新:2021/11/1-------------------------------方法一.
分母加eps: 针对原文的Thrust函数。 因为我已经在积分器内修改了,所以这里加eps代码注释掉了。2. 方法二.
积分器初始条件修改: 双击Omega前面的积分器,修改积分初始值。以上处理的原因:是积分器的输出结果会被当做分母,出现计算奇异。参考:施法前摇:漫谈Simulink:真假代数环}

我要回帖

更多关于 matlabsimulink仿真 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信