首页 文章

使用Simulink Coder进行模型回调

提问于
浏览
0

我正在使用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

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

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

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

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

  • 0

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

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

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

相关问题