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 :

Gestion entrées/sorties modèle Simulink


Sujet :

Simulink

  1. #41
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 44
    Points : 10
    Points
    10
    Par défaut
    Mon modèle s'appelle Modele_1c, ma dll s'appelle Modele_1c_win64.dll. Cela te serait-il plus facile si je t'envoie le modèle et la dll par courriel?

  2. #42
    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
    Il faudrait surtout que dans ton code tu utilises la chaine de caractères 'Modele_1c' plutôt que d'appeler la variable Modele_1c, ce qui donnerait (pour commencer):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    lib_name=['Modele_1c', '_win64'];
    Simulink & Embedded Coder

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

  3. #43
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 44
    Points : 10
    Points
    10
    Par défaut
    Merci pour la subtilité...
    Il me manquait encore des *.h dans le dossier mais je les ai ajoutés. Tout fonctionne très bien! Un grand merci!

    Mais... j'ai encore une ou l'autre question (plutôt de syntaxe):

    - dans l'expression "yout(i)=output.Value.Out1" qui est dans la boucle for, comment lui faire ajouter les 28 sorties à yout (de Out1 à Out28)?

    - si je modifie une valeur dans mon interface, je mettrai à jour mes variables via la fonction param.Value, c'est bien cela?

    - lorsque j'aurai inséré ce code dans celui de mon interface, et que j'aurai créé mon exécutable avec deploytool pour pouvoir exécuter mon modèle sur une machine sans ML, n'aurai-je pas un problème par rapport aux variables du Workspace?

    Voilà, encore merci pour ton aide précieuse!

  4. #44
    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
    Pour répondre à tes questions:
    • La syntaxe va être la même, il faut juste changer 'Out1' en 'Out2', 'Out3', etc.
    • Oui
    • Normalement non
    Simulink & Embedded Coder

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

  5. #45
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 44
    Points : 10
    Points
    10
    Par défaut
    Voilà, tout fonctionne à merveille.
    Je vais maintenant m'atteler à faire un exécutable...

    Il me reste par contre une incompréhension. J'ai inséré 2 "Pop-Up Menu" afin de faire un graphe et de choisir les données du graphe. Quand je fais plusieurs passes de simulation, et que je sélectionne une option dans chaque menu, tout se passe bien et le graphe se dessine. Mais si je laisse la sélection par défaut, j'ai un bug car l'index du menu n'a pas été retourné... Comment faire pour que l'index soit retourné dans tous les cas?

    Voici le code d'un menu (les 2 sont identiques, seuls les textes varient) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    % --- Executes on selection change in popupmenu2.
    function popupmenu2_Callback(hObject, eventdata, handles)
    % hObject    handle to popupmenu2 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    % Hints: contents = cellstr(get(hObject,'String')) returns popupmenu2 contents as cell array
    %        contents{get(hObject,'Value')} returns selected item from popupmenu2
    index=get(hObject,'Value')
    strlist=get(hObject,'String');
    setappdata(gcf,'Ordonnee',index);

  6. #46
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Tu l'auras compris, il te faut l'initialiser au lancement de ton interface. Chose que tu peux faire dans la fonction OpeningFcn.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setappdata(hObject,'Ordonnee',1);

  7. #47
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 44
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Subtile l'initialisation... C'est corrigé!

    J'ai donc lancé deploytool pour créer mon exécutable, en incluant tous les fichiers (*.dll, *.m, *.h). Mais il n'en a pas voulu... Il semblerait qu'il lui manque "-a" avant les *.h. N'ayant pas trouvé où les mettre dans deplytool, je me suis tourné vers la commande "mcc". Voici donc ma commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mcc -m -e Simturb.m -o Simturb -a Modele_1c.h -a Modele_1c_private.h -a Modele_1c_types.h -a Modele_1c_win64.dll -a rt_nonfinite.h -a rtGetInf.h -a rtGetNaN.h -a rtwtypes.h -a set_data_in.m -a create_var.m -a Simturb.fig
    Il me crée bien mon exécutable, et quand je le lance, ma fenêtre apparaît. Je lance une simulation, et là rien, mes tables ne bougent pas... Pourtant, pas de bug apparent ou de plantage.

    Qu'ai-je fait de travers? Je vais bien finir par y arriver!

  8. #48
    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
    Pour avoir plus d'information (et les messages d'erreur qui doivent sans doute exister), lance ton exécutable (de ton interface graphique) depuis la fenêtre de commande DOS (cmd dans Windows)
    Simulink & Embedded Coder

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

  9. #49
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 44
    Points : 10
    Points
    10
    Par défaut
    Bien vu, trop fort!

    Voici le message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ??? Error using ==> loadlibrary at 247
    Deployed applications must use a prototype file instead of a header file. To create the prototype, use the loadlibrary mfilename option. Use the prototype file in compiled code. See http://www.mathworks.com/access/helpdesk/help/toolbox/compiler/brb8oui.html for more information
    J'ai jeté un oeil sur le lien, mais je pige pas trop...

  10. #50
    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
    Ce qui est expliqué dans ce lien c'est qu'avant de compiler ton interface, tu dois appeler la fonction LOADLIBRARY de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    loadlibrary(library, header, 'mfilename', 'mylibrarymfile');
    Ce qui te permet de créer le fichier 'mylibrarymfile' et de modifier ton appel à LOADLIBRARY dans ton code pour utiliser ce fichier plutôt que le '.h' de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    loadlibrary(library, @mylibrarymfile)
    Il faut bien sûr que le fichier 'mylibrarymfile' soit à côté de ta DLL
    Simulink & Embedded Coder

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

  11. #51
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 44
    Points : 10
    Points
    10
    Par défaut
    Désolé, mais je ne vois pas trop ce que je dois faire par rapport à mes fichiers...

    Ce que j'ai dans mon dossier :
    - Modele_1c.h
    - Modele_1c_private.h
    - Modele_1c_types.h
    - Modele_1c_win64.dll
    - rt_nonfinite.h
    - rtGetInf.h
    - rtGetNaN.h
    - rtwtypes.h
    - Simturb.m
    - Simturb.fig
    - 2 fichiers *.m pour 2 fonctions auxiliaires
    - le fichier *.mdl de mon modèle n'est pas dans ce dossier

    A partir de là, comment dois-je formuler ma commande pour que le mcc fonctionne ensuite?

  12. #52
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    loadlibrary('Modele_1c_win64', 'Modele_1c.h', 'mfilename', 'mHeader');
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    loadlibrary('Modele_1c_win64', @mHeader);
    Simulink & Embedded Coder

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

  13. #53
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 44
    Points : 10
    Points
    10
    Par défaut
    Désolé, mais il ne veut vraiment pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >> loadlibrary('Modele_1c','Modele_1c','mfilename','mHeader')
    ??? Error using ==> loadlibrary at 441
    There was an error loading the library "Modele_1c"
    Le module spécifié est introuvable.
     
     
     
    Caused by:
        Error using ==> loaddefinedlibrary
        Le module spécifié est introuvable.

  14. #54
    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
    Effectivement je me suis trompé dans la syntaxe mais tu devrais pouvoir trouver la solution en t'aidant de l'aide de LOADLIBRARY
    Simulink & Embedded Coder

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

  15. #55
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 44
    Points : 10
    Points
    10
    Par défaut
    Bon, un bug qui m'énerve depuis des heures mais que je ne trouve pas...
    Voici mon code principal :

    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    function varargout = Simturb(varargin)
    % SIMTURB MATLAB code for Simturb.fig
    %      SIMTURB, by itself, creates a new SIMTURB or raises the existing
    %      singleton*.
    %
    %      H = SIMTURB returns the handle to a new SIMTURB or the handle to
    %      the existing singleton*.
    %
    %      SIMTURB('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in SIMTURB.M with the given input arguments.
    %
    %      SIMTURB('Property','Value',...) creates a new SIMTURB or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before Simturb_OpeningFcn gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to Simturb_OpeningFcn via varargin.
    %
    %      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
    %      instance to run (singleton)".
    %
    % See also: GUIDE, GUIDATA, GUIHANDLES
     
    % Edit the above text to modify the response to help Simturb
     
    % Last Modified by GUIDE v2.5 24-Feb-2012 10:58:13
     
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @Simturb_OpeningFcn, ...
                       'gui_OutputFcn',  @Simturb_OutputFcn, ...
                       'gui_LayoutFcn',  [] , ...
                       'gui_Callback',   []);
    if nargin && ischar(varargin{1})
        gui_State.gui_Callback = str2func(varargin{1});
    end
     
    if nargout
        [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
    else
        gui_mainfcn(gui_State, varargin{:});
    end
    % End initialization code - DO NOT EDIT
     
     
    % --- Executes just before Simturb is made visible.
    function Simturb_OpeningFcn(hObject, eventdata, handles, varargin)
    % This function has no output args, see OutputFcn.
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    % varargin   command line arguments to Simturb (see VARARGIN)
     
    % Choose default command line output for Simturb
    handles.output = hObject;
     
    % Update handles structure
    guidata(hObject, handles);
     
    % UIWAIT makes Simturb wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
    [S1,S2]=set_data_in(1);
    setappdata(gcf,'Tableau_entrees',S1);
    setappdata(gcf,'Tableau_sorties',S2);
    h=handles.uitable1;
    set(h,'Data',S1);
    h=handles.uitable2;
    set(h,'Data',S2);
    cpt=1;
    setappdata(gcf,'Indice_compteur',cpt);
    results=zeros(28,50);
    setappdata(gcf,'Results_history',results);
    data=str2num(char(S1(:,2)));
    setappdata(gcf,'Data_in',data);
     
    % --- Outputs from this function are returned to the command line.
    function varargout = Simturb_OutputFcn(hObject, eventdata, handles) 
    % varargout  cell array for returning output args (see VARARGOUT);
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    % Get default command line output from handles structure
    varargout{1} = handles.output;
     
     
    % --- Executes on button press in quit_button.
    function quit_button_Callback(hObject, eventdata, handles)
    % hObject    handle to quit_button (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    answer=questdlg('Voulez-vous vraiment quitter?',...
        'Quitter','Oui','Non','Non');
    if strcmp(answer,'Oui')
        close;
    end
     
    % --- Executes on button press in simul_button.
    function simul_button_Callback(hObject, eventdata, handles)
    % hObject    handle to simul_button (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    answer=questdlg('Voulez-vous lancer la simulation avec les paramètres actuels?',...
        'Lancer simulation','Oui','Non','Non');
    if strcmp(answer,'Oui')
     
        %cpt=getappdata(gcbf,'Indice_compteur');
        results=getappdata(gcbf,'Results_history');
        %clear results;
        h1=handles.edit3;
        iter=str2num(get(h1,'String'));
        setappdata(gcf,'Nb_it',iter);
        if iter==0
            iter=1;
        end
        h2=handles.edit2;
        pas=str2num(get(h2,'String'));
        h3=handles.checkbox1;
        box=get(h3,'Value');
        val_a_it=getappdata(gcbf,'Val_a_it');
        cpt_it=0;
     
        for n=1:iter
     
            lib_name=['Modele_1c', '_win64'];
     
            if ~libisloaded(lib_name)
                loadlibrary(lib_name, ['Modele_1c', '.h']);
            end
     
            calllib(lib_name, ['Modele_1c' '_initialize'], uint8(0));
     
            param=calllib(lib_name, ['Modele_1c' '_P']);
     
            h=handles.uitable1;
            S1new=get(h,'Data');
            val=str2num(char(S1new(:,2)));
     
            if box==1 && iter>1
                val(val_a_it-1)=val(val_a_it-1)+cpt_it*pas;
                cpt_it=cpt_it+1;            
            end
     
            ind=1;
            param.Value.Altitude=val(ind);
            ind=ind+1;
            param.Value.Nombre_de_Mach=val(ind);
            ind=ind+1;
            param.Value.Pertes_entree=val(ind);
            ind=ind+1;
            param.Value.Debit_entree=val(ind);
            ind=ind+1;
            param.Value.Rendement_poly_fan=val(ind);
            ind=ind+1;
            param.Value.BPR=val(ind);
            ind=ind+1;
            param.Value.Pi_fan=val(ind);
            ind=ind+1;
            param.Value.Pertes_BPR=val(ind);
            ind=ind+1;
            param.Value.Pertes_entre_fan_et_comp=val(ind);
            ind=ind+1;
            param.Value.Rend_poly_comp=val(ind);
            ind=ind+1;
            param.Value.Pi_comp=val(ind);
            ind=ind+1;
            param.Value.Froid_1=val(ind);
            ind=ind+1;
            param.Value.Froid_2=val(ind);
            ind=ind+1;
            param.Value.Pertes_sortie_comp=val(ind);
            ind=ind+1;
            param.Value.Sortie_air_1=val(ind);
            ind=ind+1;
            param.Value.Sortie_air_2=val(ind);
            ind=ind+1;
            param.Value.Pertes_CC=val(ind);
            ind=ind+1;
            param.Value.LHV_carb=val(ind);
            ind=ind+1;
            param.Value.Rend_comb=val(ind);
            ind=ind+1;
            param.Value.SOT=val(ind);
            ind=ind+1;
            param.Value.Entree_air_turbine=val(ind);
            ind=ind+1;
            param.Value.Rend_meca=val(ind);
            ind=ind+1;
            param.Value.Rend_poly_turb_HP=val(ind);
            ind=ind+1;
            param.Value.Rapport_detente_HP=val(ind);
            ind=ind+1;
            param.Value.Pertes_entre_turbines=val(ind);
            ind=ind+1;
            param.Value.Rend_poly_turb_BP=val(ind);
            ind=ind+1;
            param.Value.Rapport_detente_BP=val(ind);
            ind=ind+1;
            param.Value.Qf=val(ind);
            ind=ind+1;
            param.Value.Coeff_decharge_f=val(ind);
            ind=ind+1;
            param.Value.Qc=val(ind);
            ind=ind+1;
            param.Value.Coeff_decharge_c=val(ind);
            ind=ind+1;
            param.Value.Coeff_poussee=val(ind);
     
            calllib(lib_name, ['Modele_1c' '_step']);
     
            output=calllib(lib_name, ['Modele_1c' '_Y']);
     
            yout(1)=output.Value.Out1;
            yout(2)=output.Value.Out2;
            yout(3)=output.Value.Out3;
            yout(4)=output.Value.Out4;
            yout(5)=output.Value.Out5;
            yout(6)=output.Value.Out6;
            yout(7)=output.Value.Out7;
            yout(8)=output.Value.Out8;
            yout(9)=output.Value.Out9;
            yout(10)=output.Value.Out10;
            yout(11)=output.Value.Out11;
            yout(12)=output.Value.Out12;
            yout(13)=output.Value.Out13;
            yout(14)=output.Value.Out14;
            yout(15)=output.Value.Out15;
            yout(16)=output.Value.Out16;
            yout(17)=output.Value.Out17;
            yout(18)=output.Value.Out18;
            yout(19)=output.Value.Out19;
            yout(20)=output.Value.Out20;
            yout(21)=output.Value.Out21;
            yout(22)=output.Value.Out22;
            yout(23)=output.Value.Out23;
            yout(24)=output.Value.Out24;
            yout(25)=output.Value.Out25;
            yout(26)=output.Value.Out26;
            yout(27)=output.Value.Out27;
            yout(28)=output.Value.Out28;
     
            calllib(lib_name, ['Modele_1c' '_terminate']);
     
            data=getappdata(gcbf,'Data_in');
            cpt=getappdata(gcbf,'Indice_compteur');
            for j=1:length(yout)
                results(j,cpt)=yout(j);
            end
     
            for k=1:length(data)
                data(k,cpt)=val(k);
            end
            cpt=cpt+1;
            setappdata(gcf,'Results_history',results);
            setappdata(gcf,'Indice_compteur',cpt+1);
            setappdata(gcf,'Data_in',data);
     
            l2=length(yout);
            S2res=cellstr(num2str(transpose(yout)));
            S2new=getappdata(gcbf,'Tableau_sorties');
            for i=1:l2
                S2new{i,2}=S2res{i,1};
            end
            h2=handles.uitable2;
            set(h2,'Data',S2new);
        end
    end
    % --- Executes on selection change in popupmenu1.
    function popupmenu1_Callback(hObject, eventdata, handles)
    % hObject    handle to popupmenu1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    % Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array
    %        contents{get(hObject,'Value')} returns selected item from popupmenu1
    index=get(hObject,'Value');
    strlist=get(hObject,'String');
    setappdata(gcf,'Abscisse',index);
    setappdata(gcf,'Abscisse_n',strlist);
     
    % --- Executes during object creation, after setting all properties.
    function popupmenu1_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to popupmenu1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
     
    % Hint: popupmenu controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
        setappdata(hObject,'Abscisse',1);
    end
     
     
    % --- Executes on selection change in popupmenu2.
    function popupmenu2_Callback(hObject, eventdata, handles)
    % hObject    handle to popupmenu2 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    % Hints: contents = cellstr(get(hObject,'String')) returns popupmenu2 contents as cell array
    %        contents{get(hObject,'Value')} returns selected item from popupmenu2
    index=get(hObject,'Value');
    strlist=get(hObject,'String');
    setappdata(gcf,'Ordonnee',index);
    setappdata(gcf,'Ordonnee_n',strlist);
     
    % --- Executes during object creation, after setting all properties.
    function popupmenu2_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to popupmenu2 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
     
    % Hint: popupmenu controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
        setappdata(hObject,'Ordonnee',1);
    end
     
     
    % --- Executes on button press in draw_button.
    function draw_button_Callback(hObject, eventdata, handles)
    % hObject    handle to draw_button (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    abs=getappdata(gcbf,'Abscisse');
    ord=getappdata(gcbf,'Ordonnee');
    data=getappdata(gcbf,'Data_in');
    results=getappdata(gcbf,'Results_history');
    cpt=getappdata(gcbf,'Nb_it');
    absn=char(getappdata(gcbf,'Abscisse_n'));
    ordn=char(getappdata(gcbf,'Ordonnee_n'));
     
    xval=zeros(cpt);
    yval=zeros(cpt);
     
    for a=1:cpt
        xval(a)=data(abs-1,a);
    end
    for b=1:cpt
        yval(b)=results(ord-1,b);
    end
     
    h=handles.axes1;
    plot(h,xval,yval);
     
    fct='__fct. de__';
    text=strcat(absn(abs,:),fct,ordn(ord,:));
    h1=handles.text4;
    set(h1,'String',text);
    %setappdata(gcf,'Indice_compteur',cpt+1);
     
     
    % --- Executes on button press in default_button.
    function default_button_Callback(hObject, eventdata, handles)
    % hObject    handle to default_button (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    S1=getappdata(gcbf,'Tableau_entrees');
    h1=handles.uitable1;
    h2=handles.checkbox1;
    h3=handles.edit2;
    h4=handles.edit3;
    h5=handles.popupmenu3;
    set(h1,'Data',S1);
    set(h2,'Value',0);
    set(h3,'String',0);
    set(h4,'String',1);
    set(h5,'Value',1);
     
     
    % --- Executes on button press in reset_button.
    function reset_button_Callback(hObject, eventdata, handles)
    % hObject    handle to reset_button (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    S2=getappdata(gcbf,'Tableau_sorties');
    h=handles.uitable2;
    set(h,'Data',S2);
     
     
    % --- Executes on button press in checkbox1.
    function checkbox1_Callback(hObject, eventdata, handles)
    % hObject    handle to checkbox1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    % Hint: get(hObject,'Value') returns toggle state of checkbox1
    % box=get(hObject,'Value');
    % setappdata(gcf,'Box',box);
     
    % --- Executes on selection change in popupmenu3.
    function popupmenu3_Callback(hObject, eventdata, handles)
    % hObject    handle to popupmenu3 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    % Hints: contents = cellstr(get(hObject,'String')) returns popupmenu3 contents as cell array
    %        contents{get(hObject,'Value')} returns selected item from popupmenu3
    index=get(hObject,'Value');
    strlist=get(hObject,'String');
    setappdata(gcf,'Val_a_it',index);
     
    % --- Executes during object creation, after setting all properties.
    function popupmenu3_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to popupmenu3 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
     
    % Hint: popupmenu controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
    end
     
     
     
    function edit2_Callback(hObject, eventdata, handles)
    % hObject    handle to edit2 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    % Hints: get(hObject,'String') returns contents of edit2 as text
    %        str2double(get(hObject,'String')) returns contents of edit2 as a double
     
     
    % --- Executes during object creation, after setting all properties.
    function edit2_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to edit2 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
     
    % Hint: edit controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
    end
     
     
     
    function edit3_Callback(hObject, eventdata, handles)
    % hObject    handle to edit3 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    % Hints: get(hObject,'String') returns contents of edit3 as text
    %        str2double(get(hObject,'String')) returns contents of edit3 as a double
     
     
    % --- Executes during object creation, after setting all properties.
    function edit3_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to edit3 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
     
    % Hint: edit controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
    end
    Lorsque je lance ma simulation avec plusieurs itérations, mes résultats ne se stockent pas comme je le voudrais dans "results", et en plus, lorsque je veux faire un graphe, j'excède la taille de la matrice au 2e clic (je ne sais pas pourquoi au 2e...)... Donc voilà, il doit y avoir un conflit de compteur ou qqch de genre, mais je ne trouve pas. Si quelqu'un sait m'aider, ce serait vraiment génial!

  16. #56
    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
    Sauf erreur de ma part, tu as un soucis lors du stockage de tes données dans YOUT: à chaque itération tu remplaces la valeur précédente, je ne suis pas sur que ce soit le comportement recherché...
    Il vaudrait mieux quelquechose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    yout(n,1) =output.Value.Out1;
    yout(n,2) =output.Value.Out2;
    ...
    Au passage, tu peux utiliser un bloc Mux pour regrouper tous tes signaux sur un seul port de sortie, celà t'évitera de nombreuses lignes de codes. Ou si tu ne veux pas changer ton modèle, dans MATLAB tu peux faire une boucle comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i = 1:28
    yout(n,i) = output.value.(['Out',num2str(i)]);
    end
    Bon we
    Simulink & Embedded Coder

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

  17. #57
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 44
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Ce week-end loin de mon code m'a permis d'y voir plus clair...
    J'ai apporté les quelques modifications, ce qui le rend plus clair.

    Le bug dont je parlais vendredi vient principalement lorsque je fais un graphe à partir de la 2e simulation. J'utilise un compteur (cpt) pour savoir à quelle simulation je suis, ce qui me permet de récupérer le nombre de résultats que je veux. Mais je pense avoir un problème lors de l'incrémentation de ce compteur, et lors de mon stockage des résultats dans "results".

    Est-ce plus clair...?

  18. #58
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 44
    Points : 10
    Points
    10
    Par défaut
    Voilà, j'ai essayé la commande LOADLIBRARY avec les bons arguments, mais j'obtiens l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ??? Error using ==> loadlibrary at 441
    Failed to preprocess the input file.
     Output from preprocessor is:'cl' n'est pas reconnu en tant que commande interne
    ou externe, un programme ex‚cutable ou un fichier de commandes.
    Après recherches auprès de Google, il semble que mon système 64 bits soit la cause de cette erreur... Ai-je bien compris? Si oui, ça me tuerait...

    Voici les liens concernés :
    http://www.mathworks.com/matlabcentr..._thread/271985
    http://www.toddmccollough.com/how-to...64-bit-matlab/

  19. #59
    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
    Oui c'est une possibilité en effet.

    As-tu un compilateur Visual Studio compatible avec ta version de MATLAB et l'as-tu configuré avec mex -setup(comme précisé dans l'un des liens que tu donnes)?

    Sinon une solution pour se simplifier la vie serait d'installer MATLAB en version 32bits (mais c'est plus long...)
    Simulink & Embedded Coder

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

  20. #60
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 44
    Points : 10
    Points
    10
    Par défaut
    Content de te voir!

    Alors oui, mon Visual est configuré avec mex, j'avais déjà eu le problème avant de venir sur le forum.

    Je crains donc de devoir trouver une machine avec ML 32 bits... Comme on dit, il faut ce qu'il faut!

    En ce qui concerne mon bug de compteur, as-tu une idée (voir hier 9h28)?

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. Gestion d'entrée/sorties dans simulink
    Par RB60200 dans le forum Simulink
    Réponses: 0
    Dernier message: 24/12/2013, 18h21
  2. gestion entrée sortie
    Par ineszbh dans le forum Simulink
    Réponses: 5
    Dernier message: 09/11/2012, 15h02
  3. [TP] Gestion d'entrées-sorties
    Par P52022 dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 30/10/2007, 05h28
  4. Gestion des erreurs entre sorties sans la STL
    Par Djobird dans le forum SL & STL
    Réponses: 2
    Dernier message: 13/02/2007, 21h22
  5. gestion des entrées-sorties
    Par bandit_debutant dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 25/11/2006, 14h55

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