【问题标题】:MATLAB: Issue with Simulink "does not support code generation"MATLAB:Simulink 的问题“不支持代码生成”
【发布时间】:2018-08-29 01:53:35
【问题描述】:

我在 Simulink 上有类似于下面的框图,它看起来相当混乱,尤其是随着块数的增加。

我想用一个功能块替换一个 3 点求和块,同时保持相同的输出。

首先我将代码放在功能块中:

function y = fcn(u)
   sys1 = tf(0.5,[1 0 0 4]);
   sys2 = tf([3 0.5],[1 0 15]);
   sys3 = tf(1,[1 1]);
y = sys1 + sys2 + sys3;

但是,我收到一条错误消息,说 Simulink 不支持代码生成。

“'tf' 类不支持代码生成。”

然后我在这里遇到了类似的问题:https://nl.mathworks.com/matlabcentral/answers/74770-is-there-any-way-to-disable-code-generation-in-simulink

我正在尝试实现一个外部函数或“包装函数”,但有些困难。我创建了一个名为 myWrapper.m 的新脚本,其中包含相同的代码:

function y = myWrapper(u)
   sys1 = tf(0.5,[1 0 0 0 4]);
   sys2 = tf([3 5],[1 0 15]);
   sys3 = tf(1,[1 1]);
y = sys1 + sys2 + sys3;

和 MATLAB 函数编辑为:

function y1 = fcn(u1)

y1 = myWrapper(u1);

错误仍然存​​在。

我想从 MATLAB Function 块中访问 myWrapper.m 文件。关于如何做到这一点的任何指示?按照给出的上一个链接和official docs,我在我的 MATLAB 函数块中得到了类似的东西:

function y1 = fcn(u1)coder.extrinsic('myWrapper')

y1 = myWrapper(u1);

上面的最后一个代码在语法上是不正确的,我不知道应该怎么做。 MATLAB 自动将上述代码更正为:

function y1 = fcn(u1,coder,extrinsic, myWrapper )

y1 = myWrapper(u1);

这不是我想要的。

任何关于如何做到这一点的提示和/或建议将不胜感激。

两年前在 MathWorks 论坛here 上提出了一个类似的问题,但没有得到回应。

【问题讨论】:

  • 你可能无法做到这一点,我认为明确的想法是因为编译器不想要惊喜
  • @AnderBiguri,非常感谢您的贡献。我也收到了您的第一条评论,我认为您指出这一点是正确的。关于上面的评论,我几乎可以肯定这是可以做到的,或者在以前版本的 Simulink/MATLAB 中是允许的。
  • 2017a。我将编辑这个问题,以更广泛地了解我想要完成的工作。
  • 好的,我会纠正自己的。它不会导致任何结果,因为您的传递函数对象不使用块输入u作为输入。这些对象根本无法与 Simulink Solver 交互......您仍然没有回答我的问题,为什么您不使用显示的模型。模型看起来一点也不凌乱……在工作中,我总是看到乱七八糟的模型。你不会相信的。
  • 正如@Sven 所评论的,您的代码不会复制您的模型至少有两个原因 - 您没有通过传递函数传递输入,甚至您是 @987654335 中的状态@ 对象不与 Simulink 求解器交互(而原始 Simulink 模块中的对象是)。但是,为了解决您的具体问题,您的代码的 coder.extrinsic('myWrapper') 部分需要与 function y1 = fcn(u1) 部分位于单独的一行。

标签: matlab simulink


【解决方案1】:

我打算完全错误地解决这个问题。感谢几个有用的 cmets,我意识到为了替换求和块,必须移除馈入求和块的传递函数块。

MATLAB 函数不支持代码生成(这是正确的),因此可以在其中实现传递函数。这就是为什么这些模块只是按如下方式输入 MATLAB 函数的原因。

脚本很简单:

function y1 = fcn(u1, u2, u3)

   x = (u1 + u2 +u3);
   y1 = x;

end

【讨论】:

    猜你喜欢
    • 2017-03-15
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 2011-08-09
    • 1970-01-01
    相关资源
    最近更新 更多