rrz0
rrz0

Reputation: 2302

MATLAB: Issue with Simulink "does not support code generation"

I have something similar to the following block diagram on Simulink, which looks rather messy especially with an increasing number of blocks.

enter image description here

I want to replace a 3-point summing block with a function block, while keeping the same output.

enter image description here

First I started by placing the code inside the function block:

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;

However I was greeted with an error saying that Simulink does not support code generation.

"The 'tf' class does not support code generation."

I then came across a similar problem here: https://nl.mathworks.com/matlabcentral/answers/74770-is-there-any-way-to-disable-code-generation-in-simulink

I am trying to implement an extrinsic function or 'wrapper function' with some difficulty. I created a new script called myWrapper.m, containing the same code:

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;

and the MATLAB Function edited to:

function y1 = fcn(u1)

y1 = myWrapper(u1);

The error persists.

I somehow want to access myWrapper.m file from the MATLAB Function block. Any pointers on how this should be done? Following the previous link given and the official docs I am ending up with something like this in my MATLAB Function block:

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

y1 = myWrapper(u1);

The last code above is syntactically incorrect and I am at a loss on how it should be done. MATLAB automaticaly corrects the above code to:

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

y1 = myWrapper(u1);

which is not what I want.

Any tips and/or suggestions on how this could be done would be appreciated.

A similar question was asked on the MathWorks forum here, two years ago, with no response.

Upvotes: 2

Views: 7499

Answers (1)

rrz0
rrz0

Reputation: 2302

I was going about tackling this problem completely wrong. Thanks to several helpful comments I realized that in order to replace the summing block, one must NOT remove the Transfer Function blocks which feed into the summing block.

A MATLAB Function does not support code generation (and rightly so) such that a transfer function may be implemented inside it. That is why the blocks simply feed into the MATLAB Function as follows.

enter image description here

The script would very simply be:

function y1 = fcn(u1, u2, u3)

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

end

Upvotes: 0

Related Questions