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 :

Comment créer un bloc qui utilise une fonction MATLAB


Sujet :

Simulink

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 56
    Points : 38
    Points
    38
    Par défaut Comment créer un bloc qui utilise une fonction MATLAB
    Bonjour à tous,

    Tout d'abord, avant de poster, j'ai parcouru le net et lu quelques écrits ; mais je n'es pas trouver mon bonheur.

    Je cherche à créer un bloc sous Simulink qui utilise une fonction Matlab (que j'ai créé).

    J'ai plusieurs blocs à créer et mes fonctions possèdent plusieurs entrées et sorties.

    A titre d'exemple, j'ai crée une fonction Matlab qui a pour entrée "l'altitude" et qui donne en sortie "la pression statique, la masse volumique, la densité, la température".

    Comment puis-je créer un bloc utilisant cette fonction ? Ce bloc, dans le cadre d'une simulation, devra donc avoir en entrée l'altitude et me donner les diverses sorties.

    Beaucoup parle de S-function, mais je n'es pas réussi à la paramétrer pour mon usage, ni a trouver de document relatant de cette utilisation.

    Merci par avance.

  2. #2
    Membre expert
    Avatar de Clotho
    Homme Profil pro
    R&D
    Inscrit en
    Avril 2011
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 524
    Points : 3 383
    Points
    3 383
    Par défaut
    Hello,

    ce bloc existe de base si tu as SIMULINK, il s'agit du matlab function block et l'aide, pour une fois dans SIMULINK, est plutôt claire!

    Bon, après c'est facile à dire et je ne l'ai utilisé que pour faire une lecture récursive de fichiers dans un dossier unique. Mais les entrées/sorties sont paramétrables, le plus dur est de faire des variables qui collent en entrées, et de bien faire attention de la façon dont tu as tes sorties (timeseries, variables, constantes...).

    Comme il est dit au début de l'aide dans le logiciel, le plus aisé pour comprendre l'utilisation des blocs de Simulink reste de farfouiller la base de données participative de the mathworks, avec en critère de recherche le nom de ton bloc, tu auras plein de modèles l'utilisant de façon différente.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 56
    Points : 38
    Points
    38
    Par défaut
    Merci de ta réponse

    J'avais regardé ce bloc, mais peut être pas suffisamment, vu que je n'ai pu le faire fonctionner ...

    Je vais refaire quelques recherches sur cette fonction.

    Je re-posterai pour donner suite

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 56
    Points : 38
    Points
    38
    Par défaut
    Bon, il s'avère que la fonction que je recherchais "Embedded MATLAB Function" n'est pas dans ma bibliothèque Simulink ...

  5. #5
    Membre expert
    Avatar de Clotho
    Homme Profil pro
    R&D
    Inscrit en
    Avril 2011
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 524
    Points : 3 383
    Points
    3 383
    Par défaut
    L'embedded est arrivé avec la R2009, je crois. si tu as une plus ancienne je ne sais pas comment contourner ce soucis sur les versions plus anciennes.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 56
    Points : 38
    Points
    38
    Par défaut
    Bon j'ai négocié une version plus récente .

    Maintenant wait and see

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 56
    Points : 38
    Points
    38
    Par défaut
    EDIT : Post à supprimer, car le titre n'est plus adapté

    Bon, finalement je reste en version 6.5 pour une meilleur compatibilité avec d'autre machine

    Je recherche donc a réaliser une S-function MATLAB.

    Je n'arrive pas rendre opérationnelle la fonction suivante :

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    function [sys,x0,str,ts] = atmosphere_sfction(t,x,u,flag)
     
     
    switch flag,
     
      case 0
        sys=mdlInitializeSizes;
     
      case 3
     
    gamma=1.4;
    r=287.0529;
    ro_alt_0=1.225;
     
    if (0<=u)&&(u<=11000);
        Ps=101325*((1-(22.5576934*(10^-6))*u)^5.2558774);
        T=288.150-0.0065*u;
        a=sqrt(gamma*r*T);
        ro=(Ps/(r*T));
        d=ro/ro_u_0;
        sys=[Ps T a ro d];
    elseif (11000<u)&&(u<=20000);
        Ps=22632*exp((-157.688446*(10^-6))*(u-11000));
        T=216.65;
        a=sqrt(gamma*r*T);
        ro=(Ps/(r*T));
        d=ro/ro_u_0;
        sys=[Ps T a ro d];
    elseif (20000<u)&&(u<=32000);
        Ps=5474.9*((1+(4.6157398*(10^-6))*(u-20000))^-34.1632061);
        T=216.65+0.001*(u-20000);
        a=sqrt(gamma*r*T);
        ro=(Ps/(r*T));
        d=ro/ro_u_0;
        sys=[Ps T a ro d];
    elseif (32000<u)&&(u<=47000);
        Ps=868.014*((1+(12.2457904*(10^-6))*(u-32000))^-12.2011445);
        T=228.65+0.0028*(u-32000);
        a=sqrt(gamma*r*T);
        ro=(Ps/(r*T));
        d=ro/ro_u_0;
        sys=[Ps T a ro d];
    end 
     
      case { 1, 2, 4, 9 }
        sys=[];
     
      otherwise
        error(['Unhandled flag = ',num2str(flag)]);
     
    end
     
     
    function sys = mdlInitializeSizes()
     
    sizes = simsizes;
    sizes.NumContStates  = 0;
    sizes.NumDiscStates  = 0;
    sizes.NumOutputs     = 1; 
    sizes.NumInputs      = 1;  
    sizes.DirFeedthrough = 0;   
    sizes.NumSampleTimes = 0;
     
    str=[];
    x0  = [];
    sys=simsizes(sizes);
    Mon problème vient du fait que je n'es pas réellement compris le fonctionnement de la fonction (utilisation des flags, et surtout les initialisations, déclarations).

    L'objectif de cette fonction est de renvoyer dans un vecteur (ici "sys") différentes valeurs (correspondant à la température, la pression statique, la densité, etc.) de l'atmosphère pour une altitude donnée (variable "u").

    Merci d'avance pour votre aide !

Discussions similaires

  1. Utiliser une fonction Matlab avec LabVIEW
    Par larimoise dans le forum LabVIEW
    Réponses: 5
    Dernier message: 30/03/2015, 11h53
  2. [Lazarus] Comment utiliser une fonction qui se trouve dans une DLL externe ?
    Par [ZiP] dans le forum Lazarus
    Réponses: 2
    Dernier message: 01/12/2012, 01h33
  3. Créer un cron qui utilise une variable d'environnement
    Par PoichOU dans le forum Administration système
    Réponses: 2
    Dernier message: 03/05/2012, 20h21
  4. Comment connaître le plugin qui utilise une extension ?
    Par Contrec dans le forum Eclipse Platform
    Réponses: 4
    Dernier message: 03/03/2010, 12h06
  5. [Compiler] Utiliser une fonction MATLAB en C++
    Par SlySlayer dans le forum MATLAB
    Réponses: 6
    Dernier message: 23/08/2007, 09h35

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