我正在使用一个MATLAB文件代码,它加载一个simulink文件,运行它并在复杂的并行循环中对它进行多次评估 .
它在MATLAB环境中运行完美 . 通过 deploytool
命令编译代码,安装它并从命令行运行它时,我会遇到困难 .
在它加载模型的行,
mymodel= ... ;
load_system(mymodel);
我收到以下错误
C:\Program Files\mymain\application>Warning: Name is nonexistent or not a directory: model
> In path at 109
In addpath at 86
In run_main at 3
Warning: Name is nonexistent or not a directory: data
> In path at 109
In addpath at 86
In run_main at 4
Warning: Name is nonexistent or not a directory: graphics
> In path at 109
In addpath at 86
In run_main at 5
Starting parallel pool (parpool) using the 'local' profile ... connected to 2 workers.
Initializing ...
Undefined function 'load_system' for input arguments of type 'char'.
Error in run_main (line 40)
MATLAB:UndefinedFunction
我不关心警告(因为我不关心大多数其他MATLAB警告)但是我得到关于不能识别打开simulink模型('load_system')的函数的错误:
Undefined function 'load_system' for input arguments of type 'char'.
我做了搜索,发现了以下问题:
第一个链接说
我只是感到困惑:是关于编译到C还是.NET的部署工具?是应该增加速度还是单独成为唯一的优势?
两个链接的问题在于他们谈论战略 . 但是如何实现它们呢?如何编译使用 load_system
和 sim
命令加载和模拟模型的MATLAB代码?
任何人都可以逐步解决一个非常简单的MATLAB代码示例(m文件)来模拟模型然后编译它们吗?
1 回答
文档屏幕截图的第一句是重要的一句 . 正如@Navan所提到的(在评论中),Simulink功能与MATLAB Compiler不兼容 . 也就是说,使用MATLAB编译器时,任何使用Simulink功能(
load_system
,sim
等)的m代码都不会执行 .假设您可以访问Simulink Coder,并且您的模型不包含阻止其转换为c代码的功能,那么您唯一的选择是将应用程序分为两部分:
使用Simulink模型:使用Simulink Coder从模型中创建可执行文件 . 在doc中有几个这样做的例子,包括Using RSIM Target for Batch Simulations . 有各种命令行选项,用于通过mat文件将新参数集和输入传递给可执行文件 . 模拟结果(即通常写入MATLAB工作区的内容)将写入由可执行文件创建的mat文件 .
在你的MATLAB代码中:用调用(通常使用
system
函数,如链接示例中所示)将所有Simulink功能替换为在步骤1中创建的可执行文件 . 在此调用之前,'ll need to create a mat file with all your parameters in it; and after the call you' ll想要从mat文件中读取结果由可执行文件创建 .这不是一个简单的过程,但可以做到 .