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 :

*Incrementer* les noms des ports d´une carte


Sujet :

Simulink

  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Par défaut *Incrementer* les noms des ports d´une carte
    Bonjour à tous,
    Voici un beau challenge :
    Mon problème traite d´incrémentation et j´ai déjà bien cherché dans les FAQ sans piste pour le résoudre.
    Je travaille sur un skript Matlab pour incrémenter les "valeurs" INPUT (E) /OUTPUT (A) des ports d´une carte PC (valeurs : S000E20.0 et S000A0.0 sont celles de départ à incrémenter).
    Ces entrées/sorties sont matérialisées dans Simulink (ci joint) : lorsque je copie (à la main) 1 ensemble entrée/sortie, Simulink incrémente automatiquement (ex: S000E20.0 devient S000E20.1). Par contre, dans les programmes associées à la lecture-écriture entrée/sortie ces valeurs ne sont pas incrémentées! Le but est justement d´automatiser pour éviter les erreurs de saisie!
    J´ai commencé par essayer d´incrémenter simplement dans Matlab ces "chaines de caractères" mais ca me donne beaucoup de réponses (en tout cas pas une incrémentation de 0.1 à la fin de la chaine).
    Et ensuite, en copiant à la main les blocs, comment je peux atteindre ces petits programmes pour que le nouveau nom du port soit écrit?

    Les domaines sont de S000E20.0 à S000E20.7, et S000E21.0 à S000E21.7 (16 entrées - le pas d´incrément est 0.1).
    Je vous remercie d´avance de vous pencher sur ce challenge
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Par défaut
    Salut,

    J'ai peur de n'avoir pas compris...

    Tu veux savoir comment faire :
    S000E20.0
    S000E20.1
    S000E20.2
    ...
    S000E20.6
    S000E20.7

    De même avec 21 ?

    Je ne vois pas où est la difficulté ?

    Tu veux faire ça où et quand ?

  3. #3
    Membre averti
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Par défaut
    Merci pour ta réponse rapide,
    J´ai écrit challenge* pour attirer l´attention sur mon problème;
    Et je crois en fait que tu as bien saisi que je cherche à générer ces suites de noms (cf. ton exemple) et surtout à actualiser également dans les blocs-skripts (read et write où apparaissent S000......)
    Sympa l´humour, l´envie de challenge et ce serait vraiment cool de me donner des tuyaux. Thanks

  4. #4
    Expert confirmé
    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
    Par défaut
    En fait comme le souligne Christophe la génération des noms en soi n'est pas compliquée (voir et s'inspirer de : Comment créer des variables nommées A1, A2, A3, ...,AN ? )

    Ce qui est plus difficile à comprendre c'est à quel niveau tu veux "incrémenter" car pour incrémenter il faut connaitre l'incrément : comment l'obtiens-tu dans tes scripts (dont on ne sait pas bien à quoi ils sont rattachés) ?

  5. #5
    Membre averti
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Par défaut
    Ah c'est un forum dynamique ^^
    J'avais essayé de bien expliquer et je vais essayer d'être plus précis. Pour resituer, les noms S000E20.0 (un des ports d'entrée de la carte) et S000A0.0 (un des ports de sortie de la carte) sont bien prédéfinis et je suppose qu'il faut que je génère par incrémentation de 0.1 car les autres entrées et sorties suivent un schéma d'incrémentation (S000E20.1, S000E20.2 ...) : l'approche par incrémentation (type S00020.0 = S00020.0 + 0.1) ne convient peut être pas car ce ne sont pas des variables, si ?
    En fait, Simulink incrémente très bien pour les entrées et sortie (j'aimerais bien savoir avec quel algorithme) et mon objectif central est que les scripts soient modifiés à chaque copie d'un bloc à la main (incrémentés avec le nom du port correspondant) c'est à dire que dans le script, soit pour la lecture ou l'écriture du port, seul l'endroit où le nom du port est inscrit soit modifié. Je ne sais pas vraiment comment automatiser cela, j'avais pensé en idée de base à l'incrémentation mais il faut que je me préoccupe ensuite de relier ce script au bloc Simulink pour pouvoir modifier ce fameux nom : voilà, je voulais dire que je ne souhaite pas seulement incrémenter une chaîne de caractères simplement pour voir que ça fonctionne dans Matlab.
    N'hésitez pas si vous avez des questions - je continue à chercher
    Et je vais promouvoir ce forum que je trouve constructif.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Par défaut
    Désolé,

    Mais peux tu donner un exemple, car là je suis un peu perdu...

    Tu veux créer ton propre block simulink ?

  7. #7
    Membre averti
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Par défaut Processus simplifié
    Bonjour,

    J´ai joint un Word en simplifiant vraiment le problème, car je pense que lors d´une copie : avec un programme Matlab, si on atteint le script pour modifier le nom d´un seul port, après ca devrait etre faisable de modifier à la fois les noms des ports Entrée et Sortie (schéma complet que je souhaite copier).

    NB : Bloc Simulink déjà créé - je travaille sur le Programme Matlab
    Fichiers attachés Fichiers attachés

  8. #8
    Expert confirmé
    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
    Par défaut
    A mon avis la réponse à la question d'origine est non car on ne doit pas pouvoir accéder à la fonction qui fait la copie du bloc.

    Par contre n'est-il pas possible dans tes fonctions de récupérer le nom de l'input avec la fonction GET_PARAM ?

  9. #9
    Membre averti
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Par défaut Simple, get_param ?
    Bonjour,
    J´ai travaillé sur la structure du programme, toujours dans l´objectif de modifier le nom des ports présents dans des sous-scripts. J´ai fait cela en tenant compte du conseil d´utilisation de la fonction get_param qui pourrait en la combinant avec set_param commencer à résoudre mon problème (je m´en tiens pour le moment à travailler sur 1 port d´entrée 'S000E20.0').
    Mais l´exécution du script renvoie des messages d´erreurs : "Input argument undefined" ; je dois surement mal utiliser get_param et aussi set_param : fonctions que je n´avais jamais utilisé. J´ai recherché comment faire mais sans bon résultat : pourriez-vous me montrer simplement comment l´utiliser ? Car il faut bien que j´entre le nom de mon port quelque part s´il doit repérer quelle partie est à modifier. Merci d´avance
    Voici la structure :

    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 newname = incrementport(port)
    name=get_param(port,'S000E20.0');
     
    val=1;
    i=0;
    newname=name;
     
    while ((newname(end) >= '0') && (newname(end) <= '7'))
        val=val+str2num(newname(end))+0,1*i;
        i=i+1;
        newname=newname(1:end-1);
    end
    newname=[newname num2str(val)];
    set_param(port,'S000E20.0',newname);

  10. #10
    Expert confirmé
    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
    Par défaut
    Difficile de te répondre sans savoir ce qu'est justement port ?

    Après relis bien l'aide de get_param et set_param :
    en entrée ils prennent tous 2 :
    - le nom du bloc ou du modèle (ça peut être tout simplement GCS)
    - le nom du paramètre (ex : 'Name','S000E20.0' n'est pas un paramètre mais la valeur d'un paramètre)

    Et pour set_param seule :
    - la nouvelle valeur du paramètre à affecter.

    Pour cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ((newname(end) >= '0') && (newname(end) <= '7'))
    On ne fait pas de comparaison sur des chaines de caractères mais plutôt sur des nombres.
    Tu dois donc aussi utiliser STR2NUM ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    valcompare = str2num(newname(end));
    while ((valcompare  >= 0) && (valcompare  <= 7))

  11. #11
    Membre averti
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Par défaut
    Bonjour,
    Oui, j´avais pas pensé devoir affecter une variable choisie ‘p’, à la valeur (ou nom) du port définie comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    p = ‘S000E20.0’ ; % j´exécute cette ligne avant de faire ‘Run’ du script
     
    function newname = increment(gcs)
    gcs = 'incrementbloc';           % incrementbloc est le nom du modèle
    name=get_param(gcs,'p');         
     
    ..... suite programme ....
    Au début, lorsque je tapais la commande gcs ou gcb (pour atteindre le chemin du bloc), Matlab retournait bien le chemin mais en lançant le script il disait que ce n´était pas défini !
    Puis en affectant p, ça s´est résolu si c´est bien comme ça qu´il faut faire.

    En exécutant ‘Run’ le script avec les modifications, j´obtiens une erreur que je ne comprend pas sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ((newname(end) >= 1) && (newname(end)  <= 7))
    ??? Attempted to access newname(0); index must be a positive integer or logical.

    Error in ==> incrementbloc at 9
    while ((newname(end) >= 0) && (newname(end) <= 7))
    En tous cas, merci de répondre à chaque fois ca fait progresser (c´est pas le genre de projet Matlab pour lequel on est formé à l´école).

  12. #12
    Expert confirmé
    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
    Par défaut
    Ouille !

    Attention à ne pas mélanger variables et nom de fonction.
    GCS est une fonction.
    En faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function newname = increment(gcs)
    Tu transformes GCS en variable => c'est normal qu'il ne sache plus ce que c'est.
    Quand tu vas appeler ta fonction INCREMENT que vas-tu lui passer en entrée ?

    Question de vocabulaire : les fichiers M commençant avec function sont des fonctions sinon ce sont des scripts. La différence essentielle est que la fonction a son propre workspace : il ne connait que les variables qu'on lui donne en entrée et celles définies dans son corps, le script lui est du code qui s'exécute dans le workspace MATLAB.

    Tu n'as apparemment toujours pas compris le fonctionnement de get_param...Le 2ème paramètre est un nom de propriété du bloc sur lequel tu utilise get_param.
    Exemple : sélectionnes ton bloc nommé 'S000E20.0' et effectue en ligne de commande :Que te retourne-t-il ?

    Pour finir l'erreur : elle vient du fait que si tu regardes (tu peux enlever les ; à la fin des lignes pour voir les valeurs s'afficher dans la command window), name est vide (car 'p' n'est pas une propriété du modèle) : tu essayes d'accéder à un élément qui n'existe pas.

  13. #13
    Membre averti
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Par défaut Oulala merci -
    En effet, malgré les aides que j´ai pu lire, tu m´as apporté des précisions cruciales.
    - En premier: lorsque je selectionne un bloc par exemple celui qui m´inté resse en particulier (write0), la commande :
    ... me retourne :
    là je comprend à quoi cela sert (puis j´ai testé avec les autres blocs).

    - Ensuite, pour l´entrée j´ai ajouté dans mon Simulink un bloc (propriété: From Workspace) avec pour paramètre a0 : ce bloc constitue une entrée sur mon système (liaison entre 2 systèmes désormais). Est-ce correct de procéder ainsi?
    En tapant en Command Window tout d´abord : puis en exécutant ma "fonction" étant désormais:

    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 newname = increment(a0)
    Name=get_param(gcb,'name');
     
        val=1;
        i=0;
        newname=Name;
     
        while ((newname(end) >= 1) && (newname(end)  <= 7));
            val=val+str2num(newname(end))*(10^i);
            i=i+1;
            newname=newname(1:end-1)
        end
        newname=[newname num2str(val)];
        set_param(gcb,'name',newname)
    il retourne : et remplace juste le nom du bloc (en fait le dernier bloc sélectionné j´ai pu remarqué!).
    Il y a une avancée - Comment atteindre le contenu de la fonction incluse dans le bloc write0, et modifier une partie du code à chaque copie : c´est maintenant la phase dans laquelle je me lance.
    En tous cas, merci et n´hésitez pas si vous avez des ?

  14. #14
    Expert confirmé
    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
    Par défaut
    Bon, on avance...un peu.

    1/ Ton paramètre a0 passé en entrée de la fonction increment n'est utilisé nulle part dans increment => il doit manquer quelque chose....

    2/ Tu n'as pas besoin de faire, en fait tu appelles tout simplement ta fonction ainsi :Et MATLAB affecte la valeur à la variable a0 dans le code de la fonction.

    3/ Dans ton code newname se voit affecter le nom de ton bloc ie 'write0', est-ce vraiment ce que tu souhaites ?
    En fait ce qu'il faudrait c'est savoir quel est le paramètre de ton bloc qui a pour valeur 'S000E20.0' car c'est bien celui-ci que tu veux modifier, non ? (du coup tu n'as plus besoin de paramètre d'entrée)

    4/ Et finalement ton code ne modifie rien, cela pour la raison déjà expliqué dans le message #10 :
    On ne fait pas de comparaison sur des chaines de caractères mais plutôt sur des nombres.
    Tu dois donc aussi utiliser STR2NUM ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    valcompare = str2num(newname(end));
    while ((valcompare  >= 0) && (valcompare  <= 7))
    Pour la modification de la fonction c'est *presque* pareil en ce sens que la fonction en elle-même est un paramètre du bloc.

    Note : pour voir tous les paramètres d'un bloc simulink : il y a l'aide bien évidemment mais aussi ces 2 commandes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    get_param(gcb, 'ObjectParameters')
    get_param(gcb, 'DialogParameters')

  15. #15
    Membre averti
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Par défaut
    Oui, ta formulation du problème est exactement ce que je souhaite :
    il faut comme tu l´indiques que je trouve le paramètre du bloc (write0) qui a pour valeur 'S000E20.0'.
    En exécutant la ligne de code avec get_param retrouvant tous les paramètres du bloc : il y en avait bcp en fait!
    J´ai peut etre trouvé mon paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    get_param(gcb, 'Ports')
     
    ans =
     
         1     0     0     0     0     0     0     0
    Ce serait donc : Ports - ce qui parait logique,
    mais aucune certitude car c´est là une valeur binaire, non?
    De plus j´ai essayé avec un bloc write1 ayant modifié la valeur du port en 'S000E20.1' et j´obtiens la meme valeur binaire !
    Par ailleurs, avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    get_param(gcb, 'Handle')
     
    ans =
     
      1.8830e+003
    Là, j´obtiens 1883 : pour un bloc write1 comme défini ci dessus
    et une valeur différente (1857) pour le bloc write0.
    C´est bien étrange, non? Ou est-ce Handle le paramètre?
    Un bon week end à tous

  16. #16
    Expert confirmé
    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
    Par défaut
    Cela n'est pas facile pour moi car je n'ai pas Simulink

    Je vais commencer par ta dernière question : regarde la valeur de gcb et compare là à la valeur obtenue avec get_param pour le paramètre Handle (normalement c'est la même).
    Dans MATLAB un handle est un numéro unique permettant d'identifier de façon sure un objet (en l'occurrence là le bloc) : c'est donc normal qu'il soit différent pour 2 objets différents.

    OK maintenant pour retrouver 'S***' c'est a priori le nom ('Name') du port d'entrée ('Input') de ton bloc nommé 'write0'.
    Il va donc falloir faire plusieurs get_param :
    - un qui te permette de savoir quel est l'input de ton bloc (il te faut récupérer soit son handle, soit son nom complet pour être sûr)
    - un qui te permet de récupérer la propriété 'Name' de l'objet que tu viens d'identifier.

    Quoique peut-être que le paramètre 'InputSignalNames' pourrait convenir => à toi de regarder

    [EDIT]Quant au paramètre Prts il suffisait de regarder l'aide pour s'apercevoir que ce n'était pas du tout ça :
    Citation Envoyé par doc
    The value of this parameter is a vector that specifies the numbers of each kind of port. The order of the vector's elements corresponds to the following port types:
    • Inport
    • Outport
    • Enable
    • Trigger
    • State
    • LConn
    • RConn
    • Ifaction
    • ça dit juste que ton bloc a un port d'entrée et c'est tout.

  17. #17
    Membre averti
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Par défaut Tester les paramètres avec get_param
    Bonjour,
    C'était galère de tester un par un chaque paramètre ; je vais tester ce que tu m'as proposé dès demain car je n'ai ni Matlab, ni Simulink le week end
    En tous cas, merci - un bon dimanche

  18. #18
    Membre averti
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Par défaut Nom du paramètre récupéré
    Bonjour,
    J´ai suivi la procédure et ca m´a fait comprendre concrètement ce que je recherchais (merci pour les précisions sur handle et Ports): car je souhaite atteindre le contenu du bloc (write0) pour modifier le nom du port 'S***', mais forcément je ne pouvais jamais obtenir avec get_param la valeur 'S***' car cette valeur est l´input du bloc (write0) et donc à la fois le nom de ce bloc "input". Je cherchais dans le mauvais bloc, non?
    Je m´apercois qu´il va donc falloir atteindre cette valeur de paramètre inscrite dans le bloc write0 de facon indirecte : plutot en cherchant en modifier le nom de l´input. Car voilà la fameuse valeur lorsque je travaille sur le bloc "input" de write0:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    gcb
    ans =
    incrementbloc/Anbindungsteuerung/S000E20.0
     
    get_param(gcb, 'Handle')
    ans =
      1.8550e+003
     
    get_param(gcb, 'Name')
    ans =
    S000E20.0
    Le paramètre recherché dont la valeur est S000E20.0 est donc 'Name' comme tu l´avais suggéré (en travaillant sur le bloc 'write0', j´obtenais avec le paramètre 'Name' simplement le nom du bloc !! donc tout faux)
    Et donc maintenant, dans mon "programme" fonction, il faut que je spécifie la valeur 'handle' du bloc pour atteindre la valeur 'S***' ?
    Mais là encore, au mieux ca modifiera le nom de mon bloc en l´incrémentant.
    Sinon, j´ai un souci avec la définition de ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function newname = increment()
    mais cela pourrait bien résoudre le problème précédent : là je ne peux pas pour raison de syntaxe écrire comme input 'S***' et encore moins le paramètre 'Name' dans increment(). Aucun paramètre d´input n´est indispensable ici ?

  19. #19
    Membre averti
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Par défaut SVP merci d´aider à progresser
    Bonjour,
    J´essaie de procéder par analogie car si je peux modifier le nom d´un bloc maintenant (c´est a dire modifier la valeur du paramètre 'Name' de ce bloc), on doit bien pouvoir modifier le paramètre de la fonction située dans ce bloc je pense. J´ai remarqué que le paramètre 'InputSignalNames' n´avait pas de valeur alors que je pense que ce serait 'S***' : ma valeur de départ à incrémenter. J´ai attribué à cette fameuse valeur un paramètre input puis stocké dans un fichier.mat mais impossible de relier avec le paramètre du bloc 'InputSignalNames' : le problème est qu´il est en lecture seule.
    J´obtiens un message d´erreur qui dit read-only lorsque j´essayais de faire un set_param pour attribuer direct la valeur. Je sais qu´on peut attribuer read ou write ou les 2 quand on défini soit meme, mais quand c´est déja défini pour le bloc : comment je peux changer ca et ainsi accéder au contenu de 'InputSignalNames' ?
    Ce serait sympa de m´appuyer.
    Merci d´avance

  20. #20
    Expert confirmé
    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
    Par défaut
    Bon, sans Simulink, je ne peux pas tester mais en regardant dans la liste des blocs, je peux peut-être trouver quelque chose.
    On est d'accord que le problème se trouve ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function fcn(u)
    eml.extrinsic('writevar2');
    writevar2('S000E20.0',num2str(u));
    et que tu souhaites remplacer 'S000E20.0 par le nom de l'entrée de ton bloc qui appelle cette fonction.
    Logiquement (je pense) dans cette fonction si tu appeles GCB il doit correspondre au bloc write* courant.
    Dans ce cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function fcn(u)
    eml.extrinsic('writevar2');
    bloc_courant=gcb;
    nom_entree=get_param(bloc_courant,'InputSignalNames');
    writevar2(nom_entree{1},num2str(u));
    De ce que je comprends de la doc ça devrait fonctionner.

Discussions similaires

  1. Récupérer les noms des ports COM actifs
    Par snymix dans le forum C#
    Réponses: 2
    Dernier message: 15/03/2010, 10h35
  2. [JTable] les noms des colonnes de s'affichent pas
    Par macben dans le forum Composants
    Réponses: 6
    Dernier message: 25/04/2008, 11h03
  3. ShellListView : comment récupérer les noms des fichiers?
    Par Lolo1988 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 11/12/2005, 23h19
  4. Réponses: 2
    Dernier message: 03/02/2005, 13h21
  5. [VBA]Obtenir les noms des polices disponibles
    Par xp dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/03/2004, 15h39

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