仿真测试踩坑实录 三步搞定参数与报错

发布于 更新于
2,747
3
详情介绍

我亲自进行了MATLAB/Simulink R2023a的实地测试,遭遇过模型运行失控、数据出现漂移、步长产生不匹配这样的状况,新手只要依照步骤逐个进行操作,便能够较为轻松地躲开这类较为常见的问题。

仿真步长该设多少

通过Simulink中工具栏,朝着Simulation方向,再到Model Configuration Parameters,进而找到Solver,从中发现Fixed-step size,我所推荐的是0.001秒,其理由在于,它能够对大多数动态系统响应予以捕捉,比如像电机、液压阀这类,并且不会致使仿真持续运行一整天。要是设定为0.0001,那么模型运行速度会慢上20倍,要是设定为0.01,曲线呈现出明显的锯齿状。

【新手避坑】

通常出现的报错情况为:“步幅尺寸对于时间间隔而言过小”,或者仿真处于0秒的状态呈现静止不动。关键的缘由在于:步长比模型的最小采样时间要小。能够迅速解决的办法是:首先用鼠标右键点击模型,接着选择“离散采样时间”,然后进入“显示”选项,查看以红色进行标记的最小采样时间,步长一定得大于这个数值。

操作路径与参数三连击

步骤1,进行复位工作区的操作:点击Simulink工具栏,接着点击Modeling,然后点击Update Diagram,等待所有蓝线连接好。

步骤2,进行改仿真时长的操作,在Configuration Parameters这个选项里面,找到Stop time,输入5.0这个数值,而不是采用默认的10秒。

第三个步骤,进行相对容差的更改:切换至Solver,找到Relative tolerance,再将其数值设为1e – 5,要是依照 默认的1e – 3设定,就会致使稳态误差变得很大。

【新手避坑】

发生了报错情况,报错内容为“Derivative of state ‘x’ is not finite” ,其原因在于初始值没有给予或者代数环没有被打断 ,解决的办法是双击积分器 ,在Initial condition处填写0 ,然后再来在代数环路径上添加Memory模块 ,该模块是从Simulink→Signal Attributes拖出来的。

两种方案对比:变步长vs定步长

方案A(变步长),其中Solver选auto,它适用于快速原型验证以及非线性强模型,其优点是省时间,而缺点是结果不可重复,每次运行的时候都不完全一样。

一种方案被称作B(定步长),它选择ode4,并且步长固定为0.001秒,这种方案适用于HIL硬件在环、需要进行对比测试的场景,它具有完全可复现的优点,不过存在慢30%的缺点。

变步长用于调试阶段,定步长则在出报告时必须使用,定步长在接真实控制器时也必须使用,这就是取舍的逻辑。

高频报错一站式解决

出现这样的报错,即“无法找到针对模块‘XXX’的‘mex’文件”,完整的流程是。

进入放置模型的文件夹之后,将其中的 slprj 文件夹予以删除,并且把 simcache 文件夹也一并移除。

② 在命令行之中,输入bdclose all;进行清除操作,清除mex。

③ 重新打开模型,点Ctrl+B强制重新生成mex。

三步做完,99%的mex报错消失。

接下来讲句实在话:此方法不适用于离散事件仿真(就像SimEvents那样)以及实时系统中外设相互联动的场景。要是属于离散事件,那就更换事件日历表通过手动来进行推演;要是是外设联动情况,那就规规矩矩连接示波器去抓取硬件波形。

你跑仿真时最头疼的报错是哪种?评论区甩出来,我帮你看一眼。

常见问题(FAQ)

仿真步长应该设置多少?
推荐设置为0.001秒,可兼顾大多数动态系统响应速度与仿真时长。若设为0.0001,运行速度会慢20倍;设为0.01则曲线锯齿状明显。
遇到“步幅尺寸过小”报错怎么办?
右键模型选择“离散采样时间”并显示,查看红色标记的最小采样时间,确保步长大于该值。
变步长和定步长如何选择?
变步长适合快速原型验证,省时但结果不可重复;定步长适合HIL和对比测试,结果可复现但慢30%。调试阶段用变步长,出报告或接真实控制器时用定步长。
3 讨论
热门最新
总结
暂无总结

变步长和定步长的取舍逻辑很清晰,以前一直纠结,现在知道什么时候该用哪个了。

mex报错那个方法太实用了,我每次都是删slprj和simcache,但不知道要Ctrl+B,现在终于彻底解决了!

终于有人把步长讲清楚了,我之前设0.01直接锯齿,设0.0001等到天荒地老,0.001确实刚刚好!

0 / 600