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èmes avec le bloc embedded matlab fonction


Sujet :

Simulink

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 16
    Points : 8
    Points
    8
    Par défaut Problèmes avec le bloc embedded matlab fonction
    Bonjour,

    je travaille sur un projet de véhicule hybride pour lequel j'aurais besoin d'établir un profil d'accélération en entrée. J'ai dans un premier temps utilisé un script pour réaliser mon profil d'accélération, qui fonctionne.

    Je voudrais maintenant réaliser ce même script via le bloc 'embedded matlab function', afin de passer en paramètre d'entrée mon accélération pour pouvoir la modifier facilement sous simulink. Problème, je n'arrive pas à obtenir une sortie correcte avec ce bloc, alors que mon script quasi identique fonctionne...

    Cela fait maintenant plusieurs heures que je bloque sur ce problème, en ayant essayer différentes choses, mais je n'arrive pas à trouver de solutions.

    Si quelqu'un peut m'aider je lui en serais extrêmement reconnaissant ^^. Voici à quoi ressemble ma fonction (un peu long):


    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    function accel = profil_accel(a)
    % profil vitesse:
     
    % init indicateurs
    tfinal = 1000;
    tchargement = 50;           % temps de chargement/déchargement
    twait = (tfinal - (650+2*tchargement))/2;      % temps d'attente
    accel = zeros(tfinal,1);
    masse = zeros(tfinal,1);
     
    for t=1:1:tfinal
     
        % véhicule en attente
        if t<=twait
            accel(t,1) = 3*a;
     
        end
     
       %accélération de 25s suivi d'une vitesse constante durant 300s, puis
        %décelération de 25s 
     
     
        if (t>(twait+tchargement)) && (t<=(twait+tchargement+25))
            accel(t,1) = a;
        end
     
        if (t>(twait+tchargement+325)) && (t<=(twait+tchargement+350))
             accel(t,1) = -a;
        end
     
        % véhicule en attente 
        if (t>(twait+tchargement+350)) && (t<=(2*twait+tchargement+350))
            accel(t,1) = -5*a;
        end
     
        %accélération de 25s suivi d'une vitesse constante durant 250s, puis
        %décelération de 25s
        if (t>(2*twait+2*tchargement+350)) && (t<=(2*twait+2*tchargement+375))
            accel(t,1) = 1.5*a; 
        end
     
        if (t>(2*twait+2*tchargement+625)) && (t<=(2*twait+2*tchargement+650))
            accel(t,1) = -1.5*a; 
        end
    end
    je mets une constante sur l'entrée 'a' du bloc, égale à 0.5 pour tester. J'ai un plot en sortie.

    J'espère que c'est suffisamment clair...merci d'avance!

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    Je ne comprends pas bien l'intérêt de faire ce calcul dans une MATLAB Function: si j'ai bien compris ton calcul ne doit être effectué qu'une seule fois au début de la simulation alors que ta MATLAB Function est exécutée à chaque pas de simulation (ce qui peut d'ailleurs sans doute expliquer que le résultat n'est pas celui attendu).

    En clair: quel est le gain que tu attends à mettre ton code dans une MATLAB Function?

    Duf
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    En fait, je désire utiliser un bloc embedded function plutot qu'un simple script pour faciliter l'utilisation du modèle. Avec ce bloc je peux directement passer en entrées les paramètres importants comme l'accélération pour pouvoir les modifier rapidement si besoin.

    J'ai réussi au final à faire tourner mon bloc, mais je ne pense pas que ce soit optimal. Effectivement, le temps de simulation me pose problème. les sorties créées sont de taille très importante si je les envoie sur le workspace via le bloc 'to workspace'. Si j'impose un temps de simulation trop élevé, il y a trop de data pour la mémoire et les sorties dans le worspace matlab ne sont pas créées.

    Je vous remet ma nouvelle fonction, à laquelle j'ai aussi ajouté un profil de masse. (Dsl pour le code, je ne sais pas comment le mettre sous un format plus propre )

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    function [accel,masse] = profil_accel_masse(a,t,Mc)
    % profil vitesse:
     
     
    % init indicateurs
    tfinal = 900;
    tchargement = 50;           % temps de chargement/déchargement
    twait = (tfinal - (650+2*tchargement))/2;      % temps d'attente
    accel = zeros(1,tfinal);
    masse = zeros(1,tfinal);
     
     
     for i=1:1:tfinal
        % véhicule en attente
       if t<=twait
           accel(i) = 0;
     
     
       %accélération de 25s suivi d'une vitesse constante durant 300s, puis
        %décélération de 25s 
        if (t>(twait+tchargement)) && (t<=(2*twait+tchargement+350))
            masse(i) = Mc;
        else
            masse(i) = 20500;
        end
     
        if (t>(twait+tchargement)) && (t<=(twait+tchargement+25))
            accel(i) = a;
        end
     
        if (t>(twait+tchargement+325)) && (t<=(twait+tchargement+350))
             accel(i) = -a;
        end
     
        % véhicule en attente 
        if (t>(twait+tchargement+350)) && (t<=(2*twait+tchargement+350))
            accel(i) = 0;
        end
     
        %accélération de 25s suivi d'une vitesse constante durant 250s, puis
        %décélération de 25s
        if (t>(2*twait+2*tchargement+350)) && (t<=(2*twait+2*tchargement+375))
            accel(i) = 1.5*a; 
        end
     
        if (t>(2*twait+2*tchargement+625)) && (t<=(2*twait+2*tchargement+650))
            accel(i) = -1.5*a; 
        end
     
     end
    end

Discussions similaires

  1. Problème avec le block "Embedded MATLAB Function"
    Par binch2005 dans le forum Simulink
    Réponses: 4
    Dernier message: 29/10/2010, 14h54
  2. problème avec les blocs div
    Par polo42 dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 22/09/2006, 10h32
  3. problème avec l'appel d'une fonction
    Par mademoizel dans le forum ASP
    Réponses: 5
    Dernier message: 26/06/2006, 15h04
  4. Problème avec le OnSubmit et ma fonction
    Par CYFL dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 29/03/2006, 14h43
  5. Problème avec l'utilisation de la fonction clock
    Par Matgic95 dans le forum C++Builder
    Réponses: 13
    Dernier message: 09/05/2005, 19h27

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