Bonjour,
Je suis actuellement en cours de développement d'un logiciel sous matlab avec IHM.
Pour faire passer des données entre différentes fonctions, j'utilise la méthode avec Guidata décrite dans le tutoriel.
Le logiciel est déjà bien avancé et pour l'instant je n'ai eu aucun soucis... jusqu'à aujourd'hui!!
Voila un extrait d'une des fonctions :
et voici un extrait de la fonction calculRendementProdMC
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 function affichageRendementProduction h = findobj('tag','tableauAffichage'); hp = findobj( 'tag', 'tableauPanel' ); setInfoOperationInvisible; hpanelRendementProductionMC = findobj( 'tag', 'panel_RendementProductionMC'); set( hpanelRendementProductionMC, 'Visible', 'On' ); donnees = guidata(gcf); if( donnees.CalculRendementProdMCFait == 0) cd('..'); cd('CalculsSystemesOKKO\'); calculRendementProdMC; end donnees = guidata(gcf); set(hp, 'Title', 'Rendement de production MC'); set(h,'data',donnees.RendementOkParCritereCouleur); set(h,'RowName',donnees.nomsParamSystemes); set(h,'ColumnName', 'Rendement de production (%)'); hEditRdmtGlobal = findobj( 'tag', 'tag_RendementGlobalEdit'); set( hEditRdmtGlobal,'String', num2str( donnees.RendementGlobalMC )); cd('..'); cd('Callback\'); end
Le problème que j'ai est le suivant : les nouveaux paramètres enregistrés dans guidata dans la sous fonction sont bien récupérables dans la fonction affichageRendementProduction, mais reprennent leur valeur d'initialisation (cad 0 ) une fois que je sors de cette fonction !!
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 function calculRendementProdMC donnees = guidata(gcf); etatSysteme = donnees.etatSysteme; % calcul rendement par critère nbSimusOKParCritere = zeros( 1, size( donnees.etatSysteme,2 )); for i=1:1:size( etatSysteme,2 ) nbSimusOKParCritere(1,i) = size( find( strcmp( etatSysteme(:,i), 'OK' )),1); end RdmtOkParCritere = nbSimusOKParCritere/donnees.NbSimu * 100; donnees.RendementOkParCritere = RdmtOkParCritere; % calcul rendement global ligneTypeSimuOK = cell(1, size( etatSysteme,2)); for i=1:1: size( etatSysteme,2 ) ligneTypeSimuOK{i} = 'OK'; end simuOK = zeros( donnees.NbSimu, 1); for i=1:1:donnees.NbSimu simuOK(i) = isequal( ligneTypeSimuOK, etatSysteme(i,:)); end nbSimuOK = size(find( simuOK == 1),1); donnees.RendementGlobalMC = nbSimuOK/donnees.NbSimu * 100; donnees.CalculRendementProdMCFait = 1; % mise en couleur cd( '..' ); cd( 'ColorationTableau\' ); % Données résultats + état RendementOkParCritereCouleur = cell( size( RdmtOkParCritere,2 ),1 ); for i=1:1: size( donnees.etatSysteme,2 ) if ( RdmtOkParCritere(i) <= 50 ) RendementOkParCritereCouleur{i,1}= colTextBG( num2str( RdmtOkParCritere(i),6), 'FF0000'); elseif( RdmtOkParCritere(i) >50 && RdmtOkParCritere(i) < 100 ) RendementOkParCritereCouleur{i,1} = colTextBG( num2str( RdmtOkParCritere(i),6), 'FFFF00'); elseif( RdmtOkParCritere(i) == 100 ) RendementOkParCritereCouleur{i,1} = colTextBG( num2str( RdmtOkParCritere(i),6), '00FF00'); else RendementOkParCritereCouleur{i,1} = colTextBG( num2str( RdmtOkParCritere(i),6), 'FF8C00'); end end donnees.RendementOkParCritereCouleur = RendementOkParCritereCouleur; %% guidata(gcf,donnees); end
Qd je sors de la fonction affichageRendementProduction, c'est comme ci les paramètres RendementOkParCritereCouleur, RendementGlobalMC... etc n'avaient pas été modifié...
Quelqu'un aurait il une idée du problème ?
Car j'ai effectué la même méthode dans d'autres fonctions et je n'ai aucun soucis...
Merci !!
Partager