MATLAB:Simulink问题"不支持代码生成"

时间:2018-03-20 09:53:18

标签: matlab simulink

我有类似于Simulink上的以下框图,它看起来相当混乱,尤其是越来越多的块。

enter image description here

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

enter image description here

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

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' class不支持代码生成。"

然后我在这里遇到了类似的问题: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功能块访问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上提出了一个类似的问题,没有回复。

1 个答案:

答案 0 :(得分:0)

我打算完全解决这个问题。感谢几条有用的评论,我意识到为了替换求和块,必须 NOT 去掉传入求和块的传递函数块。

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

enter image description here

脚本非常简单:

function y1 = fcn(u1, u2, u3)

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

end