Main Content

타이머를 사용하여 앱에서 주기적으로 데이터 플로팅하기

이 앱은 앱 디자이너에서 타이머를 구성하여 규칙적인 시간 간격으로 작업을 실행하는 방법을 보여줍니다. 이 예제에서 앱은 타이머를 사용하여 5초마다 웹사이트에서 풍속 데이터를 쿼리한 후 반환된 값을 플로팅합니다.

데이터를 쿼리하고 플로팅하기

타이머의 콜백 함수에 주기적으로 실행하려는 작업의 코드를 작성합니다. WindSpeedTimerFcn이라는 프라이빗 함수를 만들고 함수 헤더에 두 개의 추가 입력 인수를 포함합니다. 첫 번째 인수는 종종 src로 명명되며 콜백을 트리거하는 객체를 지정하고, 두 번째 인수는 종종 event로 명명되며 콜백 함수에 이벤트 데이터를 제공합니다. 이 2개의 추가 입력 인수를 전달하면 함수가 타이머 콜백으로 지정됩니다. 타이머 콜백의 구문에 대한 자세한 내용은 타이머 콜백 함수 항목을 참조하십시오.

이 콜백 내에 웹사이트에서 데이터를 추출하고 처리하는 코드를 추가합니다. 그런 다음 좌표축을 plot 함수의 첫 번째 인수로 사용하여 데이터를 플로팅합니다. 앱 내 플로팅에 대한 자세한 내용은 앱 디자이너에서 그래픽스 표시하기 항목을 참조하십시오.

function WindSpeedTimerFcn(app,src,event)
   % Get current time
   tnow = datetime("now","TimeZone","America/New_York");
   % Get wind speed data from MathWorks weather station
   weatherdata = webread("https://api.thingspeak.com/channels/12397/feeds/last.json");
   y = str2double(weatherdata.field2);
   % Plot data
   plot(app.UIAxes,tnow,y,"ob");
   % Adjust x and y limits based on plotted data
   % ...
end

타이머 생성하기

5초마다 WindSpeedTimerFcn 함수를 실행하는 타이머를 만듭니다. 먼저, 앱 코드의 다른 부분에서 타이머를 수정하고 삭제할 수 있도록 타이머를 저장하기 위한 WindSpeedTimer라는 이름의 프라이빗 속성을 만듭니다. 앱 디자이너 툴스트립의 편집기 탭에서 속성을 선택하고 프라이빗 속성 옵션을 선택합니다. 그런 다음 startupFcn 콜백에서 타이머를 만들고 이를 WindSpeedTimer에 저장합니다.

app.WindSpeedTimer = timer("ExecutionMode","fixedRate","Period",5, ...
    "BusyMode","queue","TimerFcn",@app.WindSpeedTimerFcn)

이 함수 호출에서는 타이머가 5초마다 반복적으로 실행되도록 구성합니다. 또한 타이머가 사용 중일 때 타이머 콜백을 대기열에 넣고 타이머가 실행 중일 때 규칙적인 간격으로 실행되는 콜백 함수로 함수 WindSpeedTimerFcn을 지정합니다. 함수 핸들 @app.WindSpeedTimerFcn을 사용하여 이 함수를 timer 객체의 TimerFcn 콜백과 연결합니다. MATLAB®은 함수가 실행될 때 두 개의 입력 인수를 콜백 함수에 자동으로 전달하기 때문에 함수 핸들은 명시적으로 어떠한 입력 인수도 참조하지 않습니다.

타이머를 시작하고 중지하기

해당 버튼을 누르면 타이머를 시작하고 중지하는 콜백 함수를 만듭니다. app.WindSpeedTimer 속성을 참조하여 이러한 콜백 함수의 timer 객체에 액세스합니다.

  • 타이머가 아직 실행되고 있지 않은 경우 시작 버튼을 누르면 콜백 함수에서 타이머를 시작합니다.

if strcmp(app.WindSpeedTimer.Running,"off")
   start(app.WindSpeedTimer);
end
  • 중지 버튼을 누르면 콜백 함수에서 타이머를 중지합니다.

stop(app.WindSpeedTimer);

콜백에 대한 자세한 내용은 앱 디자이너에서 콜백 사용하기 항목을 참조하십시오.

앱이 닫힐 때 타이머 삭제하기

앱 성능을 최적화하려면 닫기 요청 콜백 함수를 생성하여 앱이 닫힐 때 타이머를 삭제하십시오. 먼저 컴포넌트 브라우저에서 UI Figure를 마우스 오른쪽 버튼으로 클릭하고 상황별 메뉴에서 콜백 > CloseRequestFcn 콜백 추가를 선택하여 앱에 대한 CloseRequestFcn 콜백을 추가합니다. 그런 다음 이 CloseRequestFcn 콜백에서 타이머를 중지합니다.

stop(app.WindSpeedTimer);

마지막으로 타이머와 Figure를 삭제합니다.

delete(app.WindSpeedTimer);
delete(app);

완전하게 코딩된 앱을 보고 실행하려면 앱 디자이너에서 이 예제를 실행하십시오.

참고 항목

함수

속성

관련 항목