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 :

Indexation du nom des variables envoyées au WorkSpace [Débutant]


Sujet :

Simulink

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Janvier 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2016
    Messages : 21
    Par défaut Indexation du nom des variables envoyées au WorkSpace
    Bonjour,

    j'aimerai savoir s'il y a une méthode rapide pour demander à Simulink (ou Matlab) d'envoyer les résultats de calculs vers le WS en indexant le nom des variables? (rajouter une lettre ou un chiffre à la fin de toutes les variables envoyées vers le Ws par exemple).

    Par exemple, j'effectue un calcul pour la fréquence 1 Hz, je récupère les résultats dans le WS, je suis obligé actuellement de rajouter à la fin de chaque variable le chiffre 1 si je souhaite ensuite faire la même chose avec la fréquence 2 Hz.

    En effet si on ne fait pas ça, Matlab/Simulink écrase les données à chaque calcul puisque il y a un seul nom de variable.
    Le but étant à la fin de tracer mes résultats pour plusieurs fréquences.

    Faudrait-il lancer une routine sous Matlab entre chaque calcul qui indexerait le nom des variables ou y'aurait-il un moyen plus simple?

    En espérant être assez clair..., merci du coup pouce.

    tomazy4T6

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    Bonjour.

    Pourquoi ne pas stocker tes variables dans un tableau de cellule plutôt?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    myDatas{x,1} = monResultat;
    x=x+1;

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Janvier 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2016
    Messages : 21
    Par défaut
    Bonjour Gooby,

    j'aurai dû penser plus tôt à cette solution.
    Par contre, comment faire pour stocker toutes mes variables dans un tableau de cellules?

    Par exemple, prenons 4 variables:
    Pcop, Pdet, Vcop, Vdet
    Comment faire l'automatisation pour mettre les 4 variables dans un tableau de cellules?

    Si on le fait à la main, ça donnerait:
    myDatas{1,1} = Pcop;
    myDatas{2,1} = Pdet;
    myDatas{3,1} = Vcop;
    myDatas{4,1} = Vdet;

    Et pour un nouveau calcul il suffirait alors de passer à une autre colonne:
    myDatas{1,2} = Pcop;
    myDatas{2,2} = Pdet;
    myDatas{3,2} = Vcop;
    myDatas{4,2} = Vdet;

    Est-ce que "monResultat" est pour vous l'enregistrement de toutes les variables de manière à toutes les mettre au même endroit et à ainsi automatiser le process (plus besoin de les appeler une par une) ?

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    Ne connaissant pas aux préalables tes variables de sorties, je me suis inspiré de ton explication qui disait "mes résultats". Donc tu peux effectivement regrouper l'ensemble de tes résultats dans une variable mesResultats via une concaténation ou via la création d'une structure (ou bien encore d'un tableau de cellule), ou bien utiliser la méthode que tu viens de nous présenter. Tout dépend de l'organisation des résultats souhaités.

    Moi, j'essayais juste de t'expliquer comment pallier au problème de "indexerait le nom des variables" comme tu nous le présentais (qui est en soit possible, mais une très mauvaise solution à éviter).

    Si tu as d'autres questions sur l'organisation de tes résultats, je suis tout ouïe, mais pour ça il faut que tu nous expliques clairement ce que tu as comme résultats et sous quelle format tu désires les obtenir au final.

    PS: et si tu n'es pas dans une boucle mais que tu désires changer de colonne du tableau de cellule à chaque calcul, pense à l'incrémentation d'une variable comme j'ai pu le faire dans mon post précédent.

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Janvier 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2016
    Messages : 21
    Par défaut
    Oui je comprend bien.
    Peut-être que j'utiliserai la solution de la structure couplée à un tableau de cellules.

    Ce que je voudrais obtenir c'est un tableau de cellules avec dans chaque cellules toutes mes variables:

    cellule 1:
    var1 (120 éléments)
    var2 (120 éléments)
    var3 (30 éléments)
    var4 (1 élément)
    var5 (matrice 50*50)
    etc...

    cellule 2:
    la même chose mais pour un nouveau calcul Simulink

    Ou bien si cela n'est pas possible, un tableau de cellules avec dans chaque cellule les valeurs de la variable. Par exemple:

    simu 1 simu 2 simu 3 simu 4
    var 1 var 1 var 1 var 1
    var 2 var 2 var 2 var 2
    var 3 var 3 var 3 var 3
    etc...

    La deuxième solution me plaît beaucoup.

    Enfin, quand je parlais d'utiliser des structures avec un tableau de cellules, je pensais à nommer toutes les variables dans Simulink en les faisant précéder de la lettre P par exemple, P.var1, P.var2,etc,...
    puis de mettre les structures de chaque calcul dans un tableau de cellules.

    PS: merci pour la méthode d'incrémentation

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    Donc effectivement, les deux méthodes me semblent viables. Je te laisse choisir celle qui a ta préférence, et si tu as des difficultés pour la mettre en place, n'hésite pas à revenir poser des questions, et nous décrivant pourquoi tu n'arrives pas à la mettre en place, et en nous montrant ce que tu as déjà codé

    Pour tout te dire, je n'ai jamais utilisé simulink, donc je ne me représente pas sous quel format "sortent" tes variables. Avec un peu de code, je m'imaginerai peut être un peu mieux la chose.

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Janvier 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2016
    Messages : 21
    Par défaut
    Bonjour Gooby,

    je me permet de continuer cette conversation car le problème n'est pas tout à fait résolu.
    Je vais le reformuler autrement:
    Simulink au cours de ses itérations envoie des résultats de calcul stockés dans des variables (var1, var2,...), via un block "To Workspace" tel que:

    "Write input to specified timeseries, array, or structure in a workspace. For menu-based simulation, data is written in the MATLAB base workspace. Data is not available until the simulation is stopped or paused."

    Puis ce que j'aimerai faire, c'est, via un script, créer un tableau de cellules avec dans chaque cellule les valeurs de la variable. Par exemple:

    simu 1 simu 2 simu 3 simu 4
    var 1 var 1 var 1 var 1
    var 2 var 2 var 2 var 2
    var 3 var 3 var 3 var 3
    etc...

    Évidemment, ce n'est pas si facile car mes variables portent chacune un nom particulier (Par exemple: Paccu, PaccuBP, PaccuHP, Pcop, Vdet,...) et non une base commune.

    Faut-il créer soi même à la main le tableau de cellules tel que:

    myDatas{1,1} = Pcop;
    myDatas{2,1} = Pdet;
    myDatas{3,1} = Vcop;
    myDatas{4,1} = Vdet;


    Ou bien y 'aurait il une solution plus rapide qui sélectionnerait toutes les variables et les stockerait dans le tableau?

    Merci

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    tu peux faire comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if ( ~exist('myDatas','var') ) % si la variable n'existe pas, on est dans le premier résultat du calcul simulink
        myDatas = [{var1};{var2};{var3};{var4}];    
    else % sinon, nous ne sommes plus à la première itération du calcul
        myDatas = cat(2,myDatas,[{var1};{var2};{var3};{var4}]);
    end
    EDIT: avec cette solution, attention à bien clear la variable myDatas avant chaque lancement du calcul simulink !

  9. #9
    Membre averti
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Janvier 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2016
    Messages : 21
    Par défaut
    Merci pour votre coup de main Gooby.
    Je vais aller me renseigner sur la fonction exist et sur le ~ placé en amont pour comprendre comment elles marchent.
    Merci pour cette solution, c'est ce que je recherchais.
    Cordialement,
    tomazy4T6

  10. #10
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    sert à vérifier si il existe une variable toto dans le workspace. Cette fonction te renvoie 0 si la variable n'existe pas et 1 si la variable existe. Comme tu le sais peut être déjà, lorsque tu fais un test dans un if, si le résultat du test est 0, alors le programme ne rentrera pas dans le if. Utiliser le symbole ~ devant une fonction sert à renvoyer la négation de son test. Autrement dit ~exist te renverra 1 si la variable n'existe pas et 0 si elle existe.

  11. #11
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 885
    Par défaut
    salut

    personnellement je privilégierais l'utilisation de la syntaxe complète de la fonction sim :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    simRes{ii} = sim('monSimulateur',paramSim);
    tu obtient ainsi un tableau de cellules contenant des objets "résultats de simulation" qui contiennent tous les signaux, auquels tu accèdes de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    toto = simRes{ii}.get('toto');
    Fabien

    PS : mettre toutes les sortie dans un objet peu aussi être fait dans "parametres \ data import/export \ save simulation output as single object"

  12. #12
    Membre averti
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Janvier 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2016
    Messages : 21
    Par défaut
    Je viens d'essayer,
    les deux solutions fonctionnent.
    Je comprend maintenant comment fonctionne la fonction exist et la commande ~.
    Merci à Gooby et Le Fab pour votre temps.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Sauver des variables dans le Workspace
    Par Eco_prince dans le forum MATLAB
    Réponses: 6
    Dernier message: 18/10/2008, 12h24
  2. Mise à jour des noms des variables
    Par stefsas dans le forum SAS Base
    Réponses: 1
    Dernier message: 09/06/2008, 11h28
  3. récupération des noms des variables POST
    Par taffMan dans le forum Langage
    Réponses: 2
    Dernier message: 19/02/2008, 21h13
  4. Réponses: 2
    Dernier message: 20/05/2007, 18h22
  5. nom des variables pour se faciliter la vie
    Par Slumpy dans le forum VB.NET
    Réponses: 2
    Dernier message: 28/03/2007, 10h31

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