我亲自进行了MATLAB/Simulink R2023a的实地测试,遭遇过模型运行失控、数据出现漂移、步长产生不匹配这样的状况,新手只要依照步骤逐个进行操作,便能够较为轻松地躲开这……
我亲自进行了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那样)以及实时系统中外设相互联动的场景。要是属于离散事件,那就更换事件日历表通过手动来进行推演;要是是外设联动情况,那就规规矩矩连接示波器去抓取硬件波形。
你跑仿真时最头疼的报错是哪种?评论区甩出来,我帮你看一眼。
微信扫一扫
还没有评论呢,快来抢沙发~