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 :

Probleme avec une S-Function


Sujet :

Simulink

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2012
    Messages : 16
    Points : 6
    Points
    6
    Par défaut Probleme avec une S-Function
    Bonjour je commence juste à travail sur des S-Function, je n’arrive pas à réaliser une fonction très simple je voudrais recopier le résultat de l’entrée en sortie. Pouvez vous me dire ou se trouve mon erreur.
    Code C : 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
     
    #define S_FUNCTION_NAME  test2
    #define S_FUNCTION_LEVEL 2
     
    #include "simstruc.h"
     
     
    /*
       %%%-MATLAB_Construction_Commands_Start
       def = legacy_code('initialize');
       def.SFunctionName = 'test2';
       legacy_code('compile', def);
       %%%-MATLAB_Construction_Commands_End
     */
     
     
    static void mdlInitializeSizes(SimStruct *S)
    {
     
        // Sorties
        ssSetNumOutputPorts(S,1);
     
        ssSetOutputPortWidth(S,0,1);
     
        ssSetOutputPortDataType(S,0,SS_DOUBLE);
     
        //Entrees
     
       ssSetNumInputPorts(S,2);
     
       ssSetInputPortWidth(S,0,1);
       ssSetInputPortDataType(S,0, SS_DOUBLE);
     
    //   ssSetInputPortWidth(S,1,1);
     //  ssSetInputPortDataType(S,1, SS_SINGLE);
     
    }
     
    static void mdlInitializeSampleTimes(SimStruct *S)
    {
        ssSetSampleTime(S, 0, CONTINUOUS_SAMPLE_TIME);
        ssSetOffsetTime(S, 0, 0.0);
    }
     
     
    static void mdlOutputs(SimStruct *S, int_T tid)
    {
    //    real32_T *p1 = (real32_T *) ssGetRunTimeParamInfo(S, 0);
        real32_T *u1 = (real32_T *) ssGetInputPortSignal(S, 0);
        real32_T *y1 = (real32_T *) ssGetOutputPortSignal(S, 0);
     
        *y1 = *u1;
    }
     
    static void mdlTerminate(SimStruct *S)
    {
    }
     
    #ifdef MATLAB_MEX_FILE
    # include "simulink.c"
    #else
    # include "cg_sfun.h"
    #endif

    Merci

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Points : 22
    Points
    22
    Par défaut
    Bonjour, je vous propose ce code simple qui recopie le résultat de l'entrée en sortie comme vous l'avez demandé.

    Code C : 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
    #define S_FUNCTION_NAME test
    #define S_FUNCTION_LEVEL 2
     
    #include "simstruc.h"
     
     
     
    static void mdlInitializeSizes(SimStruct *S)
    {
      ssSetNumSFcnParams(S, 0);
      if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) {
      return; /* Parameter mismatch will be reported by Simulink */
      }
     
    if (!ssSetNumInputPorts(S, 1)) return;
    ssSetInputPortWidth(S, 0, DYNAMICALLY_SIZED);
    ssSetInputPortDirectFeedThrough(S, 0, 1);
    if (!ssSetNumOutputPorts(S,1)) return;
    ssSetOutputPortWidth(S, 0, DYNAMICALLY_SIZED);
    ssSetNumSampleTimes(S, 1);
    /* Take care when specifying exception free code - see sfuntmpl.doc */
    ssSetOptions(S, SS_OPTION_EXCEPTION_FREE_CODE);
    }
     
    static void mdlInitializeSampleTimes(SimStruct *S)
    {
      ssSetSampleTime(S, 0, INHERITED_SAMPLE_TIME);
      ssSetOffsetTime(S, 0, 0.0);
    }
     
     
    static void mdlOutputs(SimStruct *S, int_T tid)
    {
      int i;
      InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,0);
      real_T *y = ssGetOutputPortRealSignal(S,0);
      int_T width = ssGetOutputPortWidth(S,0);
     
      for (i=0; i<width; i++) 
      {
         *y++ = 1 *(*uPtrs[i]);
      }
    }
     
    /* Function: mdlTerminate =====================================================
     * Abstract:
     *    No termination needed, but we are required to have this routine.
     */
    static void mdlTerminate(SimStruct *S)
    {
    }
     
    #ifdef  MATLAB_MEX_FILE    /* Is this file being compiled as a MEX-file? */
    #include "simulink.c"      /* MEX-file interface mechanism */
    #else
    #include "cg_sfun.h"       /* Code generation registration function */
    #endif

Discussions similaires

  1. PROBLEME AVEC UNE TABLE INTERBASE
    Par barro dans le forum InterBase
    Réponses: 1
    Dernier message: 22/09/2004, 08h16
  2. [C#] [Oracle] Probleme avec une procedure stockée
    Par sronin1 dans le forum Accès aux données
    Réponses: 4
    Dernier message: 28/05/2004, 19h04
  3. Probleme avec une table vide
    Par king dans le forum Bases de données
    Réponses: 5
    Dernier message: 20/03/2004, 14h24
  4. au secour probleme avec une requete...
    Par soufiane59 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/09/2003, 10h28
  5. probleme avec une division par zéro
    Par jcharleszoxi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/03/2003, 18h14

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