MATLAB Answers

Is there any way to disable code generation in Simulink

150 views (last 30 days)
Adam on 6 May 2013
Commented: Rafael Cordero on 17 Oct 2020
I have my own matlab function which I have entered into Simulink as MATLAB Function Block. I use design.lowerpass filter in it as well as other functions that Simulink Coder does not support. I don't want to generate C code for my Simulink model I just want to perform simulations and want Matlab to interpret my function. Is there any way to tell Simulink not to generate code? There seem to be no option to have no target is Simulink. What will happen if I remove Simulink Coder from my path? All the help files are full of how to generate code but none tell how not to generate it.

Accepted Answer

Guy Rouleau
Guy Rouleau on 6 May 2013
Wrap your whole script in a separate MATLAB-file and make it extrinsic so that your MATLAB Function code look like:
%%% function y = myEMLblock(u) coder.extrinsic myWrapper
y = mywrapper(u); %%%
Then put any code you want inside the your wrapper function mywrapper.m
Rafael Cordero
Rafael Cordero on 17 Oct 2020
I'm not sure I undestand this answer.
So, the idea is to take the Matlab Function block (or is it the interpreted Matlab function block?) and in that block write:
%%% function y = myEMLblock(u) coder.extrinsic myWrapper
y = mywrapper(u); %%%
Then, inside the mywrapper() function is where I put my code I actually want to run (without C code-generation).
Is that correct? Wont the %%% comment out the first line and make it useless? If I try this with the Matlab Function block, as soon as I save the block code, it inserts the generic y = function u in the first line.

Sign in to comment.

More Answers (2)

Gijs van Oort
Gijs van Oort on 6 May 2013
Have a look at the coder.extrinsic function within you %codegen'ereated function.. Otherwise, you could try to use the 'interpreted matlab function' and call your self-written m-file which does what you want. (note that the terminology on these user-defined functions has changed somewhere between Matlab2010 and 2012, so have a wide look around in the User-defined functions if you cannot find the adequately named block.
  1 Comment
Adam on 6 May 2013
Hi Gijs,
I have following call in my matlab function. d = fdesign.lowpass('N,Fc', filtOrder, 20.0E+6, ADCclk); Hd = design(d); If I put, before these two lines, coder.extrinsic('fdesign.lowpass'); coder reports: The 'fdesign' class does not support code generation.
Function 'MATLAB Function' (#24.593.600), line 17, column 9: "fdesign" Launch diagnostic report.
Then when I add: coder.extrinsic('fdesign');
The error is the same i.e.: The 'fdesign' class does not support code generation.
Function 'MATLAB Function' (#24.592.599), line 17, column 9: "fdesign" Launch diagnostic report.
The only thing that seems to work is to use feval on those functions. Yes I am aware of the 'interpreted matlab function' and change of the meaning of generic Matlab function block in Simulink.
The question remains though How one can tell Simulink not to bother generating code globally. Some people apart of running their program in Matlab would like to create Simulink diagram by incorporating various matlab written modules just to show overall design of their program with modules interconnections. Just to present their program overall design to outsiders.

Sign in to comment.

Shashank Prasanna
Shashank Prasanna on 6 May 2013
  1 Comment
Adam on 6 May 2013
Hi Shashank,
yes I was considering it as the name says it all so to speak. But my matlab function outputs two vectors of doubles and interpreted matlab function block can have only one output. This will mean that I have to package my two vectors is 2xN matrix I suppose. I can't believe, which is sort of irrelevant, that one can not tell Simulink not to use Coder unless there is a fundamental reason why this can not be done.
Thanks a lot!

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!