1
\$\begingroup\$

I have something similar to this simplified following block diagram on Simulink. It looks rather messy.

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 y = fcn(u)coder.extrinsic('myWrapper')

y = myWrapper(u);

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 y = fcn(u,coder,extrinsic, myWrapper )

y = myWrapper(u);

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.

\$\endgroup\$
  • \$\begingroup\$ This question would be better asked on the Mathworks forums. Short answer, not all MATLAB command are supported inside MATLAB function blocks. \$\endgroup\$ – scotty3785 Mar 20 '18 at 11:40
  • \$\begingroup\$ @scotty3785, thanks for your contribution. I asked the question over there and no answer. A similar question was asked on the Mathworks forums some years ago, and once again, no response. \$\endgroup\$ – Rrz0 Mar 20 '18 at 11:41
2
\$\begingroup\$

I was going about tackling this problem completely wrong. In order to replace the summing block, one must NOT remove the Transfer Function blocks which feed into the summing block and add them inside the script.

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
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.