이 페이지는 기계 번역을 사용하여 번역되었습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
콜백 함수 생성 및 실행
소개
이벤트 콜백을 사용하면 이벤트에 대한 응답으로 수행할 수 있는 처리가 있습니다. 어떤 이벤트에 콜백을 연결할지, 그리고 이 콜백이 어떤 함수를 실행할지는 사용자가 결정합니다.
이 섹션은 다음을 설명합니다.
콜백 함수를 만드는 방법을 설명합니다.
콜백 속성의 값으로 함수를 지정하는 방법을 설명합니다.
이벤트 콜백을 사용하는 두 가지 예를 제공합니다.
수집되는 프레임에서 샘플 프레임을 보는 콜백을 사용하는 방법을 보여줍니다.
참고
콜백에 Figure 업데이트와 같이 CPU 사용량이 많은 작업이 포함되는 경우 콜백 함수 실행이 지연될 수 있습니다.
콜백 함수 생성하기
이 섹션에서는 TimerFcn
, FramesAcquiredFcn
, StartFcn
, StopFcn
, TriggerFcn
및 ErrorFcn
콜백에 대한 콜백 함수를 생성하는 방법을 설명합니다.
콜백 함수에는 최소한 두 개의 입력 인수가 필요합니다.
이미지 수집 객체
이벤트와 관련된 이벤트 구조체
이 콜백 함수의 함수 헤더는 기본 구문을 보여줍니다.
function mycallback(obj,event)
첫 번째 인수 obj
는 이미지 수집 객체 자체입니다. 객체를 사용할 수 있으므로 getdata
와 같이 인수로 객체를 필요로 하는 툴박스 함수를 콜백 함수에서 사용할 수 있습니다. 또한 모든 객체 속성에 접근할 수 있습니다.
두 번째 인수 event
는 이벤트와 관련된 이벤트 구조체입니다. 이 이벤트 정보는 콜백 함수를 실행한 이벤트에만 해당합니다. 지원되는 이벤트 유형과 관련 이벤트 구조체의 전체 목록은 Event Structures를 참조하세요.
이러한 두 가지 필수 입력 인수 외에도 콜백 함수에 대해 추가적인 애플리케이션별 인수를 지정할 수 있습니다.
참고
객체 및 이벤트 인수와 추가 인수를 받으려면 콜백 속성의 값으로 함수 이름을 지정할 때 셀형 배열을 사용해야 합니다. 자세한 내용은 콜백 함수 지정 항목을 참조하십시오.
콜백 함수 작성하기
설명을 위해, 이 예제에서는 프레임 수집 이벤트에 대한 콜백 함수를 구현합니다. 이 콜백 함수를 사용하면 주기적으로 샘플 프레임을 보면서 수집되는 프레임을 모니터링할 수 있습니다.
이 함수를 구현하려면 콜백 함수가 단일 프레임의 데이터를 수집하여 MATLAB® 그림 창에 수집된 프레임을 표시합니다. 이 함수는 인수로 전달된 이벤트 구조체에 액세스하여 표시되는 프레임의 타임스탬프를 표시합니다. 콜백 함수의 drawnow
명령은 MATLAB가 디스플레이를 업데이트하도록 강제합니다.
function display_frame(obj,event) sample_frame = peekdata(obj,1); imagesc(sample_frame); drawnow; % force an update of the figure window abstime = event.Data.AbsTime; t = fix(abstime); sprintf('%s %d:%d:%d','timestamp', t(4),t(5),t(6))
이 함수를 콜백으로 사용하는 방법을 보려면 샘플 프레임 보기를 참조하세요.
콜백 함수 지정
이벤트의 콜백 속성 값을 설정하여 콜백 함수를 특정 이벤트와 연결합니다. 비디오 입력 객체는 모든 유형의 이벤트에 대한 콜백 속성을 지원합니다.
다음 세 가지 방법으로 콜백 함수를 속성 값으로 지정할 수 있습니다.
다음 섹션에서는 각 옵션에 대한 자세한 정보를 제공합니다.
참고
콜백 함수에 전달된 객체나 이벤트 구조체에 액세스하려면 함수를 셀형 배열이나 함수 핸들로 지정해야 합니다.
문자 벡터를 사용하여 콜백 함수 지정
콜백 함수를 문자 벡터로 지정할 수 있습니다. 예를 들어, 이 코드는 비디오 입력 객체 vid
에 대한 시작 이벤트 콜백 속성 StartFcn
의 값으로 콜백 함수 mycallback
를 지정합니다.
vid.StartFcn = 'mycallback';
이 경우 콜백은 MATLAB 작업 공간에서 평가됩니다.
셀 배열을 사용하여 콜백 함수 지정
셀형 배열 내부의 문자 벡터로 콜백 함수를 지정할 수 있습니다.
예를 들어, 이 코드는 비디오 입력 객체 vid
에 대한 시작 이벤트 콜백 속성 StartFcn
의 값으로 콜백 함수 mycallback
를 지정합니다.
vid.StartFcn = {'mycallback'};
추가 파라미터를 지정하려면 셀 배열에 추가 요소로 포함시킵니다.
time = datestr(datetime('now'),0); vid.StartFcn = {'mycallback',time};
콜백 함수에 전달되는 처음 두 인수는 여전히 비디오 입력 객체(obj
)와 이벤트 구조체(event
)입니다. 이 두 가지 인수 뒤에는 추가 인수가 따릅니다.
함수 핸들을 사용하여 콜백 함수 지정
콜백 함수를 함수 핸들로 지정할 수 있습니다.
예를 들어, 이 코드는 비디오 입력 객체 vid
에 대한 시작 이벤트 콜백 속성 StartFcn
의 값으로 콜백 함수 mycallback
를 지정합니다.
vid.StartFcn = @mycallback;
추가 파라미터를 지정하려면 함수 핸들과 파라미터를 셀형 배열의 요소로 포함합니다.
time = datestr(datetime('now'),0); vid.StartFcn = {@mycallback,time};
MATLAB 파일 내에서 로컬 콜백 함수를 실행하는 경우 콜백을 함수 핸들로 지정해야 합니다.
툴박스 함수를 콜백으로 지정
사용자가 만든 콜백 함수를 지정하는 것 외에도 start
, stop
또는 trigger
툴박스 함수를 콜백으로 지정할 수도 있습니다. 예를 들어, 이 코드는 중지 이벤트 콜백의 값을 Image Acquisition Toolbox™ start
함수로 설정합니다.
vid.StopFcn = @start;
콜백 비활성화
콜백 함수 실행 중 오류가 발생하면 툴박스는 콜백을 비활성화하고 다음과 유사한 메시지를 표시합니다.
start(vid) ??? Error using ==> frames_cb Too many input arguments. Warning: The FramesAcquiredFcn callback is being disabled.
비활성화된 콜백을 활성화하려면 콜백과 관련된 속성 값을 설정하거나 객체를 다시 시작합니다.
샘플 프레임 보기
이 예제에서는 비디오 입력 객체를 생성하고 수집한 프레임을 콜백 함수 작성하기에서 생성된 display_frame
함수로 이벤트 콜백 함수 속성을 설정합니다.
이 예제에서는 객체의 TriggerRepeat
속성을 4로 설정하여 50개의 프레임을 수집합니다. 이 예제를 실행하면, 5개의 프레임이 수집될 때마다 수집한 데이터의 샘플 프레임이 표시됩니다.
이미지 수집 객체 생성 — 이 예제에서는 Matrox® 이미지 수집 장치에 대한 비디오 입력 객체를 생성합니다. 이 예제를 시스템에서 실행하려면
imaqhwinfo
함수를 사용하여 이미지 수집 장치에 대한 객체 생성자를 가져오고 해당 구문을 다음 코드로 바꾸세요.vid = videoinput('matrox', 1);
속성 값 구성 — 이 예에서는
FramesPerTrigger
값을 30으로 설정하고TriggerRepeat
속성을 4로 설정합니다. 이 예제에서는 콜백 함수 작성하기에서 생성된 이벤트 콜백 함수display_frame
를FramesAcquiredFcn
콜백의 값으로 지정합니다. 객체는FramesAcquiredFcnCount
속성 값에 지정된 대로 5프레임마다FramesAcquiredFcn
를 실행합니다.vid.FramesPerTrigger = 30; vid.TriggerRepeat = 4; vid.FramesAcquiredFcnCount = 5; vid.FramesAcquiredFcn = {'display_frame'};
데이터 수집 — 비디오 입력 객체를 시작합니다. 5개의 프레임을 수집할 때마다 객체는
display_frame
콜백 함수를 실행합니다. 이 콜백 함수는 메모리 버퍼에 기록된 가장 최근에 수집된 프레임을 표시합니다.start(vid)
정리 — 더 이상 필요하지 않으면 메모리에서 이미지 수집 객체와 이를 참조하는 변수를 항상 제거합니다.
delete(vid) clear vid