2014-01-16 3 views
0

GUI에서 타이머를 사용하려고합니다. 다음 코드에서 오류가 발생했습니다.Matlab : 비 구조 배열에서 타이머가 발생했습니다.

function main_OpeningFcn(hObject, eventdata, handles, varargin) 
handles.output = hObject; 
handles.timer = timer(... 
'ExecutionMode', 'fixedRate', ...  % Run timer repeatedly 
'Period', 1, ...      % Initial period is 1 sec. 
'TimerFcn', {@send_Callback,hObject}); 
guidata(hObject, handles); 

function send_Callback(hObject, eventdata, handles) 
comma  = get(handles.Tx_send, 'String');%Tx_send is a text field 
TxText  = char(comma); 
sf   = rc4e2(TxText,key);%rc4e2 is an encryption 
key  = TxText; 
DBC  = char(sf); 
disp(DBC); 
fwrite(handles.serConn, DBC);%serConn is COM port 

오류 : 오류 타이머 '타이머-1'에 대한 TimerFcn을 평가하면서. 비 구조 배열의 필드를 참조하려고합니다.

답변

0

timerFcn을 {'send_Callback',handles}으로 변경하십시오.

버전에서
+0

답장을 보내 주셔서 감사합니다. 이번에는 다음과 같이 표시됩니다. 'timer-1'타이머에 대해 TimerFcn을 평가하는 동안 오류가 발생했습니다. 입력 인수가 너무 많습니다. – Bee

+0

아 맞다. @ 기호를 제거하고 함수 이름을 따옴표로 묶어야합니다. 나는 그것을 바로 잡았다. – jerad

+0

죄송합니다. 그러나 ''timer ' "유형의 입력 인수에 대해 정의되지 않은 함수'send_Callback '이 새로운 오류입니다. – Bee

0

(원래의 질문에 기록 된대로), 당신은

'TimerFcn', {@send_Callback,handles}); 

MATLAB이 오류가 표시되는 이유를 작성해야는 콜백 함수를 호출 할 때, 자동 타이머 손잡이 등을 전달하기 때문에입니다 첫 번째 인수와 두 번째 인수로 빈 이벤트 구조. 셀 배열을 사용하여 제공하는 인수는 세 번째 배열입니다. 즉, send_Callback은 인수 목록 handles.timer,event,hObject (이 경우 hObject는 윈도우 핸들 임)과 함께 호출됩니다.

그런 다음 콜백 함수에서, 당신은 handles.Tx_send에 액세스하려고하지만, handles는 세 번째 인수하고 세 번째 인수로 바로 창 핸들을 제공하기 때문에, MATLAB 존재하지 않는 액세스 handles.output.Tx_send에 노력할 것입니다.

handles을 전달하면 콜백이 handles 개체에 액세스 할 수 있기 때문에 문제를 해결할 수 있습니다.