以本人实际测试Matlab R2023b plus Simulink的情况来看, 曾遭遇过自动化脚本运行到一半突然卡死的状况出现, 也曾碰到仿真数据无法对上的问题发生, 而新手只要随着步骤一……
以本人实际测试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函数, 要么将步长类型重新改回到“自动”这种状态。
微信扫一扫
还没有评论呢,快来抢沙发~