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 :

[TsArray] Structure Simulink vers structure MATLAB


Sujet :

Simulink

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Par défaut [TsArray] Structure Simulink vers structure MATLAB
    Bonjour,
    Je suis confronté à un problème que Google et Mathworks ne me semblent pas connaitre : la transformation d'un TsArray, contenant des Timeseries, vers une structure Struct.
    Dans mes simulateurs j'utilise le "logsout" de simulink pour sortir de façon structurée mes données de simulation : je bus toutes mes infos pour ne faire sortir qu'un seul fil que je nomme "mainBus".
    Sous matlab, après avoir lancé la simulation, je tape:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    logsout.unpack('systems');
    et j'obtiens un TsArray dans mon workspace nommé mainBus.
    Or ces données vont servir à d'autre personnes qui ne disposent pas de la toolbox simulink, je dois donc fournir mon "mainBus" dans un format lisible.
    Pour l'instant ce que je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    level1 = mainBus.who;
    for i = 1:length(level1)
        level2 = mainBus.(level1{i}).who;
        for k = 1:length(level2)
                mainBusStruct.(level1{i}).(level2{k}).Time = mainBus.(level1{i}).(level2{k}).Time;
                mainBusStruct.(level1{i}).(level2{k}).Data = mainBus.(level1{i}).(level2{k}).Data;
        end
    end
    Je lis "à la main" mon TsArray, jusqu'à trouver des array (Time et Data), que j'enregistre dans une structure.
    Existe-il une solution plus élégante et générique? Une sorte de fonction TsArray2Struct, ou un moyen détourner d'arriver mes fins?

    Florent

  2. #2
    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

    pas de méthode miracle, mais utilise plutôt le format dataset, et sans le bus : plus lisible à mon gout

    comme ca tu peux facilement reconstituer ta structure comme ca, avec des index :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for ii= 1: logsout.getLength;
      sMyStruct{ii}.time = logsout.getElement(ii).Values.Time 
      sMyStruct{ii}.data = logsout.getElement(ii).Values.Data
      sMyStruct{ii}.name = logsout.getElement(ii).Values.Name
    end
    ou avec les noms des signaux (s'ils sont connus et uniques)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    logsout.getElement('toto').Values.Time 
    logsout.getElement('toto').Values.Data
    mais bon, la conversion est à faire à la main je pense

  3. #3
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Par défaut
    J'ai oublié une précision : je travaille sur R2009b.
    Ainsi je n'ai pas accès au format dataSet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >> logsout.getElements(1)
    ??? No appropriate method, property, or field getElements for class Simulink.ModelDataLogs.
    >> logsout.unpack('systems');
    >> mainBus.getElement(1)
    ??? Error using ==> subsref
    No appropriate method, property, or field getElement for class Simulink.TsArray.
     
    Error in ==>
    D:\MATLAB\R2009bSP1\toolbox\simulink\simulink\@Simulink\@TsArray\subsref.p>subsref at 91
    >>  dataset = logsout.convertToDataset('mainBus_dataset')
    ??? No appropriate method, property, or field convertToDataset for class
    Simulink.ModelDataLogs.
    Toutefois au prochain changement de version je penserai à faire l'update

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

Discussions similaires

  1. problème de pointeurs vers structure
    Par fred_sell dans le forum Débuter
    Réponses: 17
    Dernier message: 07/07/2009, 01h33
  2. structure transtypée vers tableau
    Par J4e8a16n dans le forum Débuter
    Réponses: 16
    Dernier message: 31/05/2009, 05h14
  3. copier plisieurs tables de structure identique vers une seule
    Par adelsunwind dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 30/03/2009, 16h16
  4. Migration structure MySql vers MySql
    Par sunshine33 dans le forum Administration
    Réponses: 4
    Dernier message: 20/11/2008, 11h06
  5. [C#]Pointeur vers structure
    Par torNAdE dans le forum Windows Forms
    Réponses: 3
    Dernier message: 08/05/2006, 19h43

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