Bonjour à tous.

Je conçois actuellement un logiciel avec GUI qui se connecte en TCP à un récepteur numérique et récupère tous les 7ms une trame contenant une cinquantaine de paramètres (modulations, injection, position gps,etc...) sur lesquels j'effectue des calculs (transformation WGS84 => cartésien , algos sur divers paramètres, FFT).

J'enregistre chaque trame dans un fichier log.

J'affiche divers courbes sélectionnables. Il y a au total 4 axes contenant chacun 2 courbes(plotyy).
L'acquisition des data peut durer parfois 45 minutes. Autant dire que le nombre de points à afficher peut atteindre des sommets.

Je rafraichis l'affichage chaque seconde grace à un timer qui appelle une fonction update_display que voici:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
%%
% --- Update plot    
function update_display(obj,event,handles)
 
global passe params_plot ;
%Pas à faire varier en fonction du nombre total de point
params_plot.step_plot=1;
 
    [haxes1,hline11,hline12] = plotyy(handles.axes1,passe.numero_trame(1:params_plot.step_plot:passe.nb_trames),passe.m15(1:params_plot.step_plot:passe.nb_trames),passe.numero_trame(1:params_plot.step_plot:passe.nb_trames),passe.m135(1:params_plot.step_plot:passe.nb_trames));
    if isnan(params_plot.ymax_g_1)
        set(haxes1(1),'YLimMode','auto');
    else
        set(haxes1(1),'ylim',[params_plot.ymin_g_1 params_plot.ymax_g_1]);%,'ytick',[params_plot.ymin_g_1 params_plot.ymax_g_1]);
    end
    if isnan(params_plot.ymax_d_1)
        set(haxes1(2),'YLimMode','auto');
    else
        set(haxes1(2),'ylim',[params_plot.ymin_d_1 params_plot.ymax_d_1]);%,'ytick',[params_plot.ymin_d_1 params_plot.ymax_d_1]);
    end
    set(haxes1(1),'Xgrid','on')
    set(haxes1(1),'Ygrid','on')
    set(haxes1(2),'Xgrid','on')
    set(haxes1(2),'Ygrid','on')
 
    [haxes2,hline21,hline22] = plotyy(handles.axes2,passe.numero_trame(1:params_plot.step_plot:passe.nb_trames),passe.injection(1:params_plot.step_plot:passe.nb_trames),passe.numero_trame(1:params_plot.step_plot:passe.nb_trames),passe.site_ref(1:params_plot.step_plot:passe.nb_trames));
    if isnan(params_plot.ymax_g_2)
        set(haxes2(1),'YLimMode','auto');
    else
        set(haxes2(1),'ylim',[params_plot.ymin_g_2 params_plot.ymax_g_2]);%,'ytick',[params_plot.ymin_g_2 params_plot.ymax_g_1]);
    end
    if isnan(params_plot.ymax_d_2)
        set(haxes2(2),'YLimMode','auto');
    else
        set(haxes2(2),'ylim',[params_plot.ymin_d_2 params_plot.ymax_d_2]);%,'ytick',[params_plot.ymin_d_2 params_plot.ymax_d_2]);
    end
    set(haxes2(1),'Xgrid','on')
    set(haxes2(1),'Ygrid','on')
    set(haxes2(2),'Xgrid','on')
    set(haxes2(2),'Ygrid','on')
    set(handles.axes2,'DrawMode','Fast')
 
    [haxes3,hline31,hline32] = plotyy(handles.axes3,passe.numero_trame(1:params_plot.step_plot:passe.nb_trames),passe.bearing(1:params_plot.step_plot:passe.nb_trames),passe.numero_trame(1:params_plot.step_plot:passe.nb_trames),passe.az_ref(1:params_plot.step_plot:passe.nb_trames));
    if isnan(params_plot.ymax_d_3)
        set(haxes3(2),'YLimMode','auto');
    else
        set(haxes3(2),'ylim',[params_plot.ymin_d_3 params_plot.ymax_d_3]);%,'ytick',[params_plot.ymin_d_3 params_plot.ymax_d_3]);
    end
    if isnan(params_plot.ymax_g_3)
        %set(haxes3(1),'YLimMode','auto
        set(haxes3(1),'ylim',[get(haxes3(2),'ylim')]);
    else
        set(haxes3(1),'ylim',[params_plot.ymin_g_3 params_plot.ymax_g_3]);%,'ytick',[params_plot.ymin_g_3 params_plot.ymax_g_3]);
    end
    set(haxes3(1),'Xgrid','on')
    set(haxes3(1),'Ygrid','on')
    set(haxes3(2),'Xgrid','on')
    set(haxes3(2),'Ygrid','on')
 
    [haxes4,hline41,hline42] = plotyy(handles.axes4,passe.numero_trame(1:params_plot.step_plot:passe.nb_trames),passe.err_rel_mod40_corr(1:params_plot.step_plot:passe.nb_trames),passe.numero_trame(1:params_plot.step_plot:passe.nb_trames),passe.dist_ref(1:params_plot.step_plot:passe.nb_trames));
    if isnan(params_plot.ymax_g_4)
        set(haxes4(1),'YLimMode','auto');
    else
        set(haxes4(1),'ylim',[params_plot.ymin_g_4 params_plot.ymax_g_4]);%,'ytick',[params_plot.ymin_g_4 params_plot.ymax_g_4]);
    end
    if isnan(params_plot.ymax_d_4)
        set(haxes4(2),'YLimMode','auto');
    else
        set(haxes4(2),'ylim',[params_plot.ymin_d_4 params_plot.ymax_d_4]);%,'ytick',[params_plot.ymin_d_4 params_plot.ymax_d_4]);
    end
    set(haxes4(1),'Xgrid','on')
    set(haxes4(1),'Ygrid','on')
    %set(haxes4(2),'Xgrid','on')
    %set(haxes4(2),'Ygrid','on')
Cette fonction met 25ms à afficher les courbes.

Existe-t-il un moyen à ma portée de non spécialiste matlab de diminuer ce temps en rafraichissant seulement les points nouvellements calculés au lieu de TOUT réafficher?

Je vais faire varier le 'pas' des data à afficher en fonction du nombre total de point mais cela ne change rien pour les premières secondes où il n'y a pas beaucoup de points et où on est déjà à 25ms.

J'ai lu qu'il existait une fonction refreshdata... Peut-elle avoir un intérêt dans mon cas? Je n'ai pas réussi à l'utiliser avec plotyy...

Merci d'avance pour votre aide!