2

シリアル通信で文字列を読み取る 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', '');

問題の内容と修正方法を知っている人はいますか?

4

2 に答える 2

1

シリアル ポート コールバックは、 GUIDE コールバックとは異なります。シリアル ポート コールバックの場合、オブジェクト ハンドルはシリアル ポート オブジェクトに対するものであり、イベントはシリアル イベントです。3 番目の引数がないためhandles、未定義です。

この関数内から GUI ハンドルを取得する場合は、ハンドルを取得する方法と同様に、明示的に取得する必要がありますcomport- ちなみにcomport、コールバックと同じオブジェクトだと思うので、この方法で取得する必要はおそらくありません。として既に受け取っていhObjectます。

この場合handlesGUIDE 固有のデータであるため、それを取得する「適切な」方法は次のようになります。

handles = guidata(gcf);

GUI に複数の Figure がある場合、適切な Figure を取得するfindobj()代わりにを使用する必要がある場合があります。gcf()

于 2014-01-12T18:32:19.860 に答える