以我实际测试Matlab R2023b plus Simulink的情况来看,曾遭遇过自动化脚本运行到一半突然卡死的情况出现,也曾碰到仿真数据无法对上的问题发生。
第一步:精准配置仿真环境参数
把Simulink模型开启,在顶部菜单栏那儿点击“仿真”这个标签,寻觅“模型配置参数”。在“求解器”选项卡里面,把类型设定成“固定步长”,求解器挑选“ode3(Bogacki-Shampine)”。最为关键的一步:在“数据导入/导出”当中,勾选“记录仿真输出”,并且将输出最大点数设置为50000。
针需要避坑,其中有常见的报错表述内容为 “仿真时间过长,引导致内存出现溢出的情况”。其核心原因在于你并未对输出点数加以限制,进而系统则将会无限地缓存全部的中间数据。而对应的解决办法就是,要把输出的点数降低回到50000,同时还要勾选 “压缩输出” 这样的选项,如此一来能够节省大概40% 的内存。
第二步:编写可复用的测试脚本框架
在Matlab命令窗口当中输入edit runTest.m以此新建脚本,核心参数推荐值为,设置set_param(‘modelName’,’StopTime’,’100′),其理由是该时长能够覆盖绝大多数的瞬态响应场景,并且不会导致单次仿真超出3分钟。然后按以下数字编号步骤操作:
1. 当调用sim()函数时,去指定作为输出的变量,呈现为: out = sim(‘modelName’)。
2. 对sim,在其之前、之后分别添加try-catch语句,以此来捕获仿真中断所产生的报错。
3. 选用assert语句,用以对比仿真输出跟预设阈值,从而自动判定Pass或者Fail。
【新手避坑】:常见出现报错情况: “模型名称无效”,或者“变量未被定义”。之所以出现错误,原因在于sim()函数未能找到模型路径。解决的办法为:在脚本开头添加load_system( ‘modelName’ )来进行强制加载模型,或者将模型文件与脚本放置在同一目录当中。
第三步:批量执行与结果自动归档
进行两种实操方案的对比,方案A采用parfor循环并行运行多个仿真参数组合,此方案适用于有8核以上CPU的办公机,能够节省60%的时间,方案B运用for循环串行运行,适合电脑配置一般的情况,虽说运行速度慢,但是不容易出现死机情况。明确取舍的逻辑为,对于复杂非线性模型选择方案B,对于简单线性模型选择方案A。
设定一个主函数,对于i从1开始一直到paramList的长度, out序列的第i个值等于对modelName进行模拟得到的值,将‘out’保存到以‘result_’加上数字i再加上‘.mat’组成的文件名所对应的文件中后结束循环。运行完毕后通过dir(‘*.mat’)去列出所有结果文件。
【新手避坑】:高频出现且完整的报错情况:呈现 “索引突破数组的范围” 或者 “不能够进行文件写入” 这样的表述。一步到位达成解决的流程:先对 paramList 变量开展是否为空的检查,借助 whos 命令去确认;随后确认当下的文件夹具备写入的权限,通过 cd 操作切换至你的工作目录;最终检查文件的名称不包括特殊的字符,提议仅仅运用数字以及下划线。
针对连续非线性系统仿真而言,这套方法运用起来格外顺畅,然而,当你所测试的对象是离散事件系统(举例来说,像状态流图这种)时,要是直接去套用,就会出现怪异的时序错误。与之相对的替代办法是,要么改用Stateflow自身所带的sfrun函数,要么将步长类型重新改回到“自动”这种状态。










