MATLAB deploytool simulink未定义的函数' load_system'

时间:2015-07-08 01:32:56

标签: matlab deployment compilation simulink

我正在使用一个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'.

我进行了搜索,发现了以下问题:

load_system using MCR

Deployment of Simulink Models

第一个链接说

question highlight

我很困惑:是关于编译到C ++还是.NET的部署工具? 是应该增加速度还是单独成为唯一的优势?

两个链接的问题在于他们谈论战略。但是如何实现它们呢?如何编译使用load_systemsim命令加载和模拟模型的MATLAB代码?

任何人都可以逐步解决一个非常简单的MATLAB代码示例(m文件)来模拟模型然后编译它们吗?

1 个答案:

答案 0 :(得分:1)

文档屏幕截图的第一句是重要的一句。正如@Navan所述(在评论中),Simulink功能与MATLAB Compiler不兼容。也就是说,任何使用Simulink功能(load_systemsim等)的m代码在使用MATLAB编译器时都不会执行。

假设您有权访问Simulink Coder,并且您的模型不包含阻止其转换为c代码的功能,那么您唯一的选择就是将应用程序分为两部分:

  1. 使用Simulink模型:使用Simulink Coder从模型中创建可执行文件。在doc中有几个这样做的例子,包括Using RSIM Target for Batch Simulations。有各种命令行选项,用于通过mat文件将新参数集和输入传递给可执行文件。模拟结果(即通常写入MATLAB工作区的内容)将写入由可执行文件创建的mat文件。
  2. 在您的MATLAB代码中:将所有Simulink功能替换为调用(通常使用system函数,如链接示例所示)到步骤1中创建的可执行文件。在此调用之前,您需要创建一个包含所有参数的mat文件;并且在调用之后,您将要读取可执行文件创建的mat文件的结果。
  3. 这不是一个简单的过程,但可行。