【问题标题】:SIMULINK If-Else flow block and its effect on Embedded Code GenerationSIMULINK If-Else 流程块及其对嵌入式代码生成的影响
【发布时间】:2013-10-08 16:37:51
【问题描述】:

我希望在 SIMULINK 中使用 if-else 流程块(或执行此操作的自定义 matlab 函数)并使用嵌入式编码器为其生成代码。我以前遇到过使用 SIMULINK 中使用的 MATLAB 功能块进行基于零和一的索引的问题。似乎几乎没有办法解决它。那么如何在 SIMULINK 中建模 if-elseif 逻辑呢?

我曾尝试使用 switch 和 mux 块,但它们太乱了,可能会导致对我尝试实现的原始流程逻辑的误解。

我的流程逻辑(PSEUDOCODE)是:

if (a<b) then
    p = x;
else if (a<c) then
    p = max(y, some_const_val);
else
    p = z;

有人可以推荐一个方法吗?

韩国,

【问题讨论】:

    标签: matlab function code-generation simulink flow


    【解决方案1】:

    您的伪代码应作为 MATLAB Function 块(它支持为 MATLAB 函数的子集生成代码)。我真的看不出基于零和一的索引有任何问题??

    对于更复杂的逻辑,Stateflow 是一个非常强大的工具,但它是一个附加组件,所以如果你还没有它,你需要花更多的钱。不过我同意,除了非常简单的逻辑算法之外,纯粹的 Simulink=blocks 方法很快就会变得很麻烦。

    【讨论】:

    • 我已经了解了 stateflow。问题是我不想在不探索基本 MATLAB 和 SIMULINK 发行版中的所有选项的情况下再订阅几个 1000 英镑的模块集。紧接着,您对“基于零和一的索引看不到任何问题”的评论,您是否真的为 MATLAB 功能块生成了嵌入式代码(使用 Embedded Coder)?或者当您使用有助于克服此问题的代码生成顾问时,您是否关闭了一些检查?我很想知道。因为它对我不起作用。
    • 不,我实际上没有尝试过生成代码(或者如果我过去做过,我实际上并没有仔细查看代码的样子,只要它是功能性的)。你能解释一下什么对你不起作用或有什么问题吗?生成的 C 代码使用从 1 开始的索引而不是从 0 开始的索引,是否与这一事实有关?
    • 代码生成顾问总是警告 M 功能块,因为基于 1/0 的索引。显然,我不希望保留任何警告并从代码生成顾问那里获得完整的通行证。我已经看到您无法在没有警告的情况下通过代码生成顾问传递 MATLAB 功能块。没有错误!这是一个警告!您可以选择忽略它,但是您的代码生成将失败,因为您没有设法清除所有警告和错误!但是,您可以将模型配置参数设置为忽略警告,但随后会忽略其他重要的警告!
    • 看来 MATLAB Function 模块需要从一开始的索引:mathworks.com/matlabcentral/answers/82888。但是,这不应该影响代码的功能,只会影响它的效率。事实上,MAAB 检查建议所有块都使用从一开始的索引,请参阅mathworks.co.uk/help/slvnv/ref/…
    猜你喜欢
    • 2018-11-21
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 2013-10-30
    • 2018-05-26
    相关资源
    最近更新 更多