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 :

Problème petit script


Sujet :

Simulink

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Problème petit script
    Bonsoir,

    j'ai un petit script (Matlab 2019b) qui permet de faire varier un paramètre pour voir son influence.

    Je ne vois pas ce qui bloque.

    J'ai essayé une première version en déclarant la variable Ktab dans matlab :


    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    %Cette fonction permet de simuler un diagramme Simulink en faisant varier un
    %paramètre K
     
    %Pour pouvoir l'utiliser il faut :
    % - Déclarer une variable globale K dans Matlab (Syntaxe : global K)
    % - Déclarer les valeurs de K à simuler dans Matlab (Syntaxe : Ktab = [5 10
    % 13]) (Maxi 24 valeurs)
    % - Remplacer une constante par K dans le diagramme Simulink
    % - Configurer le scope du diagramme Simulink (Menu Parameters/Data
    % history/Save Data to Workspace / Structure with time)
    % - Lancer la commande Matlab suivante : simuler( 'Nom du fichier
    % Simulink',Ktab )
     
     
    function simuler(nom_fichier, Ktab)
    hold on ; %Permet de superposer les courbes
    global K ; %Permet de piloter la variable K de simulink
     
    colors = {'blue', 'green', 'red', 'cyan', 'magenta','black','blue', 'green', 'red', 'cyan', 'magenta','black'};
     
    for i = 1:length(Ktab)
       K = Ktab(i);
       sim(nom_fichier); %Lance la simulation avec K(i)
       Scope(i) = ScopeData ; %Sauvegarde les résultats de Simulink de la structure ScopeData dans un tableau
       if(i<7)
            plot(Scope(i).time, Scope(i).signals.values, 'color', colors{i},'DisplayName',sprintf('K = %d', K) ) ; %trace en trait fort
       else
            plot(Scope(i).time, Scope(i).signals.values, 'color', colors{i},'DisplayName',sprintf('K = %d', K) , 'LineWidth',2,'LineStyle',':') ; %trace en pointillés
       end
    end
    legend('show'); %Affiche la légende
    hold off ;
    end
    Nom : a.PNG
Affichages : 244
Taille : 4,5 Ko

    Le schéma est le suivant :
    Nom : b.PNG
Affichages : 227
Taille : 7,4 Ko

    Quand je lance le programme simuler(testSB, Ktab), j'ai le message d'erreur suivant :
    Nom : c.PNG
Affichages : 236
Taille : 9,6 Ko


    Si je déclare Ktab dans le script :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    %Cette fonction permet de simuler un diagramme Simulink en faisant varier un
    %paramètre K
     
    %Pour pouvoir l'utiliser il faut :
    % - Déclarer une variable globale K dans Matlab (Syntaxe : global K)
    % - Déclarer les valeurs de K à simuler dans Matlab (Syntaxe : Ktab = [5 10
    % 13]) (Maxi 24 valeurs)
    % - Remplacer une constante par K dans le diagramme Simulink
    % - Configurer le scope du diagramme Simulink (Menu Parameters/Data
    % history/Save Data to Workspace / Structure with time)
    % - Lancer la commande Matlab suivante : simuler( 'Nom du fichier
    % Simulink',Ktab )
     
     
    function simuler(nom_fichier, Ktab)
    hold on ; %Permet de superposer les courbes
    global K ; %Permet de piloter la variable K de simulink
    Ktab = [1 5 10] ;
    colors = {'blue', 'green', 'red', 'cyan', 'magenta','black','blue', 'green', 'red', 'cyan', 'magenta','black'};
     
    for i = 1:length(Ktab)
       K = Ktab(i);
       sim(nom_fichier); %Lance la simulation avec K(i)
       Scope(i) = ScopeData ; %Sauvegarde les résultats de Simulink de la structure ScopeData dans un tableau
       if(i<7)
            plot(Scope(i).time, Scope(i).signals.values, 'color', colors{i},'DisplayName',sprintf('K = %d', K) ) ; %trace en trait fort
       else
            plot(Scope(i).time, Scope(i).signals.values, 'color', colors{i},'DisplayName',sprintf('K = %d', K) , 'LineWidth',2,'LineStyle',':') ; %trace en pointillés
       end
    end
    legend('show'); %Affiche la légende
    hold off ;
    end
    J'ai le message suivant :
    Nom : d.PNG
Affichages : 221
Taille : 9,6 Ko

    Je n'ai pas trop d'idées. Je suis "débutant" en programmation.

    Si certains ont des idées, je suis preneur ...

    Merci d'avance

    Sébastien

    PS : Modèles en PJ
    Fichiers attachés Fichiers attachés

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    salut

    alors oublies les variables globales !

    là tu as trois solutions (de la "meilleure" à la "moins bonne") :
    - préciser dans l'appel à la fonction sim que tu veux utiliser le workspace local (cad de la fonction appelante, "simuler" ) : sim(nom_fichier,'SrcWorkspace','current')
    - copier ta variable K dans le workspace global en utilisant assignin
    - utiliser un script plutot qu'une focntion pour ton programme, afin de travailler directement dans le workspace global

    idéalement tu utilises la première
    dans certain cas (linéarisation pour étude fréquentielle) tu sera contraint d'utiliser la seconde

    Fabien

Discussions similaires

  1. Petit problème de script shell
    Par Mainman dans le forum Linux
    Réponses: 4
    Dernier message: 11/12/2007, 08h07
  2. Problème execution script perl
    Par 00sebbe dans le forum Apache
    Réponses: 1
    Dernier message: 29/08/2005, 14h43
  3. [Débutant] Problème de Script
    Par FREMY dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 26/08/2005, 14h00
  4. [MS-DOS] Problème avec Script
    Par bliml dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 24/05/2005, 13h52
  5. [DOS] Problème de script bat
    Par Philzegore dans le forum Windows
    Réponses: 3
    Dernier message: 04/04/2005, 12h35

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