Bonjour,
je suis actuellement sur un projet java, pour la représentation des variations des paramètres des procédés industriels qui changent en temps réel.
en principe l'utilisateur qui en changeant quelques données et paramètres dans l'interface (genre la valeur de la consigne, le retard...) doit pouvoir visualiser les variations des paramètres de sortie en temps réel (SortiePID,...). pour ce faire j'ai utilisé l'API JFreeChart, en particulier la classe MemoryUsageDemo (qui affiche la mémoire utilisée par java en temps réel...), j'ai réussis à l'adapter à mon besoin pour représenter des fonctions et ça marche comme il faut.

le problème est au niveau de la condition d’arrêt de la méthode récursive (qui à chaque milliseconde doit générer de nouvelles données) représentant le procédé suivante :
Code JAVA : 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
 
            public void face1(double alphaBO, double betaBO, float[]  tabOrdre, float[] tabRetard, double SBO, double SO,
            				double sp1, double si, double si1, double sd1,
            				double sd, double sp, double EBO) 
            { 
            	double pe = 0;
 
            	if(rretard<1)	//si procédé sans retard
                {
                	for(int i=1; i<oordre; i++)
                	{
                		if(i==1)                		    				
                			tabOrdre[1]=(float) (alphaBO*tabOrdre[1]+ggs*betaBO*sortiePid.floatValue());
 
                   		else
                			tabOrdre[i]=(float) (alphaBO*tabOrdre[i]+tabOrdre[i-1]*betaBO);    			
                	}    		
                	SBO=tabOrdre[oordre];	//PV
                }
 
                else	//si procédé avec retard	
                {
                	SBO=tabRetard[0];
                	for(int i=1; i<rretard; i++)
                	{
                		tabRetard[i-1]=tabRetard[i];    			
                	}
                	for(int i=1; i<=oordre; i++)
                	{
                		if (i==1)
                			tabOrdre[1]=(float) (alphaBO*tabOrdre[1]+ggs*betaBO*sortiePid.floatValue());
                		else
                			tabOrdre[i]=(float) (alphaBO*tabOrdre[i]+tabOrdre[i-1]*betaBO);
                	}
                	tabRetard[(int) (rretard-1)]=tabOrdre[oordre];
                	if((manu==1)&&(auto==0))
                	{                			
                		SO=sortiePid.floatValue();
                		Consigne=(float) SBO;
                	}
 
                	if((auto==1)&&(manu==0))	//si mode AUTO
                	{
                		//sortiePid=0;
                		EBO=Consigne-SBO;
                		sp=Gain*EBO;
 
                		if(Ti!=0)
                			si= (si1+1*sp1/3);
 
							si= (si1+pe*sp1/Ti);
                		if(Td!=0)
                			sd=Math.exp(-5*1/(Td*sd1)+5*(sp-sp1));
                		sortiePid=(int) (si+sd+sp+SO);            			   			
                	}
                }
 
                si1=si;  
            	sp1=sp;
                sd1=sd;
 
                SP1.add(new Millisecond(), sp1);
                addFunctionObservation2(sp1);
                face1(alphaBO, betaBO, tabOrdre, tabRetard, SBO, SO,
            				sp1, si, si1, sd1,
            				sd, sp, EBO);
            }


Question: quelle pourrait être la condition d’arrêt d'une telle méthode ?!