Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab Can';t从函数访问句柄_Matlab_Matlab Guide_Handles - Fatal编程技术网

Matlab Can';t从函数访问句柄

Matlab Can';t从函数访问句柄,matlab,matlab-guide,handles,Matlab,Matlab Guide,Handles,我正在尝试使用GUIDE创建一个GUI,它通过串行通信读取字符串。之后,它会剪切出所需的数字并将其显示在屏幕上。我创建了此函数,每当COM端口的缓冲区中有一行数据时,都会执行此函数: function out = intcon1(hObject, eventdata, handles) global comPort; a=fgetl(comPort); disp(a); a(a==' ') = ''; indexstart=strfind(a,'['); indexend=strfind(a,

我正在尝试使用GUIDE创建一个GUI,它通过串行通信读取字符串。之后,它会剪切出所需的数字并将其显示在屏幕上。我创建了此函数,每当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', '');
有人知道问题是什么以及如何解决吗?

与之不同。在串行端口回调的情况下,对象句柄指向串行端口对象,事件为串行事件。没有第三个参数,因此
句柄
未定义

如果要从该函数中检索GUI句柄,则需要显式执行此操作,与检索
comport
句柄的方式类似-顺便说一句,获取
comport
这种方式可能是不必要的,因为我可以想象回调已经接收到与
hObject
相同的对象

因为在本例中,
句柄
是,检索它的“正确”方法 将是:

handles = guidata(gcf);

如果您的GUI有多个图形,您可能需要使用
findobj()
而不是
gcf()
来获得正确的图形。

您可能使用函数句柄语法定义了BytesAvailableFCN,而不使用其他参数,如下所示

s.BytesAvailableFCN = @myfun();
相反,您需要使用单元格数组定义回调,如前所述。比如说,

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

运行该行时,
句柄必须已经定义并位于工作区中

这是使用
字节可用EFCN
的串行端口回调吗?如果是这样的话,您期望的参数是完全错误的。是的,它使用的是BytesAvailableFCN。那么参数应该是什么?你能在创建串行对象和定义BytesAvailableFCN的地方发布代码吗?好的。但是如何为句柄定义全局变量呢?根据Matlab,列表框的句柄不能定义为全局变量或复制到全局变量。@bdvd抱歉,我对指南有点生疏,多年没有接触过它-我已经检查了文档并相应地更新了答案。感谢您的帮助。这就是问题所在。