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énéralisation boucle block


Sujet :

Simulink

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 18
    Points : 13
    Points
    13
    Par défaut Généralisation boucle block
    Bonjour à tous

    je souhaite généraliser des boucles if qui relient automatiquement des blocs logiques sur simulink.

    j'arrive à relier automaiquement 1 bloc, 2 blocs, trois blocs mais je ne sais pas comment faire pour n blocs.

    Code pour relier 2 blocks :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if nbre2bloclogic>1
          openFcn=get_param('ex/Logical Operator','PortHandles')
          opefc=openFcn.Inport;
          tailleopecfc=length(opefc);          
     
    end
     
     
    if nbre2bloclogic>1
          openFcn1=get_param('ex/Logical Operator1','PortHandles')
          opefc1=openFcn1.Outport;
          add_line_by_handle(opefc1,opefc(nbre2bloclogic+nbre2blocconst))
          %add_line_by_handle(opefc1,opefc(5))
    end
    Code pour relier 3 blocks
    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
    if nbre2bloclogic>1
          openFcn=get_param('ex/Logical Operator','PortHandles')
          opefc=openFcn.Inport;
          tailleopecfc=length(opefc);          
     
    end
     
    if nbre2bloclogic>1
          openFcn1=get_param('ex/Logical Operator1','PortHandles')
          opefc1=openFcn1.Outport;
          add_line_by_handle(opefc1,opefc(nbre2bloclogic+nbre2blocconst))
          %add_line_by_handle(opefc1,opefc(5))
    end
     
    % 
    if nbre2bloclogic>1
          openFcn2=get_param('ex/Logical Operator2','PortHandles')
          opefc2=openFcn2.Outport;
          add_line_by_handle(opefc2,opefc(nbre2bloclogic+nbre2blocconst+1))
         %add_line_by_handle(opefc2,opefc(6))
    end
    etc mais problème pour plusieurs blocs logiques non définis dès le départ je suis un peu mal.

    Si vous avez des idées n' hésitez pas en m'en faire part

    merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Bonjour,

    Je ne suis pas sûre du code que je ne peux tester mais en essayant de généraliser le code, je verrais ça :
    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
    %Le premier
    if nbre2bloclogic>1
        openFcn=get_param('ex/Logical Operator','PortHandles')
        opefcInit=openFcn.Inport;
        tailleopecfc=length(opefc);
    end
     
    %Les suivants
    for k=1:nbBlocs
        if nbre2bloclogic>1
            openFcn{k}=get_param(sprintf('ex/Logical Operator%f',k),'PortHandles')
            opefc{k}=openFcn{k}.Outport;
            add_line_by_handle(opefc{k},opefcInit(nbre2bloclogic+nbre2blocconst+k-1))
            %add_line_by_handle(opefc1,opefc(5))
        end
    end
    En tout cas ça fonctionne pour tes 2 exemples.
    A toi de tester.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    merci caro
    mais pb

    pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    %Les suivants
    for k=1:nbBlocs
        if nbre2bloclogic>1
            openFcn{k}=get_param(sprintf('ex/Logical Operator%f',k),'PortHandles')
            opefc{k}=openFcn{k}.Outport;
            add_line_by_handle(opefc{k},opefcInit(nbre2bloclogic+nbre2blocconst+k-1))
            %add_line_by_handle(opefc1,opefc(5))
        end
    end
    à cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     openFcn{k}=get_param(sprintf('ex/Logical Operator%f',k),'PortHandles')
    matlab me donne ça comme erreur
    ??? Error using ==> get_param
    Invalid Simulink object name: ex/Logical Operator1.000000.

    Error in ==> test at 178
    openFcn{k}=get_param(sprintf('ex/Logical Operator1382753214742260400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000',k),'PortHandles')

  4. #4
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Oups j'ai été trop vite, c'est %d pour les entiers pas %f...
    Donc pour la ligne incriminée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    openFcn{k}=get_param(sprintf('ex/Logical Operator%d',k),'PortHandles')
    Ceci dit une petite recherche sur sprintf t'aurait donné la réponse...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    merci caro ça marche super bien

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

Discussions similaires

  1. Boucle for généralisée
    Par Patrice Henrio dans le forum Langage
    Réponses: 6
    Dernier message: 23/07/2013, 16h22
  2. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  3. Boucle: expected indented block
    Par jarailet dans le forum Tkinter
    Réponses: 4
    Dernier message: 22/11/2007, 14h27
  4. Sortir d'un progamme qui boucle ou qui refresh
    Par mikevador02 dans le forum C
    Réponses: 12
    Dernier message: 14/12/2002, 09h38
  5. Réponses: 2
    Dernier message: 29/05/2002, 20h43

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