IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques Discussion :

paramètrer le nom du modèle dans toutes les fonctions [Débutant]


Sujet :

Interfaces Graphiques

  1. #1
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 283
    Points : 62
    Points
    62
    Par défaut paramètrer le nom du modèle dans toutes les fonctions
    bonjour,

    dans mon interface, l'utilisateur va choisir un modèle dans un répertoire. Ensuite toutes les fonctionnalités seront faites à partir de ce modèle choisi.

    Pour sélectionner son modèle, j'ai fait ce code qui marche très bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function Directory_Model_Callback(hObject, eventdata, handles)
    [FileName,PathName] = uigetfile('*.mdl','Select Configuration directory');
    if(FileName ~= 0)
        set(handles.pushbutton11,'string',FileName);
    end
     
    %Name of model
    [pathstr, name, ext, versn] = fileparts(FileName)
    set(handles.text33,'string',name);
    Donc pour récupérer le nom du modèle dans mes autres fonctions, je dois indiquer filename? name? sachant que j'ai testé les 2 et rien!
    j'ai cette erreur:
    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
    ??? Undefined function or variable 'filename'.
     
    Error in ==> maquette_bak>Stop_Simul_Button_Callback at
    199
    set_param(filename,'simulationcommand','stop')
     
    Error in ==> gui_mainfcn at 96
            feval(varargin{:});
     
    Error in ==> maquette_bak at 42
        gui_mainfcn(gui_State, varargin{:});
     
    Error in ==>
    @(hObject,eventdata)maquette_bak('Stop_Simul_Button_Callback',hObject,eventdata,guidata(hObject))
     
     
    ??? Error while evaluating uicontrol Callback
    je ne vois pas comment je peux faire autrement... j'ai essayé avec des ' ', sans ' ' mais rien...

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    Je pense que tu devrais récupérer le nom de ton modèle dans ton edit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mon_modele = get(handles.text33,'string');
    Duf

  3. #3
    Membre éclairé Avatar de tubaas
    Homme Profil pro
    Acousticien
    Inscrit en
    Août 2009
    Messages
    641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Acousticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2009
    Messages : 641
    Points : 825
    Points
    825
    Par défaut
    salut
    voir les tutoriels sur la programmation d'interfaces graphiques.
    Les variables en Matlab n'ont de portée que dans la fonction dans laquelle elles sont déclarées.
    Sinon
    Citation Envoyé par nawal59
    j'ai fait ce code qui marche très bien
    as-tu testé l'option annulation de la fenêtre de choix du fichier ?

  4. #4
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 283
    Points : 62
    Points
    62
    Par défaut
    oui je viens de tester, ça ne met aucun chemin si j'annule.


    comment je peux dire que "mon_modele" sera juste le nom du modèle si je mets ce code dans le edit?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mon_modele = get(handles.text33,'string');

    grrrrrrrr (j'en suis à ma 2ème semaine de matlab de ma vie, veuillez m'excuser si j'ai l'impression de rien comprendre des fois )

  5. #5
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 283
    Points : 62
    Points
    62
    Par défaut
    Je pense que ça ne marche pas car il récupère uniquement le nom du modèle et donc il va le chercher dans le répertoire courant, ce qu'il faudrait c'est que je puisse préciser le chemin du modèle dans le set ou get...

    si je mets le chemin entier, j'ai une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ??? Invalid Simulink object name: d:\Documents and
    Settings\nm\Mes documents\MATLAB\modeltest1.mdl.

  6. #6
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Oula, j'ai l'impression qu'il y a plusieurs problèmes imbriqués dans ta question...

    Pourrais-tu nous décrire clairement ce que tu veux faire?

    Voilà ce que j'ai compris d'après tes explications:
    1°) L'utilisateur choisi un modèle dont tu affiches le nom dans une edit box
    2°) Lorsqu'il clique sur un bouton, tu récupères le nom du modèle et pour lequel tu veux changer des paramètres.

    Est-ce que j'ai bien compris ton problème (ou pas )?

    Quelques idées en vrac pour l'instant:
    • Tu peux stocker le chemin complet de ton modèle dans la propriété UserData de ton edit
    • Il faut que ton modèle soit chargé (ou ouvert) pour utiliser SET_PARAM, pour cela tu peux utiliser OPEN_SYSTEM ou LOAD_SYSTEM (sans oublier SAVE_SYSTEM et CLOSE_SYSTEM à la fin)


    Duf

  7. #7
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 283
    Points : 62
    Points
    62
    Par défaut
    oui tu as bien compris, il choisit un modèle pour lequel il va lancer une simulation, l'arrêter, changer les paramètres etc...
    Tous les boutons doivent fonctionner pour n'importe quel modèle.

    Lorsque je choisis le modèle, il n'est pas automatiquement ouvert ou chargé??

  8. #8
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Ah non pas du tout, lorsque tu choisis le modèle avec UIGETFILE, MATLAB ne voit qu'un fichier (et même qu'un nom de fichier), il ne fait aucune action dessus (et dans le cas d'un modèle il ne le charge pas)

  9. #9
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 283
    Points : 62
    Points
    62
    Par défaut
    Okk!!! mais alors je mets après le uigetfile et un après toutes mes fonctions mais j'ai toujours l'erreur

    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
    ??? Undefined function or variable 'name'.
     
    Error in ==> maquette_bak>Stop_Simul_Button_Callback at
    188
    set_param(name,'simulationcommand','stop')
     
    Error in ==> gui_mainfcn at 96
            feval(varargin{:});
     
    Error in ==> maquette_bak at 42
        gui_mainfcn(gui_State, varargin{:});
     
    Error in ==>
    @(hObject,eventdata)maquette_bak('Stop_Simul_Button_Callback',hObject,eventdata,guidata(hObject))
     
     
    ??? Error while evaluating uicontrol Callback
    je dois d'abord définir le name mais je sais pas comment ni où...

  10. #10
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Comme ca par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    name = get(handles.text33,'string');

  11. #11
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 283
    Points : 62
    Points
    62
    Par défaut
    Alors j'ai bien ajouté la définition de la variable comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function Directory_Model_Callback(hObject, eventdata, handles)
    [FileName,PathName] = uigetfile('*.mdl','Select Configuration directory');
    if(FileName ~= 0)
        set(handles.pushbutton11,'string',[PathName FileName]);
    end
     
     
    %name of model
    [pathstr, name, ext, versn] = fileparts(FileName)
    set(handles.text33,'string',name);
    nom=get(handles.text33,'string');
    mais toujours cette maudite erreur!!!!!!!!

    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
    ??? Undefined function or variable 'nom'.
     
    Error in ==> maquette_bak>Start_Simul_button_Callback at
    158
    set_param(nom,'StartTime',st)
     
    Error in ==> gui_mainfcn at 96
            feval(varargin{:});
     
    Error in ==> maquette_bak at 42
        gui_mainfcn(gui_State, varargin{:});
     
    Error in ==>
    @(hObject,eventdata)maquette_bak('Start_Simul_button_Callback',hObject,eventdata,guidata(hObject))
     
     
    ??? Error while evaluating uicontrol Callback

  12. #12
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Oui bien sur, il faut créer la variable dans la fonction qui en a besoin (dans ton cas Start_Simul_button_Callback).

    Il faut bien se souvenir que chaque variable n'est visible uniquement dans la fonction où elle est définie.

  13. #13
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 283
    Points : 62
    Points
    62
    Par défaut
    ou alors créer une variable globale?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    global nom_modele
    nom_modele=get(handles.text33,'string');
    c'est comme ça?

  14. #14
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Les variables globales sont à éviter le plus possible et tu n'en as absolument pas besoin ici.

    Il te suffit de mettre ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nom_modele=get(handles.text33,'string');
    dans la fonction Start_Simul_button_Callback (cf. post précédent)

  15. #15
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 283
    Points : 62
    Points
    62
    Par défaut
    je vais peut-être démissionner ça ira plus vite...

    j'ai suivi tes conseils, j'ai cette erreur je cherche sur le net sa signification

    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
    ??? Error using ==>
    maquette_bak>Start_Simul_button_Callback at 171
    Invalid Simulink object name: modeltest1.
     
    Error in ==> gui_mainfcn at 96
            feval(varargin{:});
     
    Error in ==> maquette_bak at 42
        gui_mainfcn(gui_State, varargin{:});
     
    Error in ==>
    @(hObject,eventdata)maquette_bak('Start_Simul_button_Callback',hObject,eventdata,guidata(hObject))
     
     
    ??? Error while evaluating uicontrol Callback
    en fait je pense qu'il doit se placer sur le répertoire où il y a le modèle choisi

  16. #16
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Oui en effet il faut que tu sois dans le répertoire de ton modèle pour travailler dessus.

    Par contre si tu pouvais mettre la ligne de code qui génère l'erreur en plus du message, ca nous aiderait...

  17. #17
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 283
    Points : 62
    Points
    62
    Par défaut
    alors pour être dans le répertoire du modèle je fais ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function Directory_Model_Callback(hObject, eventdata, handles)
    [FileName,PathName] = uigetfile('*.mdl','Select Configuration directory')
    if(FileName ~= 0)
        set(handles.pushbutton11,'string',[PathName FileName]);
    end
     
     
    %name of model
    assignin('base','path',PathName)
    [pathstr, name, ext, versn] = fileparts(FileName)
    cd( PathName)
    set(handles.text33,'string',name);
     
    nom_modele=get(handles.text33,'string');
    donc avec le cd(PathName)

    or je pensais qu'une fois que c'était fait au départ, c'est bon pour les autres fonctions, mais apparemment non!!

    donc lorsque je lance ma première 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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    function Start_Simul_button_Callback(hObject, eventdata, handles)
     
    nom_modele=get(handles.text33,'string')
     
    %load parameters in the workspace
    tbl=get(handles.uitable3, 'data')
     
    %--------
    %valeurs des paramètres d'entrées dans le workspace
    [r, c] = size(tbl)
    assignin('base','data',tbl);
    for k=1:r        
        nm=cell2mat(tbl(k,1));
        [lig, len] = size(nm) ;
        if  len~=0
            vl=tbl(k,2);
            str=str2num(cell2mat(vl));
            assignin('base',nm,str);
        end
    end
     
    %--------
    %timer
    tm=timer('TimerFcn',@(x,y) (set(handles.text31,'string',get_param(nom_modele,'simulationtime'))), 'Period', 1, 'ExecutionMode', 'fixedDelay')
     
    % Lancement du timer
    start(tm)
     
    %--------
    %starttime
    global dir
    dir
    nom_modele=get(handles.text33,'string')
    st=get(handles.text20,'string')
    set_param(nom_modele,'StartTime',st)
     
    %if StartTime value not required
    if(isempty(get(handles.text20,'string')))
       msgbox('Please enter a value in StartTime field','Error')
       return;
    end
     
    %--------
    %stoptime
    sp=get(handles.text28,'string')
    set_param(nom_modele,'StopTime',sp)
     
    %if StopTime value not required
    if(isempty(get(handles.text28,'string')))
        msgbox('Please enter a value in StopTime field','Error')
    	return;
    end
     
    %--------
    %start simulation
    t=sim(nom_modele)
    t
    en fait, ce code fonctionne bien si je mets le nom du modèle directement dans le code par exemple en mettant 'modele' à la place de nom_modele
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set_param('modele','StartTime',st)

  18. #18
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Dans ton code, à aucun moment tu ne te place dans le répertoire du modèle ni tu ne charges (ou ouvre) le modèle...

    De plus, il est inutile de répéter plusieurs fois les mêmes actions dans une fonction, lorsque tu définis une variable, elle est définie pour toute la fonction, pas besoin de la rédéfinir 3 lignes plus bas avec la même valeur.

    Enfin, tu utilises une variable globale nommée 'dir', c'est doublement mal parce que: il faut éviter au maximum l'usage des variables globales (il y a toujours un moyen de faire autrement en MATLAB) et surtout dir correspond à une fonction et il est fortement déconseillé de nommer une variable avec le nom d'une fonction.

    Et avec ce code, quelle est l'erreur que tu obtiens? Si c'est 'Invalid Simulink object name: modeltest1.', as-tu essayé de te placer dans le répertoire du modèle (à l'aide de CD) et de le charger avant d'effectuer tes traitements (avec LOAD_SYSTEM)

  19. #19
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 283
    Points : 62
    Points
    62
    Par défaut
    Voici ce que je fais au début de ma fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function Start_Simul_button_Callback(hObject, eventdata, handles)
    cd(PathName)
    nom_modele=get(handles.text33,'string')
    open_system('nom_modele')
    et voici l'erreur que j'obtiens:
    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
    ??? Undefined function or variable 'PathName'.
     
    Error in ==> maquette_bak>Start_Simul_button_Callback at
    135
    cd(PathName)
     
    Error in ==> gui_mainfcn at 96
            feval(varargin{:});
     
    Error in ==> maquette_bak at 42
        gui_mainfcn(gui_State, varargin{:});
     
    Error in ==>
    @(hObject,eventdata)maquette_bak('Start_Simul_button_Callback',hObject,eventdata,guidata(hObject))
     
     
    ??? Error while evaluating uicontrol Callback
    sachant que PathName est définie comme ceci dans une autre fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [FileName,PathName] = uigetfile('*.mdl','Select Configuration directory')
    if(FileName ~= 0)
        set(handles.pushbutton11,'string',[PathName FileName]);
    end
    donc c'est parce qu'il est appellé dans une autre fonction qu'il ne connait pas PathName? mais comment dire que le PathName c'est le même que lorsqu'on choisit le modèle au début??

  20. #20
    Expert confirmé
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Points : 4 039
    Points
    4 039
    Par défaut
    Apres ton uigetfile tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    assignin('base','path',PathName)
    dans toutes tes autres fonctions utilisant PathName tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PathName = evalin('base','path')

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Try][Exception] dans toutes les fonctions
    Par Teo dans le forum Langage
    Réponses: 15
    Dernier message: 10/01/2011, 16h47
  2. [AC-2007] Creation de table avec calculs de ratio : "#Nom?" dans toutes les cellules
    Par jbulysse dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/09/2009, 09h48
  3. bizarerie dans toutes les requetes
    Par zais_ethael dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 09/03/2006, 21h28
  4. Comment MAJ le même champ présent dans toutes les tables ?
    Par PamelaGeek dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 02/02/2006, 14h06
  5. Réponses: 7
    Dernier message: 24/05/2003, 15h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo