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

Simulink Discussion :

Gérer des variables locales/globales


Sujet :

Simulink

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 20
    Points : 13
    Points
    13
    Par défaut Gérer des variables locales/globales
    Bonjour,

    Je suis en train de créer une interface graphique en utilisant GUI pour pouvoir lancer un modèle simulink plus simplement et plus rapidement.

    Mon souci est le suivant : j’aimerais que lorsqu’on appuie sur un bouton push celui-ci lance un script dans lequel se trouvent des variables qui initialise mon modèle simulink cependant lorsque j’utilise la fonction run nom_script dans la fonction du bouton push il ne passe rien, aucune variable n’apparait dans le workspace. Je pense que c’est dû au fait que les variables d’une fonction sont locales et n’apparaissent donc pas dans le workspace. Je voudrais donc savoir comment remédier à ce problème.

    J’ai aussi un autre souci qui est plus ou moins pareil au 1er, j’aimerais aussi que l’une des variables locales contenues dans une fonction apparaisse dans le workspace, existe-t-il un moyen de la convertir en variable globale sans utiliser la fonction global, car ça ne fonctionne pas aucune variable n'apparait dans le workspace.

    Merci de m'aider

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Tu peux utiliser la fonction assignin
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Super merci beaucoup ca fonctionne parfaitement

    Par contre je vois pas comment l'utiliser pour tout un script ou j'ai des centaines de variables. Je dois utiliser la fonction assignin pour chaque variable une par une contenu dans le script ou c'est possible de l'utiliser d'une façon qui prendra en compte toutes les variables du script ?

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Ou sinon, est-ce qu'il existe une fonction qui insere chaque ligne d'un script dans un vecteur ?

  5. #5
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Ou sinon, est-ce qu'il existe une fonction qui insere chaque ligne d'un script dans un vecteur ?
    Non, car certaines lignes ne renvoient rien, ou une instruction peut s'étaler sur plusieurs lignes, ou le contraire.

    La meilleure solution pour lister les variables que tu veux transférer dans le base workspace me semble la suivante:
    - Stocke toutes ces variables dans une unique structure
    - Parcourt cette structure avec fieldnames() et struct2cell() et assigne les dans le workspace via une boucle

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    L'idée est bonne mais est ce qu'il y a un moyen de transferer les variables d'un script vers une structure ? Parce que les valeurs des variables sont mis à jour regulierement

  7. #7
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    un moyen de transferer les variables d'un script vers une structure ?
    Pas à ma connaissance. Tu peux toujours écrire une liste en dure de toutes les variables (ce qui rends la structure inutile), ou encore la créer en analysant le texte du code source (ce qui demande un travail d'interprétation).

    Par contre, tu peux modifier ton script en remplaçant Variable1 =... par ma_structure.Variable1 =...

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Outch ca me convient pas trop non plus

    Sinon il n'y a pas un moyen que le workspace de la fonction soit transferé dans le workspace général ?

  9. #9
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Salut,

    Ce que je peux te conseiller de tester, c'est la chose suivante : dans ta fonction où tu lances le script ET où tu lances ton simulink, initialise toutes les variables qui sont crées dans ton script à zéro. Ainsi, elles existeront déjà, leurs valeurs seront écrasées par ton script et ne disparaîtront pas à la fin du script, et seront donc utilisable par ton simulink.

    Par contre je ne sais pas si le fait qu'elles ne soient pas dans le workspace pose réellement problème ou pas, puisque tu lances ton simulink depuis ta fonction, donc la portée des variables nécessaires devrait - à mon sens - être limité à ta fonction... mais je me trompe peut-être.

    Cordialement,
    Je ne réponds pas aux MP techniques. Le forum est là pour ça.
    La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
    Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
    Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3

  10. #10
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    initialise toutes les variables qui sont crées dans ton script à zéro
    Cela revient au même que de créer en dur la liste des variables à transférer.

    Une autre solution pour récuperer tout le workspace crée par ton script: fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    save(fichier_temporaire) 
    Z= load(fichier_temporaire) % ceci regroupe dans une structure toutes les variables du script
    assignin('base','output',Z); % envoie la structure dans le workspace de base
    Tu peux bien sur envoyer une par une les variables contenues dans Z via une boucle.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Oki je vais essayer ca, merci beaucoup

    Je vous tiens au courant si ca fonctionne ou pas

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    j'y suis presque il me faudrait juste une ecriture ou une fonction qui me permetrais de connaitre le nom du champs 1, du champs 2, du champs 3 etc d'une structure ^^

  13. #13
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    fieldnames() et struct2cell() renvoient respectivement les noms et les valeurs, dans le même ordre.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Yeah !! mille merci j'ai presque finit mon interface

  15. #15
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    En fait on peut éviter de passer par le fichier:
    donne la liste des variables du workspace courant (celui de ton script)
    Il suffit ensuite de parcourir l en faisant assignin()

  16. #16
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Cette fonction rend bien plus simple le programme
    Il me manque encore une info, j'obtiens ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    Z=who()
    Z(1)
     
    ans =
     
        'Debut_Panne'
    Maintenant comment obtenir la valeur de ma variable Debut_Panne ? il me faudrait une fonction qui enleve les ' ' .

  17. #17
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    une fonction qui enleve les ' '
    Plus précisément qui évalue un string en tant que nom de variable dans un workspace.

  18. #18
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    J'ai un soucis avec la fonction eval :

    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
     
     
    >> Variable_panne
    >> Z=who();
    >> Z(1)
     
    ans = 
     
        'Debut_Panne'
     
    >> eval('Debut_Panne')
     
    Debut_Panne=
     
         0
     
    >> eval(Z(1))
    Undefined function 'eval' for input arguments of type 'cell'.
     
    >> eval('Z(1)')
     
    ans = 
     
        'Debut_Panne'
    Je ne comprends pas, pourquoi lorsque j'ecris eval(Z(1)), ce na fonctionne pas

  19. #19
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Parceque Z(1) est un sous-cell array à un élément, alors que l'élément qui t'intéresse est le contenu Z{1};

  20. #20
    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,

    Citation Envoyé par Sweeny94 Voir le message
    Je suis en train de créer une interface graphique en utilisant GUI pour pouvoir lancer un modèle simulink plus simplement et plus rapidement.
    J'arrive après la bataille mais tu peux aussi dire à ton modèle Simulink d'aller chercher ses paramètres dans le workspace de la fonction qui l'appelle avec la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set_param(gcs, 'SrcWorkspace', 'current')
    Ou si tu utilises la commande SIM pour lancer la simulation, c'est équivalent à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sim(gcs, 'SrcWorkspace', 'current')
    Duf
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

Discussions similaires

  1. Réponses: 14
    Dernier message: 28/02/2013, 19h33
  2. Variables locale/globale
    Par pydev dans le forum Général Python
    Réponses: 12
    Dernier message: 16/04/2009, 22h19
  3. Méthode d'allocation par défaut des variables locales
    Par Pragmateek dans le forum Fortran
    Réponses: 8
    Dernier message: 04/02/2009, 22h03
  4. Réponses: 4
    Dernier message: 08/04/2007, 17h17
  5. Réponses: 3
    Dernier message: 02/03/2006, 19h22

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