Bonjour.

Voici une partie d'un projet de programme de régulation de four avec hystérésis.

Le cahier des charges est simple. deux résistances, haut et bas chauffent un four .

J’allume la résistance du bas pendant un cycle de 3 secondes, je l'éteint, et j'allume la résistance du haut pendant un cycle 2 secondes je l'éteint, et allume le bas, , et ainsi de suite..
Il ne faut JAMAIS que les deux résistances, haut et bas soient allumés en même temps,
Pendant le cycle de chauffe, si la température est atteinte, je sors du cycle, et passe à l'autre cycle de chauffe.

J'ai conçu deux fonctions qui s'appellent l'une et l'autre. le soucis et de savoir si cet algorithme est stable, notamment avec la fonction : sleep(); qui est très importante pour avoir une minuterie..


Programme complet : Départ dans le Main par : " alumageBas (); "

Il s'agit de gérer un four électrique de boulangerie à trois étage, soit trois algorithme différents tournant simultanément, cet algorithme gère uniquement un étage.
La saisie des valeurs de température et commande sur les résistances électrique ce fait via des modules USB.

Merci pour vos suggestion et remarques.





]
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
#include <QCoreApplication>
#include <string.h>
#include <unistd.h>   /* sleep() */
#include <ctime>
#include <iostream>
//#include <curses.h>
 
using namespace std;
 
int consigne = 20 ; //--Température de consigne
int hysteresis = 0.5 ; //--Valeur seuil pour éviter que le relai ne cesse de commuter dans les 2 sens
 
int temperatureHaut ;  //-- Saisie de la Température sur Sonde du Haut
int temperatureBas;    //-- Saisie de la Température sur Sonde du bas
 
int resistanceHaut ;  //-- Entier de Test: 1 = Résistance allumée sous tension. 0 = Résistance  éteinte Hors tension
int resistanceBas ;    //-- Entier de Test: 1 = Résistance allumée sous tension. 0 = Résistance  éteinte Hors tension
 
 
void alumageBas ();  //-- Fonction allumage bas
void alumageHaut ();  //-- Fonction allumage haut
 
 
 
 
 
int main(int argc, char *argv[])
 
         {
                QCoreApplication a(argc, argv);
 
                         alumageBas ();
 
                                return a.exec();
 
                                                                }
 
 
 
 
 
 
 
void alumageBas ()
 
  {
 
    int ctr;
 
    resistanceBas  = 1;
      cout<<"Allumage Bas, Resistance Bas mise sur  " <<  resistanceBas  ;
                  cout <<  endl ;
 
 
 
     for (ctr = 0; ctr < 3; ctr++)
 
        {
             if (temperatureBas > (consigne + hysteresis))
 
                  {        resistanceBas  = 0;
                              alumageHaut () ;
                                                                   }
 
 
 
 
                             cout<<"Bas-Sur" <<  resistanceBas ;
                                  cout <<  endl ;
                                     sleep(1);
                                                                                       }
 
 
 
                             resistanceBas  = 0;
 
                              cout<<"Coupure contact Bas Resistance Bas mise sur  " <<  resistanceBas  ;
                              cout <<  endl ;
                              cout <<  endl ;
 
                                         alumageHaut () ;
 
                                                                                                                }
 
 
 
 
void alumageHaut ()
{
 
     int ctr;
 
      resistanceHaut  = 1;
       cout<<"Allumage Haut, Resistance haut mise sur  " <<  resistanceHaut  ;
              cout <<  endl ;
 
 
       for (ctr = 0; ctr < 2; ctr++)
 
            {
 
                    if (temperatureHaut > (consigne + hysteresis))
 
                          {
                                        resistanceHaut  = 0;
                                           alumageBas ();
 
                                                                                   }
 
 
 
                                      cout<<"Haut-Sur" <<  resistanceHaut  ;
                                        cout <<  endl ;
                                          sleep(1);
                                                                                                     }
 
 
 
 
 
                             resistanceHaut  = 0;
                                 cout<<"Coupure contact haut Resistance haut mise sur  " <<  resistanceHaut  ;
                                    cout <<  endl ;
                                    cout <<  endl ;
 
                                        alumageBas ();
 
 
                                                                                                                       }