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

Interfaces Graphiques Discussion :

Récupérer des valeurs affichées dans des cases "Edit" [Débutant]


Sujet :

Interfaces Graphiques

  1. #1
    Candidat au Club
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut Récupérer des valeurs affichées dans des cases "Edit"
    à tous, et un grand bravo aux admin pour tenir un forum aussi agreable a visiter.

    Débutant avec Matlab, j'ai réalisé un programme me permettant de calculer différents paramètres d'un moteur.

    Après beaucoup de temps passé dessus, mon programme fonctionne bien, mais je voudrais lui ajouter un petit "plus", une interface graphique. Je voudrais juste une interface, avec son fichier .m et son .fig, mais je ne voudrais pas trop de code dans ce fichier .m

    Je veux dire par là que je souhaiterais continuer à utiliser mon programme principal sans trop le modifier.

    Mon premier problème est que je ne comprends pas comment faire "communiquer" ce code lié à mon interface avec mon programme de calcul.

    Par exemple, si je crée une fenêtre dans laquelle je renseigne divers champs
    (piece jointe) comment conserver les valeurs entrées par l'utilisateur dans, disons une matrice qui serait conservée dans mon workspace, et que je pourrais donc utiliser avec mon programme de calcul ?

    J'ai parcouru l'aide, mais je ne trouve pas de réponse précise.

    Cette ligne en rouge ne suffit-elle pas pour aller chercher la valeur entrée?

    merci d'avance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    %*************   EDIT ENGINE SPEED VALUE   
    
    function EngineSpeed_CreateFcn(hObject, eventdata, handles)
    if ispc
        set(hObject,'BackgroundColor','white');
    else
        set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
    end
    
    
    function EngineSpeed_Callback(hObject, eventdata, handles)
    
    M(1,1) = str2double(get(hObject,'String'));
    Images attachées Images attachées  

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 316
    Points : 52 951
    Points
    52 951
    Par défaut
    Si je comprends bien, tu veux remplir tous les champs de ton interface graphique et ensuite appuyer sur le bouton Compile pour lancer le code que tu as écrit à la main. C'est ça ?

  3. #3
    Candidat au Club
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Oui exactement.

    Il me semble que, pour que mon programme se lance quand j'appuie sur un Pushbutton, il suffirait presque que je mette juste le nom de mon programme dans le "Callback" correspondant à ce bouton.

    Mais ce que je souhaite, en plus de lancer le programme, c'est que celui-ci utilise les valeurs que je rentre dans les champs.

    Pour l'instant, tout ce que j'ai su faire, par manque de temps et de connaissance était ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    D(1,1)=input('Insert the number of revolutions (in rpm): ');
    D(2,1)=input('Insert the consumption time (in s): ');
    ......
    A savoir, afficher comme des questions pour que l'utilisateur rentre ses paramètres. Un beau tableau, avec des cases à remplir, et un bouton pour lancer le tout ce serait tout de suite plus sympa !

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 316
    Points : 52 951
    Points
    52 951
    Par défaut
    Modifie juste le Callback du Pushbutton en récupérant tous les champs et en les passant comme argument d'entrée de ta fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    M(1)=str2double(get(handles.<Tag du 1er Edit>,'string'));
    M(2)=str2double(get(handles.<Tag du 2ème Edit>,'string'));
    M(3)=str2double(get(handles.<Tag du 3ème Edit>,'string'));
    <etc...>
     
    ta_fonction(M) % tu lances ta fonction avec M en argument d'entré
    C'est l'idée bien sur...il faudra certainement que tu ajoutes ensuite la vérification de la validité des champs de saisie... mais ça c'est après

  5. #5
    Candidat au Club
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut aaarrfffff bien tenté, mais il manque encore qqchose
    merci pour ta réponse Dut

    je pensais deja à un truc du genre, mais ça ne fonctionne pas... il ne manque pas grand chose, j'en suis sûr!!

    (j'avais déjà tenter un truc de ce genre, mais sans être sur de ce que je faisais)

    J'ai rajouté les lignes que tu m'as données dans le .m suivant (celui de mon interface graphique)
    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
    %***************   ENGINE SPEED    **********************
    
    % --- Executes during object creation, after setting all properties.
    function EngineSpeed_CreateFcn(hObject, eventdata, handles)
    if ispc
        set(hObject,'BackgroundColor','white');
    else
        set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
    end
    
    function EngineSpeed_Callback(hObject, eventdata, handles)
    M(1,1)=str2double(get(handles.EngineSpeed,'string'));
    
    
    
    
    %***************   CONSUMPTION    **********************
    
    % --- Executes during object creation, after setting all properties.
    function Consumption_CreateFcn(hObject, eventdata, handles)
    if ispc
        set(hObject,'BackgroundColor','white');
    else
        set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
    end
    
    function Consumption_Callback(hObject, eventdata, handles)
    M(1,2)=str2double(get(handles.Consumption,'string'));
    
    (...)
    
    %***************   PUSH BUTTON    **********************
    
    % --- Executes on button press in pushbutton1.
    function pushbutton1_Callback(hObject, eventdata, handles)
    ensuite, pour essayer sur un exemple, j'ai créé le petit test.m suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function [result] = test(M);
     
    result=2*M;
    et dans le champ "Callback" de mon Pushbutton,

    j'ai donc juste mis mais ceci ne fonctionne pas, voilà ce que me renvoit Matlab
    >> untitled;
    ??? Undefined function or variable 'M'.

    ??? Error while evaluating uicontrol Callback.

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 316
    Points : 52 951
    Points
    52 951
    Par défaut
    J'ai dit dans le Callback du Pushbutton... donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    %*************** PUSH BUTTON **********************
     
    % --- Executes on button press in pushbutton1.
    function pushbutton1_Callback(hObject, eventdata, handles)
     
    M(1,1)=str2double(get(handles.EngineSpeed,'string'));
    M(1,2)=str2double(get(handles.Consumption,'string'));
    test(M)

  7. #7
    Candidat au Club
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup ca fonctionne!

    excuse moi, je croyais que par "Callback" du bouton, tu voulais dire à modifier dans le champ "callback" dans le property inspector du pushbutton.

    Ce petit exemple fonctionne, je vais faire le tenter sur mon programme.
    une petite question tout de même : pourquoi cette matrice que je crée avec les valeurs entrées dans les editbox ne se génère pas vraiment, pourquoi je ne la retrouve pas dans le workspace?

    enfin, ma seconde question : je souhaiterai cette fois-ci, à la fin de mon calcul, afficher grace à une interface graphique (pourquoi pas d'ailleurs dans la même fenêtre que celle ou je rentre mes parametres) quelques résultats chiffrés dans des cases.

    Mon programme me génère les résultats sous forme de matrices 1x1 présentes dans mon workspace, et je voudrais les afficher proprement, à la maniere de mes parametres d'entrée.

    J'ai cru comprendre que la manip se rapprochait de ce que nous venons de faire, mais en utilisant cette fois ci la fonction "set" et non plus "get".

    Pourrais-tu me renseigner, car encore une fois j'ai trouvé 2 ou 3 trucs dans l'aide, mais ça ne m'éclaire pas plus que ça...

  8. #8
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 143
    Points : 102
    Points
    102
    Par défaut
    effectivement tu peux faire ca tres simplement avec des set.
    Il suffit d'avoir créé les champs voulus dans ton interface, par exemple le champ text1, si tu veux y faire apparaitre la valeur a il te suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(handles.text1,'String',a);

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 316
    Points : 52 951
    Points
    52 951
    Par défaut
    Citation Envoyé par Clint-is-wood
    pourquoi cette matrice que je crée avec les valeurs entrées dans les editbox ne se génère pas vraiment, pourquoi je ne la retrouve pas dans le workspace?
    A lire dans la : Les variables

  10. #10
    Candidat au Club
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    merci bcp coolzy,

    je m'occupe de cette question des que j'en aurais fini avc mon 1er probleme.

    Je ne comprends pas Dut, j'ai déclaré ma matrice global, et pourtant j'ai toujours un message d'erreur que je ne comprends pas



    >> essai
    ??? Attempt to execute SCRIPT mainprogram as a function.

    Error in ==> D:\ESSAI GUI\essai.m (pushbutton1_Callback)
    On line 167 ==> MainProgram(D)

    Error in ==> C:\MATLAB6p5\toolbox\matlab\uitools\gui_mainfcn.m
    On line 66 ==> feval(varargin{:});

    Error in ==> D:\ESSAI GUI\essai.m
    On line 20 ==> gui_mainfcn(gui_State, varargin{:});

    ??? Error while evaluating uicontrol Callback.
    qqun peut-il m'éclairer?

  11. #11
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 316
    Points : 52 951
    Points
    52 951
    Par défaut
    C'est vraiment dommage... tu es passé tout près :

    "Attempt to execute SCRIPT <filename> as a function" (Réponse 2)

    Je te conseille fortement de trouver une alternative à l'utilisation des variables globales...

  12. #12
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 316
    Points : 52 951
    Points
    52 951
    Par défaut
    Modifie le script MainProgram en ajoutant dès la première ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function MainProgram(D)

  13. #13
    Candidat au Club
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Merci Dut

    j'ai compris mon erreur et après avoir fait qq recherches j'ai l'impression que c'est l'erreur classique du debutant Matlab, qui confond script et fonction...

    -Solutions:
    Vous devez transformer votre script en fonction
    je serais bien partant pour essayer, mais je ne sais pas vraiment comment faire
    (je ne demande qu'a apprendre)

    alors si qqun a 5 min pr m'aider ce serait cool...

  14. #14
    Candidat au Club
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Dutmatlab
    Modifies le script MainProgram en ajoutant dès la première ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function MainProgram(D)

    Je debute mais j'avais qd meme pensé à faire ça...
    Mon programme semble se lancer, mais très vite voila ce que j'obtient

    >> essai
    Warning: The value of local variables may have been changed to match the
    globals. Future versions of MATLAB will require that you declare
    a variable to be global before you use that variable.
    > In D:\ESSAI GUI\MainProgram.m at line 4
    In D:\ESSAI GUI\essai.m (pushbutton1_Callback) at line 167
    In C:\MATLAB6p5\toolbox\matlab\uitools\gui_mainfcn.m at line 66
    In D:\ESSAI GUI\essai.m at line 20
    ??? Reference to a cleared variable D.

    Error in ==> D:\ESSAI GUI\MainProgram.m
    On line 55 ==> C = C+((D(6,1)+D(13,1))*133.3-C(BDC)); %1 mmHG = 1 torr = 133.3 Pa

    Error in ==> D:\ESSAI GUI\essai.m (pushbutton1_Callback)
    On line 167 ==> MainProgram(D)

    Error in ==> C:\MATLAB6p5\toolbox\matlab\uitools\gui_mainfcn.m
    On line 66 ==> feval(varargin{:});

    Error in ==> D:\ESSAI GUI\essai.m
    On line 20 ==> gui_mainfcn(gui_State, varargin{:});

    ??? Error while evaluating uicontrol Callback.

  15. #15
    Candidat au Club
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Je ne sais pas si c'est envisageable, mais je ne voudrait pas vraiment renvoyer les valeurs entrées dans mes edit box directement à une fonction.

    Au moment ou j'appuie sur mon pushbutton, apres avoir entré mes valeurs, je voudrais qu'une simple matrice se crée et que mon programme de calcul se lance, celui-ci utilisant ensuite simplement la matrice précédement créée et présente dans mon workspace.

    Je ne sais pas si je suis clair dans mes explications, je ne suis pas très à l'aise avec la programmation; c'est tjs le probleme d'un mec qui fait de la mécanique, qui sait exactement ce qu'il veut faire faire à son programme, mais qui galère à le concevoir.

  16. #16
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 316
    Points : 52 951
    Points
    52 951
    Par défaut
    Il suffit de supprimer la déclaration globale de ta matrice.

    Puisque tu collectes les données dans le callback du bouton, que tu les stockes à cet instant dans ta matrice et que tu passes cette matrice en argument d'entrée de la fonction de calcul, il n'y a pas besoin de la définir comme globale.

  17. #17
    Candidat au Club
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Dutmatlab

    Puisque tu collectes les données dans le callback du bouton, que tu les stockes à cet instant dans ta matrice et que tu passes cette matrice en argument d'entrée de la fonction de calcul, il n'y a pas besoin de la définir comme globale.
    Comme tu me l'as suggéré, j'ai supprimé la déclaration global de ma matrice d'entrée D et rajouté

    function MainProgram(D)

    au début de mon programme de calcul, mais un probleme subsiste

    >> essai
    ??? Reference to a cleared variable D.

    Error in ==> D:\ESSAI GUI\MainProgram.m
    On line 54 ==> C = C+((D(6,1)+D(13,1))*133.3-C(BDC)); %1 mmHG = 1 torr = 133.3 Pa

    Error in ==> D:\ESSAI GUI\essai.m (pushbutton1_Callback)
    On line 165 ==> MainProgram(D)

    Error in ==> C:\MATLAB6p5\toolbox\matlab\uitools\gui_mainfcn.m
    On line 66 ==> feval(varargin{:});

    Error in ==> D:\ESSAI GUI\essai.m
    On line 20 ==> gui_mainfcn(gui_State, varargin{:});

    ??? Error while evaluating uicontrol Callback.

  18. #18
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 316
    Points : 52 951
    Points
    52 951
    Par défaut
    Peux-tu nous montrer la fonction MainProgramm ?

  19. #19
    Candidat au Club
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    bien sur... si c'est programmé comme un porc, dites le moi
    JE DEBUTE !!!!!

    bon désolé c un peu long
    C'est mon programme original, et qui appelle 2 ou 3 autres petits programmes. tout fonctionne, mais comme je voulais une interface graphique, j'ai supprimé ce qui est en rouge et ajouté ce qui figure en vert
    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
    %%%          MAIN PROGRAM          %%%
    
    function [] = MainProgram(D);
    
    %%%          ENGINE DATA          %%%
    
    clear all
    
    l = 0.214;                  %connecting rod length in meters
    r = 0.065;                  %crank length in meters
    ss = 2*r;                   %stroke in meters
    Dp = 0.112;                 %cylinder bore/piston diameter in meters
    lambda = r/l;               %rod/crank relation
    eps = 17.6;                 %compression ratio
    Vd = 1.281e-3;              %displacement per cylinder in m^3
    Vc = Vd/(eps-1);            %compression volume per cylinder in m^3
    Vt = Vd+Vc;                 %total cylinder volume in m^3
    Apis = pi*0.25*Dp^2;        %piston area in m^2
    Ahead = 0.015;              %cylinder head area that transmits heat in m^2 
    
    %%%          GEOMETRICAL DATA          %%%
    
    deguni = 360/1024;          %degrees crank angle per units clock
    TDC = 1025;                 %top dead center 
    BDC = TDC-512;              %bottom dead center
    ACDd = 38;                  %admission valve close delay in degrees
    AOAd = 17;                  %admission valve opening advance in degrees
    EOAg = 53;                  %exhaust valve opening advance in degrees
    duradm = AOAd+180+ACDd;     %duration of admission in degrees
    AC = TDC-((180-ACDd)/deguni);   %admission valve closing
                                    
    ACr = round(AC);                %round AC value
    EO = TDC+((180-EOAg)/deguni);   %exhaust valve opening
                                    
    EOr = round(EO);                %round EO value
    
    %%%          THERMODYNAMICAL DATA          %%%
    
    gm = 1.35;                  %gamma of the mixture of air and combustible
    Rg = 287;                   %gas constant in J/(Kg*K)
    percent = 0.25;             %percentage value at which the heat release starts
    percentinj = 0.15;          %percentage value at which injection starts
    
    
    D(1,1)=input('Insert the number of revolutions (in rpm): ');
    D(2,1)=0;%input('Insert the brake force (in N): ');
    D(3,1)=input('Insert the consumption time (in s): ');
    D(4,1)=input('Insert the admission air quantity (in cm): ');
    D(5,1)=input('Insert the test cell temperature (in °C): ');
    D(6,1)=input('Insert the test cell pressure (in mm Hg): ');
    D(7,1)=0;%input('Insert the water temperature at engine entrance (in °C): ');
    D(8,1)=0;%input('Insert the oil temperature in (°C): ');
    D(9,1)=0;%input('Insert the exhaust gas temperature before turbine (in °C): ');
    D(10,1)=0;%input('Insert the exhaust gas temperature behind turbine (in °C): ');
    D(11,1)=0;%input('Insert the intake temperature behind intercooler (in °C): ');
    D(12,1)=0;%input('Insert the injection pump temperature (in °C): ');
    D(13,1)=input('Insert the exit compressor pressure (in mm HG): ');
    D(14,1)=0;%input('Insert the turbine entrance pressure (in mm Hg): ');
    D(15,1)=0;%input('Insert the turbine exit pressure (in mm Hg): ');
    
    
    %%%          INSERT ALL MATRIX DATA AND FILTER IT          %%%
    
    tdc1 = 1477;    %[MA,tdc1,tdc2,bdc1] = treat_matrixMA();
    tdc2 = 453;     %MA1 =(20.48*MA+0.94)*10^5;%(16.58*MA-0.319)*10^5;%;
    bdc1 = 1989;    %MA = filtering(MA1,5);
    
    [C,sigma] = treat_matrixC(tdc2);
    C = (20.48*C+0.94)*10^5; %(16.58*MA-0.319)*10^5;conversion from volt to pascal
    C = C+((D(6,1)+D(13,1))*133.3-C(BDC));  %1 mmHG = 1 torr = 133.3 Pa
    M = filtering(C,5);
    
    I = treat_matrixI(tdc2,sigma);
    I = I*(-1);
    I = filtering(I,5);
    
    %The cylinder pressure matrix has to be repositioned regarding the initial
    %value in the BDC. This is done by defining the pressure in the BDC as the 
    %sum of the compressor exit pressure and the test cell pressure. This value
    %is then used as the basic pressure for every value in the matrix (see
    %Javiers project, page 133).
    
    s = size(M,1);              %number of measured points
    x = [1:1:s];                %these steps are done to draw the curve later on
    y = [1:1:s];
    %y = y-TDC;                 %displazment of the y vector according to TDC
    
    %%%          CALCULATING THE LIBERATED HEAT          %%%
    
    rpm = D(1,1);
    rps = rpm/60;
    airfl = D(4,1)*10*sin(pi/6)*1.026e-3;               %conversion regla into flow [m^3/s]
    densair = (D(6,1)*133.3)/(287.06*(D(5,1)+273.15));  %ro = p/(R*T) [kg/m^3]
    masairtot = airfl*densair;                          %overall air intake
    ma = masairtot/(rps*3);                             %air intake per cycle 
    
    for i=1:2047     %%%one starts at 3 because of i-2 in the loop!!!
        
        qdeg = i*deguni;
        qdeg = qdeg*pi/180;
        vol((i+1),1) = Vc+Apis*r*((1-cos(qdeg))+(1/lambda)*(1-sqrt(1-lambda^2*(sin(qdeg)^2))));
      
    end
    
    vol(1,1) = vol(1025,1);
    
    %%%          FOR LOOP TO CALCULATE THE PRESSURE CHANGE          %%%
    
    for i=3:2047
    
        IncV(i,1) = (vol(i+1,1)-vol(i-1,1))/2;          %increase of cylinder volume
        IncP(i,1) = (M(i+1,1)-M(i-1,1))/2;              %increase of cylinder pressure
        DIncP(i-1,1) = (IncP(i,1)-IncP(i-1,1));         %d/dalpha of IncP
        Pinst(i,1) = M(i);                              %cylinder pressure
        V(i,1) = vol(i);
        Tg(i,1) = (V(i,1)*M(i,1))/(ma*Rg);              %gas temperature in Kelvin
        
    end
    
    %%%          HEAT TRANSFER CALCULATION (WOSCHNI)          %%%
    
    %IncP=filtering(IncP,2);
    
    MA = M;
        
        for i=800:1700
            
            MA(i,1) = M(800,1)*(vol(800)/vol(i))^1.32;
            
        end
        
        MA((1701:2048),1)=MA(1700,1);
    
    for i=3:2047
        
        Tpis = 250+273.15;             %piston temperature in Kelvin
        Tcylhea = 200+273.15;          %cylinder head temperature in Kelvin
        Tcyllin = 200+273.15;          %cylinder liner temperature in Kelvin
        
        Tac = Tg(ACr,1);        %temperature behind compressor, while admission valve closes [kelvin]
        Pac = M(ACr,1);         %pressure behind compressor, while admission valve closes [Pa]
        Vac = vol(ACr);         %volume while admission valve closes [m^3]
        Acyllin(i,1) = vol(i)/(Dp/4);%cylinder liner area exposed to the gas
        coefC1 = 2.28;          %according to Heywood and VKI = Verdichtung,Expansion
        
        w(i,1) = coefC1*(2*ss*rps)+((0.00324*((Vd*Tac)/(Pac*Vac)))*(M(i,1)-MA(i,1)));    %[m/s]
    
        alpha(i,1) = 0.013*(Dp^(-0.2))*((M(i,1))^0.8)*((Tg(i,1))^(-0.53))*((w(i,1))^0.8); %[W/m^2K]
        % alpha is the heat transfer/film coefficient --> Q = alpha*A*(Ti-Twall) 
        IncQht(i,1) = (1/(rps*1024))*alpha(i,1)*(Apis*(Tg(i,1)-Tpis)+Ahead*(Tg(i,1)-Tcylhea)+Acyllin(i,1)*(Tg(i,1)-Tcyllin)); %[J/units encode]
    
    end
    
    %%%          CALCULATION OF THE INCREMENTAL HEAT REALESE          %%%
    
    PdV = (gm/(gm-1))*Pinst.*IncV;
    VdP = (1/(gm-1))*V.*IncP;
    IncQ = PdV+VdP;             %incremental heat released [J/unit]
    IncQt = IncQ+IncQht;        %total heat realease rate according to vk lecture no. 3
    
    
    [IncQtT,fppc,fpdc,io,ioo] = TreatIncQ(IncQt,M);
    
    %%%          ACUMULATED HEAT Qacum           %%%
    
    %Qacum=0;
    
    %for i = 2:size(IncQt,1)
    %    Qacum(i) = Qacum(i-1)+IncQtT(i);
    %    i = i+1;
    %end
    
    %%%          DETERMINING THE IGNITION DELAY          %%%
    
    % this is done according to grafic on page 103
    
    
    % determination of the injection starting point
    
    valueinj = (min(I)+percentinj*max(I));
    pinj = 800;
    while I(pinj)<valueinj
        pinj = pinj+1;
    end
    
    % determination of the combustion starting point
    
    
    deltaQ = max(IncQtT)-min(IncQtT);
    
    valueQ = min(IncQtT)+percent*deltaQ;
    
    plibQ = find(IncQtT==min(IncQtT));
    
    while IncQtT(plibQ)<valueQ
        plibQ = plibQ+1;
    end
    
    % comparison of the integral of IncQt and the mass of combustible
    
    ENER1 = 0; 
    for i = 1:1035;
        ENER1 = ENER1+IncQt(i); %energy converted during the combustion process
        i=i+1;
    end
    
    volcom1 = 1/D(3,1);         %volume combustible in l/s
    volcom2 = volcom1/(rps*3);  %volume combustible in liters per cylinder and cycle
    mascom1 = volcom2*0.84;     %converting volume into mass
    ENER2 = mascom1*42800000;   %energy J/(cyliner*cycle)
    
    error_energy = 100*(ENER1-ENER2)/ENER2; %error in percent
    
    % calculation of dp/dalpha max
    
    dpmax = max(DIncP);
    
    % calculation of dpmax IncP max of the second combustion phase
    
    IncPmax = max(M)-M(plibQ);
    
    igndel = 1000*(plibQ-pinj)/(1024*rps); %ignition delay in ms
    tpremi = 1000*(fppc-plibQ)/(1024*rps); %time premixed combustion in ms
    tdifus = 1000*(fpdc-fppc)/(1024*rps);  %time difusive combustion in ms
    
    %%%          GRAFIX          %%%
    
    hold on;
    grid on;
    
    Mr = M(884:1308)/1e5;%(M(884:1280)/1.1013e5);   %changing the pressure from Pascal to bar
    IncQtTr = IncQtT(884:1308);
    
    Ir = I((884:1308));
    yr=linspace(-50,100,425);
    %yr = (y(884:1280));
    %yr = y(998:1139);
    
    
    [AX,H1,H2] = plotyy(yr,IncQtTr,yr,Mr);
    set(H1,'LineStyle','-');
    set(H2,'LineStyle',':');
    hold on;
    H3 = plot(yr,(15*Ir)-2,'r-');
    v = [H1,H2,H3];
    hh = legend(v,'Released Heat Rate','Pressure Curve', 'Injection Signal',1);
    
    grid off;
    
    xlabel('Crank Shaft Revolutions, Reference TDC [in degrees]');
    %set(get(y,'Xlabel'),'String','crank shaft revolutions, reference TDC [in degrees]');
    set(get(AX(1),'Ylabel'),'String','Released Heat Rate [Joule/unit]');
    set(get(AX(2),'Ylabel'),'String','Cylinder Pressure [bar]');
    set(AX(1),'Ylim',[-20 120]);
    set(AX(1),'Ytick',[-20 0 20 40 60 80 100 120]);
    set(AX(2),'Ylim',[0 140]);
    set(AX(2),'Ytick',[0 20 40 60 80 100 120 140]);

  20. #20
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 316
    Points : 52 951
    Points
    52 951
    Par défaut
    Citation Envoyé par Clint-is-wood
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function [] = MainProgram(D);
     
    clear all
    Il n'y aurait pas quelque chose qui te choquerait dans l'une des deux lignes ci-dessus ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/10/2014, 16h05
  2. Afficher des valeurs particulières dans des combobox
    Par arnaud.lebailly dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/09/2014, 15h33
  3. la somme des valeurs affichées dans des textbox
    Par sabrina_beautyful dans le forum Windows Forms
    Réponses: 1
    Dernier message: 22/05/2009, 21h00
  4. Réponses: 1
    Dernier message: 19/08/2006, 02h02

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