使用Simulink Coder进行模型回调

时间:2012-06-26 15:29:00

标签: matlab simulink

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


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

Simulink Blocks

PreLoadFcn

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

2 个答案:

答案 0 :(得分:0)

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

如果选中“内联参数”选项: 偏好 - >优化 - >信号和参数

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

答案 1 :(得分:0)

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

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

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

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