MATLAB Answers


Call a MEX function from Simulink

Asked by Martijn
on 21 May 2012

Dear all,

I have a .mex64 function that was build from C++ libraries (IPOPT solver) and is able to solve an optimzation problem (NLP constraint).

I can call this function from an .m file easily, but how should I do it in Simulink? An S-function will build a mex file, but I already have this MEX file.

The final goal is to run the optimization in real-time (Model Predictive Control) on a XPC target machine.

  1 Comment

on 21 May 2012

Using a simple mex file function I get the following error:
"Only MATLAB files are supported for code generation. Unsupported file extension 'mexw64' [...]"


No products are associated with this question.

1 Answer

Answer by Titus Edelhofer
on 21 May 2012

Hi Martijn,

for the xPC Target you will need to have the source code of IPOPT solver available. You can write your S-function and for compilation add all source files for IPOPT. Should work, but I guess your solver code (and therefore the resulting S-function) will be fairly large ...



on 21 May 2012

Thank you Titus!

I have the source code available (open-souce), but I have no idea how to wrap them inside an S-function. Do you have any references to examples of people who have done this?

And what will be the issue with the large S-function?

You just add the sources to your call to mex:

mex mysfunction.c ipopt1.c ipopt2.c ipopt3.c


Not sure if your MEX-function is written as an S-function (MEX-functions have one entry-point, named mexFunction; while S-functions have multiple entry-points like mdlInitializeSizes, mdlStart, mdlOutputs, mdlTerminate, etc.). Please be sure to follow the doc examples on S-functions.

Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!