Şu anda bir Matlab uygulaması tasarımcı uygulamasında seri bağlantı noktası yoluyla aldığım verileri görüntülemeye çalışıyorum. Lineer göstergelerin (~ 1 Hz) abysmal yenileme oranından ıstırap çekiyorum.Uygulama Tasarımcısı Kullanıcı Arabirimi öğelerinin yenileme hızını artırın
Göstergelerin değerleri, 30 Hz olarak ayarlanmış sabit bir zamanlayıcı tarafından güncellenir. Zamanlayıcı geri çağırmada zaman damgası yazdırması, doğru frekansla çağrıldığını gösterir. Bilgisayarım oldukça etkisiz ve Görev Yöneticisi yüksek yükte herhangi bir ipucu göstermiyor - aslında MATLAB uygulaması neredeyse hiç CPU zamanı tüketmiyor. Aslında sadece göstergeler değil, tüm UI öğeleri.
Tahminimce - veya daha iyisi: benim umudum - yenileme hızında bir miktar sert kapak olması gerekiyor. Ancak resmi belgeler, bunun nasıl değiştirileceğine dair herhangi bir ipucu vermez.
MATLAB sürümüm R2016b'dir.
Benim soru (lar):
bu R2017a ile sabit mi? Değilse: bir şey yapabilir miyim, yani MATLAB yerleşik dosyaları ile uğraşabilir miyim?
classdef testapp < matlab.apps.AppBase % Properties that correspond to app components properties (Access = public) UIFigure matlab.ui.Figure andwatchhowthisstartstospinsmoothlyGaugeLabel matlab.ui.control.Label andwatchhowthisstartstospinsmoothlyGauge matlab.ui.control.SemicircularGauge KeepturninghereKnobLabel matlab.ui.control.Label KeepturninghereKnob matlab.ui.control.Knob end properties (Access = private) tim_the_timer i = 0; end methods (Access = private) function app = refreshMeter(app, ~,~) % display timestamp datestr(now,'HH:MM:SS.FFF') % update the gauge app.andwatchhowthisstartstospinsmoothlyGauge.Value = app.i; app.i = app.i + 1; if app.i > 100 app.i = 0; end end end methods (Access = private) % Code that executes after component creation function startupFcn(app) t = timer; t.TimerFcn = @app.refreshMeter; t.Period = 0.02; t.BusyMode = 'drop'; t.ExecutionMode = 'fixedRate'; start(t); app.tim_the_timer = t; end % Close request function: UIFigure function UIFigureCloseRequest(app, event) stop(app.tim_the_timer); delete(app.tim_the_timer); delete(app); end end % App initialization and construction methods (Access = private) % Create UIFigure and components function createComponents(app) % Create UIFigure app.UIFigure = uifigure; app.UIFigure.Position = [100 100 640 480]; app.UIFigure.Name = 'UI Figure'; app.UIFigure.CloseRequestFcn = createCallbackFcn(app, @UIFigureCloseRequest, true); setAutoResize(app, app.UIFigure, true) % Create andwatchhowthisstartstospinsmoothlyGaugeLabel app.andwatchhowthisstartstospinsmoothlyGaugeLabel = uilabel(app.UIFigure); app.andwatchhowthisstartstospinsmoothlyGaugeLabel.HorizontalAlignment = 'center'; app.andwatchhowthisstartstospinsmoothlyGaugeLabel.Position = [275 138 246 15]; app.andwatchhowthisstartstospinsmoothlyGaugeLabel.Text = '... and watch how this starts to spin smoothly'; % Create andwatchhowthisstartstospinsmoothlyGauge app.andwatchhowthisstartstospinsmoothlyGauge = uigauge(app.UIFigure, 'semicircular'); app.andwatchhowthisstartstospinsmoothlyGauge.Position = [338 168 120 65]; % Create KeepturninghereKnobLabel app.KeepturninghereKnobLabel = uilabel(app.UIFigure); app.KeepturninghereKnobLabel.HorizontalAlignment = 'center'; app.KeepturninghereKnobLabel.Position = [119 265 112 15]; app.KeepturninghereKnobLabel.Text = 'Keep turning here...'; % Create KeepturninghereKnob app.KeepturninghereKnob = uiknob(app.UIFigure, 'continuous'); app.KeepturninghereKnob.Position = [145 314 60 60]; end end methods (Access = public) % Construct app function app = testapp() % Create and configure components createComponents(app) % Register the app with App Designer registerApp(app, app.UIFigure) % Execute the startup function runStartupFcn(app, @startupFcn) if nargout == 0 clear app end end % Code that executes before app deletion function delete(app) % Delete UIFigure when app is deleted delete(app.UIFigure) end end end
Edit:
Burada konuyu gösteren bir MCV örnek ben topuzu, kaydırıcı açtığınızda göstergesi derhal bir vs. Yani bir şekilde yeteneği güncellenir fark Daha yüksek yenileme oranı kesinlikle var ... ama kontrollere dokunmak zorunda kalmadan nasıl etkinleştirilir? Buna göre MCV güncellendi.
Bu çok ilginç bir problem!Aslında, sanırım "[throttling]" (https://dojotoolkit.org/api/1.10/dojo/throttle.html) "olarak bilinen bir mekanizma yaşıyorsunuz. Güncellemelerin çok sık olduğu zaman sadece başladığı fark ettim. Örnek olarak: Eğer her 0.16s'i güncellemek için ayarlarsanız (MATLAB 2017a'mda) hareket oldukça düzgün. Bunu daha fazla araştırmaya çalışacağım .... –