我正在使用Matlab 2012a和Simulink Coder (aka Real-Time Workshop)。我想使用Simulink Coder编译模型,但保留模型回调的功能。
考虑以下简单示例。我有一个Simulink模型callBackTest
,它读入一个常量并输出到a。 input1
在myValues.m
中定义,并使用PreLoadFcn model callback加载到模型工作区中。首次打开模型时执行PreLoadFcn回调。通过使用PreLoadFcn回调,每次打开模型时都会自动定义input1
。
假设myValues.m
最初编码为input1=1
。运行模拟时,yout
将是1的数组。此外,如果我使用Simulink编码器编译模型,输出也将是1的数组。但是,如果我修改myValues.m
以便input1 = 2
并且不重新编译,则实时输出仍为1.这是错误的,那么如何使用已编译的模型将文件中的变量读入模型工作区?
答案 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的不同方法。