calling shared lib functions - serial port

4 visualizaciones (últimos 30 días)
David
David el 13 de Abr. de 2011
Big picture: I'm interested in controling a device through MatLab which has a shared library of functions; to open a serial port, get data, and close the port. The data of interest is voltages with time.
I have loaded the library into Matlab successfully, and could use some advice on how to call each function properly in order to work with the incoming data later on in the code. I have attached my current non working code. When I call a c function, do I need to define the variables which are passed into it as defined in c?
I realize anyone attempting helpful hints won't understand the specific function properties, although I could describe variable formats later if needed.
%%load the Ser1ch.dll into Matlab and call header files
loadlibrary ser1ch ser1ch.h addheader SrHelp.h alias A2D
%view functions imported
libfunctionsview A2D
%confirm load was successful
libisloaded A2D
%set up serial port
%s1=serial('COM1');
port=1
%%FUNCTION Ser1chOpen --> c function to open port for A/D board
calllib(A2D, 'Ser1chOpen', port, 'NULL');
%%read data
%%Call Function Ser1chGetData --> c function to get data from board as
%%double pression-32integer
counts=[];
calllib(A2D, 'Ser1chGetData', counts, 'NULL', 'NULL');
%convert counts to voltage
%%Convert count data from A/D Board to Voltages
slope=2.96E-7; %count per volt
volt=slope *count;
%%Close port
calllib(A2D, 'Ser1chClose', port, 'NULL');

Respuesta aceptada

Chirag Gupta
Chirag Gupta el 13 de Abr. de 2011
Hi David,
What you are doing seems to be the correct approach. What would really be useful is to check the header file that you have and see the function signatures. Loadlibrary commands are susceptible to datatypes being passed. For example:
callib(A2D, 'Ser1chOpen',port,NULL)
function could be expecting an unsigned int as the input for the port. But you are passing a double (since MATLAB defaults to a double). You would see the types it expects with libfunctionsview as well.
Also what is the exact error and which line of code?
  2 comentarios
David
David el 13 de Abr. de 2011
Hi Chirag, thanks for the motivation.
Your correct, there are unsigned int as the input for the port; as follows:
Ser1chOpen( int SerialPortNumber, int *Error )
Could you suggest how to pass a unsigned int in place for the port number?
Chirag Gupta
Chirag Gupta el 13 de Abr. de 2011
In matlab, use:
c = uint32(1)
whos c
You will see that c is a unsigned integer

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by