Matlab - Parar la Comunicación puerto serie en GUI

 
Vista:
sin imagen de perfil

Parar la Comunicación puerto serie en GUI

Publicado por Luis (10 intervenciones) el 01/06/2014 19:26:01
Hola a todos,

Tengo el siguiente problema: estoy realizando un programa a través de la GUI de Matlab en el cual voy mandando a través de un microcontrolador datos al pc a través del puerto serie. El caso es que eso lo hago bien abriendo los puertos y cerrandolos. El caso es que quiero que haya un boton que cuando se pulse mientras se está recibiendo datos, se cierre el puerto serie y ya no se reciba más nada, pero no consigo que funcione.

El boton de inicio de comunicación que abre el puerto serie, establece la comunicación, procesa los datos y cierra el puerto me funciona correctamente:

handles.MSP=serial('COM5');
set(handles.MSP,'Baudrate',9600); % se configura la velocidad a 9600 Baudios
set(handles.MSP,'StopBits',1); % se configura bit de parada a uno
set(handles.MSP,'DataBits',8); % se configura que el dato es de 8 bits, debe estar entre 5 y 8
set(handles.MSP,'Parity','none'); % se configura sin paridad
%set(MSP,'OutputBufferSize',1); ”n” es el número de bytes a enviar
%set(MSP,'InputBufferSize' ,2); ”n” es el número de bytes a recibir
%set(MSP,'Timeout',1); 1 segundos de tiempo de espera

fopen(handles.MSP);
.
. aquí proceso los datos y lo hago todo correctamente.
.
fclose(handles.MSP);
delete(handles.MSP);
clear handles.MSP;
msgbox('Datos almacenados','Fin de procesado de datos');
handles.output = hObject;
guidata(hObject, handles);

Pero si yo quiero que mientras se están mandando los datos en la función descrita anteriormente, si el usuario pulse un botón se pare la comunicación, es decir, un botón de interrupción de la comunicación. Había pensado hacerlo simplemente cerrando el puerto serie una vez que se pulsa ese botón:

function interrumpir_Callback(hObject, eventdata, handles)
fclose(handles.MSP);
delete(handles.MSP);
%clear handles.MSP;
clear all;
%handles.maximo = 5;
handles.output=hObject;
guidata(hObject,handles);

Pero cuando pulso el botón me sale el siguiente error:

Reference to non-existent field 'MSP'.

Error in pfc>interrumpir_Callback (line 212)
fclose(handles.MSP);


Y no sé cómo hacerlo para que funcione. Por favor espero que alguien me ayude.

Muchísimas gracias. Un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Jorge De Los Santos
Val: 30
Ha disminuido su posición en 12 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Parar la Comunicación puerto serie en GUI

Publicado por Jorge De Los Santos (213 intervenciones) el 02/06/2014 03:47:01
Hola Luis.

Me parece que el detalle está en que debes guardar inmediatamente después de abrir la comunicación la variable handles.MSP, para ello necesitas colocar la línea "guidata(hObject, handles);" justo después de "fopen(handles.MSP);", es decir algo como lo siguiente:

1
2
3
4
5
6
7
8
.
.
.
fopen(handles.MSP);
guidata(hObject, handles);
. % Proceso 
.
.


Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Dave
Val: 497
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Parar la Comunicación puerto serie en GUI

Publicado por Dave (1094 intervenciones) el 02/06/2014 12:02:04
Hola Luis;

Una opción, sería dentro del código con el que estás leyendo los datos del puerto serial, coloque un segmento que código que vaya evaluando si se ha presionado el botón parar, esto lo podría hacer, evaluando si un determinado botón cambia de nombre o se deshabilita.

Espero que sea de alguna ayuda.

Saludos
Dave Correa
[email protected]
[email protected]
Servicios de Programación Matlab
http://fismatlab.org
http://fismatlab.blogspot.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar