0

我正在使用 Matlab 2012a 和Simulink Coder (aka Real-Time Workshop)。我想使用 Simulink Coder 编译模型,但保留模型回调的功能。


考虑以下简单示例。我有一个 Simulink 模型,callBackTest它读取一个常量并输出到一个 since。使用PreLoadFcn 模型回调input1在模型工作区中定义myValues.m并加载到模型工作区中。PreLoadFcn 回调在模型首次打开时执行。通过使用 PreLoadFcn 回调,将在每次打开模型时自动定义。input1

Simulink 模块

PreLoadFcn

假设myValues.m最初编码为input1=1。当你运行模拟时,yout将是一个 1 的数组。此外,如果我使用 Simulink 编码器编译模型,输出也将是一个 1 数组。但是,如果我myValues.m这样修改input1 = 2并且不重新编译,实时输出仍然是 1。这是错误的,那么如何使用已编译的模型将文件中的变量读入模型工作区?

4

2 回答 2

0

您不能为模型回调生成代码。如果您不想在每次更改输入时重新生成代码,您可以尝试使用“From File”块,它可以从 .mat 文件中读取数据。当您想更改数据时,您可以运行 MATLAB 代码并将输出数据保存到同一个 .mat 文件中。对此块的代码生成支持哪种数据有一些限制。查看该块的文档以获取详细信息。

如果您的数据不是太大,您还可以编辑生成的源来修改数据。来自 Constant 块的数据通常内嵌在生成的源代码中。编辑后,您可以编译生成的代码以生成新的二进制文件。

另一种方法是编写自定义 C S-Function,您可以在其中从自己的数据源中读取数据。您需要编写一个 TLC 文件来支持此 S-Function 的代码生成。

如果这些对您不起作用,您需要重新编译您的模型。http://www.mathworks.com/help/simulink/ug/importing-signal-data-in-simulink.html上的文档列出了将信号数据导入 Simulink 的不同方法。

于 2013-02-22T14:06:36.323 回答
0

这不能回答您关于模型回调的问题,但无论如何它可能会有所帮助。

如果勾选了“Inline Parameters”选项:Preferences -> Optimization -> Signals and Parameters

无法更改已编译模型中的值,因为它们是硬编码的。关闭此选项并重新编译后,您可以使用外部模式连接并运行 myValues.m 脚本,这些值将被更新(除非您将它们标记为不可调整)。

于 2012-12-13T17:24:27.247 回答