无法访问函数的句柄

时间:2014-01-12 18:03:37

标签: matlab matlab-guide handles

我正在尝试使用GUIDE创建GUI,GUIDE通过串行通信读取字符串。之后,它会删除所需的数字并将其放在屏幕上。我创建了这个函数,每当COM端口缓冲区中有一行数据时执行该函数:

function out = intcon1(hObject, eventdata, handles)
global comPort;
a=fgetl(comPort);
disp(a);

a(a==' ') = '';
indexstart=strfind(a,'[');
indexend=strfind(a,']');
measureddata=a(indexstart(1):indexend(1));
commas=strfind(measureddata,',');

re1data=measureddata(2:(commas(1)-1));
re2data=measureddata((commas(1)+1):(commas(2)-1));
im1data=measureddata((commas(2)+1):(commas(3)-1));
im2data=measureddata((commas(3)+1):(commas(4)-1));
temp1data=measureddata((commas(4)+1):(commas(5)-1));
temp2data=measureddata((commas(5)+1):(commas(6)-1));

old_str=get(handle.re1, 'String');
new_str=strvcat(old_str, re1data);
set(handles.listbox8, 'String', re1data);

现在我正在尝试将数据放入列表框中。这只是第一个值。问题是,Matlab一直说,句柄没有定义。但我已经创建了一个按钮,使用以下代码清除列表框:

function clearlists_Callback(hObject, eventdata, handles)
% hObject    handle to clearlists (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
set(handles.listbox8, 'String', '');

有谁知道问题是什么以及如何解决?

2 个答案:

答案 0 :(得分:1)

Serial port callbacksGUIDE callbacks不同。在串行端口回调的情况下,对象句柄是串行端口对象,事件是串行事件。没有第三个参数,因此handles未定义。

如果你想从这个功能中检索你的GUI句柄,你需要明确地这样做,类似于你检索comport句柄的方式 - 偶然得到{{1}这种方式可能是不必要的,因为我想象它是回调已经收到的同一个对象comport

由于在这种情况下hObjectGUIDE-specific data,因此正确的'检索它的方法  将是:

handles

如果您的GUI有多个数字,则可能需要使用handles = guidata(gcf); 代替findobj()才能获得正确的数据。

答案 1 :(得分:0)

您可能使用函数句柄语法定义了BytesAvailableFCN,而没有其他参数,例如

s.BytesAvailableFCN = @myfun();

相反,您需要使用单元格数组定义回调,如here in the documentation所述。例如,

s.BytesAvailableFCN = {'myFun', handles};

handles必须已经定义,并且在运行该行时在工作区中。