Call mex function in simulink/ s-function ?

14 visualizaciones (últimos 30 días)
Hocine YAKOUBI
Hocine YAKOUBI el 25 de En. de 2018
Comentada: Pierre LEPERCQ el 4 de Mayo de 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.

Respuestas (1)

Nick Sarnie
Nick Sarnie el 1 de Feb. de 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 comentarios
yakoubi Hocine
yakoubi Hocine el 4 de Feb. de 2018
Editada: yakoubi Hocine el 4 de Feb. de 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 el 4 de Mayo de 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 ^^'

Iniciar sesión para comentar.

Categorías

Más información sobre Simulink Coder en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by