Call mex function in simulink/ s-function ?

8 views (last 30 days)
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.

Answers (1)

Nick Sarnie
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
yakoubi Hocine
yakoubi Hocine on 4 Feb 2018
Edited: yakoubi Hocine on 4 Feb 2018
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
Pierre LEPERCQ
Pierre LEPERCQ on 4 May 2018
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.

Categories

Find more on Simulink Coder in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!