MATLAB Answers

1

Call mex function in simulink/ s-function ?

Asked by Hocine YAKOUBI on 25 Jan 2018
Latest activity Commented on by Pierre LEPERCQ on 4 May 2018
Hello,
I have a SBG system (inertial navigation system) that we can not use with Matlab.
I created a mexw64 file that allows me to acquire the data of the sbg in real time. To do this I call the Function: [id, temps, ekf, imu, gyro, temp]=ellipseClientSMMatlab in Matlab, tell now everything is working.
I want to use those streaming data id, temps, ekf, imu, gyro, temp in Simulink, how can I do that? I tried to use S_Function Builder, in the Library I put my mex file: ellipseClientSMMatlab.mexw64, and I put in the outputs id, temps, ekf, imu, gyro, temp. I build, No error and I have three files, ellipseClientSMMatla.c, ellipseClientSMMatla_wrapper.c, ellipseClientSMMatlab.tlc.
I excute that in Simulink, but nothing in the outputs id, temps, ekf, imu, gyro, temp. In Matlab when I try to call my function, [id, temps, ekf, imu, gyro, temp]=ellipseClientSMMatlab. It gives me error. “MEX level2 S-function "ellipseClientSMMatlab" must be called with at least 4 right hand arguments”
Can someone help ? thank you so much PS : Sorry for my english dont write well.

  0 Comments

Sign in to comment.

1 Answer

Answer by Nick Sarnie on 1 Feb 2018

Hi Hocine,
It sounds like you used MATLAB Coder to generate a MEX for the MATLAB Function. If you want to use it in an S-Function, I recommend creating a DLL with MATLAB Coder instead. To do this, you can use the "-config:dll" option to the "codegen" command. Lets use an example MATLAB function named 'dlldemo', which takes two double input arguments:
>> codegen -config:dll dlldemo.m -args {1,2}
From here, you can go into the codegen/dll/dlldemo folder and copy the dlldemo.lib and dlldemo.dll file to your Simulink model directory.
Finally, add 'dlldemo.lib' and 'dlldemo.dll' to the Library tab of S-Function Builder under 'Library/Object/Source files', and call 'dlldemo' in the S-Function code.

  3 Comments

Hi Nick,
thank you for your answer. I dont have the (.m) file, I have a (ellipseClientSMMatlab.mexw64) file and some (.dll) I tried Matlab Function but (.mexw64) file not supported by simulink. So how can I use my (.mexw64) file in simulink ?
Thank you again
Hi Nick, Thank you again for your help.
I have the solution for my proble.
I used Matlab Function Block and coder.extrinsic('ellipseClientSMMatlab') to resolve the problem.
This is the all program :
function [id, ekf,temps,imu, gyro, temp]=sbg
id=[0];
temps=[0];
ekf=[0,0,0];
imu=[0,0,0];
gyro=[0,0,0];
temp=[0];
coder.extrinsic('ellipseClientSMMatlab');
[id, temps, ekf, imu, gyro, temp]=ellipseClientSMMatlab;
end
It's working. Thank you
Hey Hocine!
I have a problem to get data from my SBG captor in Simulink. It looks like you found a solution to get them in real time... Can you tell me how have you done to create your ellipseClientSMMatlab.mexw64 and what you wrote in?
It would hep me a lot
Thanks!
PS : Sorry for my english, is not well too ^^'

Sign in to comment.