出现了以下乱码报错,都不知道错在哪里了

VPI启动联合仿真的一瞬间弹窗“Could not start Matlab. Check that a compatible version of Matlab is correctly installed and registered, and that a valid license is available”,VPI的job直接abort。这个报错在知乎上有个帖子专门讨论过,作者说用了ADC DAC之后这个bug出现几率大大增加,而且具有“污染”特性,一个报错project里的模块复制到另一个正常的project里,正常的那个也会被带坏。
原因基本就一个,VPI调MATLAB走的是COM接口,MATLAB作为COM服务器没有正确注册,VPI找不到它。在CMD里用管理员权限敲`matlab -regserver`,前提是环境变量PATH里指定的MATLAB版本跟VPI选中的版本一致,装了多个MATLAB或者PATH里没指定版本的话这个命令不起作用。替代方法更直接,打开需要调用的那个版本的MATLAB窗口,在命令行里先敲`comserver('unregister')`再敲`comserver('register')`,注册完重启VPI。知乎那个帖子里说这两种方法加起来成功率大概90%,剩下10%的情况重启一遍再试一次。
路径的问题也不能忽略。VPI的File菜单→Preferences→Simulation→Cosimulation→Matlab里面,MATLAB引擎库`libeng.dll`的路径要指对,这个文件在MATLAB安装目录的`bin\win64`下面,路径没设的话加到系统PATH环境变量里也行。Cosimulation Interface模块里的Path参数指的是存放自定义.m脚本文件的目录,不是MATLAB的安装路径,这两个别搞混。脚本文件建议全放在VPI项目目录下的Codes文件夹里,用绝对路径指向它,相对路径在这个接口里指向的是VPI项目文件所在目录的子目录,不是当前工作目录。
RunCommand的参数格式也得对上。在Cosimulation Interface模块里,RunCommand填的是每次触发模块时执行的MATLAB命令,格式通常是`函数名(输入变量)`,VPI会把输入端口的数据以特定变量名传进MATLAB工作空间,比如`WAVEFORM1`这种。输出变量名要在模块的Output端口设置里对应好,对不上仿真跑起来数据全是零,也不报错,就是静默失败。
联合仿真跑起来之后如果想在MATLAB里实时调试变量,官方手册提供了离线调试的方式,仿真数据保存成.mat文件,直接在MATLAB的IDE里双击加载,变量和数据结构都能看,不用每次改一行代码就重新跑一遍VPI。D:\VPI_Projects\cosim_notes\下面放了一份RunCommand的模板和几个demo的配置截图,下次换project的时候直接拷过去改路径。那个comserver的注册状态可以用`comserver('status')`查一下,返回registered说明正常,那个引擎库的完整路径是……
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删