有人通过实际测试搭建了MATLAB/Simulink R2023b与Python 3.10的联合环境, 在此过程中遇到了脚本运行时突然出现“Model not found”报错的情况, 对于刚开始接触该领域的新手……
有人通过实际测试搭建了MATLAB/Simulink R2023b与Python 3.10的联合环境, 在此过程中遇到了脚本运行时突然出现“Model not found”报错的情况, 对于刚开始接触该领域的新手而言, 只要依照步骤依次进行操作, 便能够较为轻松地躲开这类较为常见的问题。
搭建基础自动化框架
首要步骤, 开启Simulink模型, 于模型窗口顶部的菜单栏那儿点击File, 选取Model Properties, 接着点击Callbacks选项卡, 于PreLoadFcn回调框内写入模型加载之前所要执行的初始化脚本, 就像load(‘params.mat’)这般, 如此一来每次开启模型便会自动加载参数, 防止手动进行重复性操作。
不少人于PreLoadFcn当中径直书写sim()这一命令, 致使模型尚未全然加载便开启仿真, 出现报错“Invalid Simulink object handle”, 而正确的做法却是仅放置参数加载以及路径设置, 将仿真执行单独放置于后回调或者脚本里。
编写可复用的测试脚本
第二步, 于MATLAB编辑器当中, 去新建一个脚本文件, 将其命名为run_auto_test.m。分开来写三段核心代码: 第一段, 运用open_system(‘模型名’)去打开模型, 并且设置仿真的时长, 就像set_param(‘模型名’,’StopTime’,’100′)这样;第二段, 借助sim()来启动仿真, 推荐得到参数最优值的做法是, 仿真求解器挑选ode45, 把相对容差设置成1e – 4, 如此这般去平衡精度与速度, 不会由于容差过小致使计算出现卡死的状况, 也不会因为容差过大使得结果出现失真;第三段, 利用get_param去抓取关键的输出信号, 将其写入CSV文件进行存档。
【新手需防入坑】新手时常会犯的差错是, 忘掉于脚本起始处添加上bdclose all;以及close all;, 在多次进行运行之后, 模型句柄会有所残留, 进而致使脚本在第二次执行之际, 报出“Unable to lock model”的提示。快速的解决方式为: 于脚本的第一行添加上这两条清理指令, 并且在每次运行之前, 查验任务管理器里是否存有残留的MATLAB进程。
依不同测试场景, 给出两种实操方案之对比。方案一为单次长仿真, 借由sim( )运行连续100秒, 适用于验证系统稳态性能, 然而一旦出错便需全部重新来过, 耗时颇长。方案二则是分段短仿真, 每次运行10秒, 借助循环予以控制, 于每次循环之后检查结果是否处于阈值范围之内, 倘若发现偏差即刻终止并输出错误日志,适用于调试阶段能够快速定位问题。要是你正处于开展新模型初步验证的状况下, 那就采用方案二;要是你进行的是回归测试并且模型已然成熟, 那么选用方案一就会更简便省事些。
集成自动化与日志生成
第三步, 把run_auto_test.m与Python脚本连接起来, 于MATLAB脚本最末尾添加一行语句, 语句内容为system(‘python report_gen.py’), 通过此语句引发外部Python脚本去解析CSV, 进而生成HTML格式的测试报告。同时, 整个流程被封装成一个名为auto_test_all(model_name)的函数, 模型名称被参数化, 以便于批量测试不同的变体。
【新手防坑】, 有一个在频率方面呈现出较高出现概率的、具备完整性特征的报错情形是, Error using system , ‘python’ 未被识别, 其完整的解决步骤流程如下: 首先要去查看系统环境变量当中Python的路径是否已经被添加进去, 要是没有添加的话, 就通过手动操作将Python的安装目录(就像C:Python310 这样的)添加到位, 使之进入到PATH里面;紧接着在MATLAB当中运行!python –version以此来确认是否能够被识别, 要是依旧出现报错情况, 就在system()里面将路径写完整, 举例来说system( ‘”C:Python310python.exe” report_gen.py’ )。于最后之际, 对Python脚本所处目录是否位于MATLAB当前工作路径之中展开检查, 借助cd()予以切换。
此套方法于模型依赖众多外部硬件驱动或者实时仿真器之际并不适用, 举例而言, 像是存在需要和dSPACE或者NI硬件进行联调的场景, 之所以会如此, 是因为纯脚本自动化会由于硬件初始化时序方面的问题频繁出现报错情况。而简易的替代方案为, 首先运用硬件在环测试平台的官方API对脚本予以重新编写, 又或者在手动启动硬件之后再去运行脚本, 以此确保驱动率先就绪。
微信扫一扫
还没有评论呢,快来抢沙发~