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 de S-Function sur MATLAB


Sujet :

Simulink

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    enseignant chercheur
    Inscrit en
    Juin 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : enseignant chercheur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 6
    Par défaut Problème de S-Function sur MATLAB
    salut à tous,
    J'ai simulé la machine synchrone par l'utilisation du bloc S-function avec 5 entrés (vd,vq,vf,vD,vQ,wm) et 5 sorties qui sont les vecteurs d'états (id,iq,if,iD,iQ).
    Voila le code que j'ai écrit pour la configuration du bloc S-function.
    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    function [sys,x0,str,ts]=sm_out(t,x,u,flag)
     
    %description of the machine with s-function
    switch flag,
        case 0 % System initialization 
     
            sizes.NumContStates  = 5; %Number of continuous states
            sizes.NumDiscStates  = 0; %Number of discrete states
            sizes.NumOutputs     = 5; %Number of outputs
            sizes.NumInputs      = 6; %Number of inputs
            sizes.DirFeedthrough = 0; %Flag for direct feedthrough
            sizes.NumSampleTimes = 1; %Number of sample times
     
            sys = simsizes(sizes);
            ts=[0 0]; 
            str=[];
            x0=zeros(5,1);
     
     
     
        case 1 %Calculation of derivatives
            parameters;
     
         Rc1=Rin;%outside resistance
     
     %v=Ri+Ma*di/dt
           R=[-Rs,Lq*p*u(6),0,0,-p*u(6)*MsQ ;
              -Ld*p*u(6),-Rs,p*u(6)*Msfi,p*u(6)*MsD,0;
               0,0,Rf,0,0;
               0,0,0,RD,0;
               0,0,0,0,RQ]; %stator and rotor resistances matrix
             Ma=[-Ld 0 Msfi MsD 0;
                 0 -Lq 0 0 MsQ;
                -Msfi 0 Lf MfD 0;
                -MsD 0 MfD LD 0;
                 0 -MsQ 0 0 LQ ];
            BB1=inv(Ma);
            BB=BB1;%*B1;
            AA=-BB1*R;%-1e-5*eye(5);%
     
            sys=[AA*x(1:5)+BB*[u(1);u(2);u(3);0;0]];
     
        case 3 % the outputs
            parameters;
     
            sys=[x];
     
        otherwise
            sys=[];
    end
    % Initialization
    %  mdlInitializeSizes
    %  flag = 0
    %  
    % Calculation of next sample hit (variable sample time block only)
    %  mdlGetTimeOfNextVarHit
    %  flag = 4
    %  
    % Calculation of outputs
    %  mdlOutputs
    %  flag = 3
    %  
    % Update of discrete states
    %  mdlUpdate
    %  flag = 2
    %  
    % Calculation of derivatives
    %  mdlDerivatives
    %  flag = 1
    %  
    % End of simulation tasks
    %  mdlTerminate
    %  flag = 9
     
    %  Call of parameters which are necessary to make calculation
    Mais quand je le compile il m'affiche des erreurs.
       
    State derivatives returned by S-function  'sm_out' in 'ms_outload/Machine principale/SG1'  
    during  flag=1 call must be a real vector of length 5.
    
    Est-ce qu'il y a quelqu'un qui peut m'aider et merci d'avance.

  2. #2
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Par défaut
    Salut,
    met un point d'arrêt sur la ligne 41 (sys= ...), et vérifie ce que contient sys.

  3. #3
    Membre du Club
    Homme Profil pro
    enseignant chercheur
    Inscrit en
    Juin 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : enseignant chercheur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 6
    Par défaut S-function
    Merci de ta réponse.
    j'ai essayé avec la solution qui vous me transmettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sys=[AA*x(1:5)+BB*[u(1);u(2);u(3);0;0]];.
                ou
    sys=[AA*x(1:5)+BB*[u(1);u(2);u(3);0;0]].
    mais j'ai trouvé une autre erreur:
      
    Error: Fille: sm out.m Line:41 Column: 49
    Unexpected MATLAB operator.
    
    Aide moi SVP.
    Merci.

  4. #4
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Par défaut
    Salut,
    le but de mettre un point d'arrêt est de regarder la valeur de sys, évaluée par Matlab.
    Aurait tu rajouté un point à la fin de la ligne? C'est en tout cas ce que le message de Matlab laisse penser.
    Tu peux aussi ajouter avant la ligne sys= les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    disp(AA);
    disp(x);
    disp(BB);
    Pour mieux comprendre pourquoi matlab te dit que sys n'est pas un vecteur de longueur égale à 5.

  5. #5
    Membre du Club
    Homme Profil pro
    enseignant chercheur
    Inscrit en
    Juin 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : enseignant chercheur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 6
    Par défaut Problème de S-function
    Salut
    Merci de ta réponse.
    J'ai essayé avec la solution qui vous me transmettre, mais toujours le même problème.

    Merci.

  6. #6
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Par défaut
    Ok, je vais essayer d'être plus clair :
    la méthode disp permet d'afficher le contenu des variables dans la console Matlab. Montre nous ce que renvoient les 3 disp que tu as ajouté dans ton code.

Discussions similaires

  1. problème d'axes sur MATLAB
    Par rolandperes dans le forum MATLAB
    Réponses: 2
    Dernier message: 04/07/2015, 17h07
  2. Problème avec le block "Embedded MATLAB Function"
    Par binch2005 dans le forum Simulink
    Réponses: 4
    Dernier message: 29/10/2010, 14h54
  3. problème avec la programation du bloc PLL sur matlab
    Par meryem24 dans le forum MATLAB
    Réponses: 0
    Dernier message: 04/03/2010, 09h07
  4. Problème variable locale sur MATLAB
    Par nuans dans le forum MATLAB
    Réponses: 10
    Dernier message: 12/04/2007, 10h34
  5. Réponses: 25
    Dernier message: 16/07/2003, 20h41

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