
Problema con GUIDE
Publicado por Luis (10 intervenciones) el 07/02/2013 17:31:49
Hola, estoy realizando una GUIDE de matlab en la cual tengo los siguientes botones:
1)Iniciar la comunicación (cuyo Tag es iniciar) en la cual Activo la comunicación serie entre un microcontrolador que tengo y el ordenador. De esta manera empiezo a recibir los datos que me manda el microcontrolador y los voy guardando en un vector, a la vez que los voy representando.
2)Interrumpir la comunicación. Con este botón quiero que en el momento de pulsarlo se interrumpa la comunicación, con lo cual dejaré de recibir datos del microcontrolador.
la función callback iniciar os la pongo a continuación:
% --- Executes on button press in iniciar.
function iniciar_Callback(hObject, eventdata, handles)
% hObject handle to iniciar (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%msgbox('Inicio de comunicación. Espere a nuevo mensaje de información en el que se indique que ha acabado de recibir datos.','Información')
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(handles.MSP,'Timeout',1); % 1 segundos de tiempo de espera
fopen(handles.MSP);
%out = fread(MSP,1,'uint16')';
%tension = out.*(3.5/1024)';
%handles.fin=0;
K1= [1023];
i=1;
%while (K1(i)> 10)
%K1 = [K1 fread(MSP,1,'uint16')];
%i=i+1;
%pause(1);
%end
for j=1:120 %tomamos 1000 datos....
K1 = [K1 fread(handles.MSP,1,'uint16')];
%pause(1);
longitud=length(K1);
tension1 = K1.*(3.5/1024)';
tiempo=[1:1:longitud];
axes(handles.axes3);
plot(tiempo, tension1, 'LineWidth',2);
grid on;
end
handles.tension = K1.*(3.5/1024)';
fclose(handles.MSP);
delete(handles.MSP);
clear handles.MSP;
msgbox('Datos almacenados','Fin de procesado de datos');
handles.output = hObject;
guidata(hObject, handles);
la función callback interrumpir es la siguiente:
% --- Executes on button press in interrumpir.
function interrumpir_Callback(hObject, eventdata, handles)
% hObject handle to interrumpir (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
handles.parar=questdlg('¿Desea dejar de recibir datos?','Fin de recepción','Si','No','No');
if strcmp(handles.parar,'Si')
fclose(handles.MSP);
delete(handles.MSP);
clear handles.MSP;
end
handles.output=hObject;
guidata(hObject,handles);
Cuando le doy a ejecutar y presiono el boton Iniciar la comunicación, no hay ningún problema. Empieza a recibir datos y me los va representando en una gráfica.
El problema viene cuando le doy al botón de interrumpir la comunicación, que me sale el siguiente error y no para de recibir datos, sigue representándolos en la gráfica. Este es el error que me sale al presionar el botón Interrumpir la comunicación:
??? Reference to non-existent field 'MSP'.
Error in ==> pfc>interrumpir_Callback at 202
fclose(handles.MSP);
Error in ==> gui_mainfcn at 96
feval(varargin{:});
Error in ==> pfc at 42
gui_mainfcn(gui_State, varargin{:});
Error in ==>
@(hObject,eventdata)pfc('interrumpir_Callback',hObject,eventdata,guidata(hObject))
??? Error using ==> axes
Error while evaluating uicontrol Callback
A ver si me podéis echar una mano. Muchas gracias y perdón por las molestias.
Un saludo.
1)Iniciar la comunicación (cuyo Tag es iniciar) en la cual Activo la comunicación serie entre un microcontrolador que tengo y el ordenador. De esta manera empiezo a recibir los datos que me manda el microcontrolador y los voy guardando en un vector, a la vez que los voy representando.
2)Interrumpir la comunicación. Con este botón quiero que en el momento de pulsarlo se interrumpa la comunicación, con lo cual dejaré de recibir datos del microcontrolador.
la función callback iniciar os la pongo a continuación:
% --- Executes on button press in iniciar.
function iniciar_Callback(hObject, eventdata, handles)
% hObject handle to iniciar (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%msgbox('Inicio de comunicación. Espere a nuevo mensaje de información en el que se indique que ha acabado de recibir datos.','Información')
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(handles.MSP,'Timeout',1); % 1 segundos de tiempo de espera
fopen(handles.MSP);
%out = fread(MSP,1,'uint16')';
%tension = out.*(3.5/1024)';
%handles.fin=0;
K1= [1023];
i=1;
%while (K1(i)> 10)
%K1 = [K1 fread(MSP,1,'uint16')];
%i=i+1;
%pause(1);
%end
for j=1:120 %tomamos 1000 datos....
K1 = [K1 fread(handles.MSP,1,'uint16')];
%pause(1);
longitud=length(K1);
tension1 = K1.*(3.5/1024)';
tiempo=[1:1:longitud];
axes(handles.axes3);
plot(tiempo, tension1, 'LineWidth',2);
grid on;
end
handles.tension = K1.*(3.5/1024)';
fclose(handles.MSP);
delete(handles.MSP);
clear handles.MSP;
msgbox('Datos almacenados','Fin de procesado de datos');
handles.output = hObject;
guidata(hObject, handles);
la función callback interrumpir es la siguiente:
% --- Executes on button press in interrumpir.
function interrumpir_Callback(hObject, eventdata, handles)
% hObject handle to interrumpir (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
handles.parar=questdlg('¿Desea dejar de recibir datos?','Fin de recepción','Si','No','No');
if strcmp(handles.parar,'Si')
fclose(handles.MSP);
delete(handles.MSP);
clear handles.MSP;
end
handles.output=hObject;
guidata(hObject,handles);
Cuando le doy a ejecutar y presiono el boton Iniciar la comunicación, no hay ningún problema. Empieza a recibir datos y me los va representando en una gráfica.
El problema viene cuando le doy al botón de interrumpir la comunicación, que me sale el siguiente error y no para de recibir datos, sigue representándolos en la gráfica. Este es el error que me sale al presionar el botón Interrumpir la comunicación:
??? Reference to non-existent field 'MSP'.
Error in ==> pfc>interrumpir_Callback at 202
fclose(handles.MSP);
Error in ==> gui_mainfcn at 96
feval(varargin{:});
Error in ==> pfc at 42
gui_mainfcn(gui_State, varargin{:});
Error in ==>
@(hObject,eventdata)pfc('interrumpir_Callback',hObject,eventdata,guidata(hObject))
??? Error using ==> axes
Error while evaluating uicontrol Callback
A ver si me podéis echar una mano. Muchas gracias y perdón por las molestias.
Un saludo.
Valora esta pregunta


0